VisiData 剪贴板完全指南:行/单元格/列的内外部复制粘贴与系统剪贴板对接
数据分析CLI数据可视化【免费下载链接】visidataA terminal spreadsheet multitool for discovering and arranging data项目地址https://gitcode.com/gh_mirrors/vi/visidata点击查看免费下载VisiData 是一款在终端中浏览与整理数据的“电子表格多面手”其剪贴板体系分为“内部剪贴板”和“系统剪贴板”两层前者在 VisiData 进程内暂存行、单元格与列值供表内快速搬运后者则与操作系统剪贴板对接让数据可以自由进出其他应用。本文基于 visidata/guides/ClipboardGuide.md 展开结合 visidata/clipboard.py 等源码逐条梳理全部命令、默认按键与底层实现读完即可在表格中熟练完成行级、单元格级、列级的复制/剪切/粘贴以及向系统剪贴板导出、从系统剪贴板新建表格等操作。剪贴板的两层结构与默认按键总览VisiData 的剪贴板命令全部注册在 visidata/clipboard.py共约 60 行命令定义另有 visidata/features/open_syspaste.py 负责“从系统剪贴板打开新表”并统一挂载在Sheet类上因此任何表格TSV、CSV、JSON、XLSX、SQLite 等都共享同一套按键。内部剪贴板存放在vd.memory中由 setClipboardRows/setClipboardCols 管理cliprows、clipcols由 copyCells 管理clipcells。复制的是“引用”而非文本序列化——复制行时连同当时的可见列一起记录visibleCols粘贴时按列对应取值。系统剪贴板通过外部命令读写对应options.clipboard_copy_cmd复制到系统剪贴板与options.clipboard_paste_cmd读回内容命令默认值按平台自动选择。所有命令除个别无默认按键者外的默认按键、长命令名与功能说明汇总如下其中g前缀表示“对选中项批量执行”z前缀表示“单单元格/单值操作”Y/P代表对系统剪贴板的大写操作按键长命令名功能作用对象ycopy-row复制当前行到内部剪贴板行gycopy-selected复制选中行到内部剪贴板行xcut-row删除当前行并移入内部剪贴板行gxcut-selected删除选中行并移入内部剪贴板行ppaste-after将内部剪贴板行粘贴到当前行之后行Ppaste-before将内部剪贴板行粘贴到当前行之前行zycopy-cell复制当前单元格到内部剪贴板单元格zxcut-cell删除当前单元格并移入内部剪贴板单元格zppaste-cell将最近一次复制值写入当前单元格单元格gzycopy-cells复制当前列选中行的值到内部剪贴板单元格列gzxcut-cells删除当前列选中行的值并移入内部剪贴板单元格列gzpsetcol-clipboard用内部剪贴板值覆写当前列选中行单元格列Ysyscopy-row复制当前行到系统剪贴板行gYsyscopy-selected复制选中行到系统剪贴板行zYsyscopy-cell复制当前单元格到系统剪贴板单元格gzYsyscopy-cells复制当前列选中行的值到系统剪贴板txt单元格列无默认键syscopy-colname复制当前列名到系统剪贴板列名zPsyspaste-cells将系统剪贴板文本粘贴到从光标开始的区域单元格区域gzPsyspaste-cells-selected将系统剪贴板文本粘贴到选中单元格单元格区域gShiftPopen-syspaste将系统剪贴板内容作为新表打开新建表格行级操作复制、剪切与粘贴内部剪贴板复制行y/copy-row执行copyRows([cursorRow])把当前光标所在行复制进内部剪贴板。gy/copy-selected执行copyRows(onlySelectedRows)把当前选中的所有行复制进内部剪贴板。copyRows 的实现同时记录行与可见列Sheet.api def copyRows(sheet, rows): vd.setClipboardRows(rows) vd.setClipboardCols(list(sheet.visibleCols)) if not rows: vd.warning(no %s selected; clipboard emptied % sheet.rowtype) else: vd.status(copied %d %s to clipboard % (len(rows), sheet.rowtype))即复制时把“当时的可见列布局”一并记录若没有任何行被复制例如未选中行就按gy剪贴板会被清空并给出no ... selected; clipboard emptied提示。剪切行x/cut-rowcopyRows([sheet.delete_row(cursorRowIndex)]); defer and cursorDown(1)先删除当前行并放进剪贴板再下移光标。gx/cut-selectedcopyRows(onlySelectedRows); deleteSelected()先复制选中行再批量删除。剪切本质是“复制 删除”因此被剪下的行会留在内部剪贴板中可以随后粘贴到别处。删除行由 delete_row 完成它会处理选中状态清理并调用commitDeleteRow同时把删除动作登记到撤销栈vd.addUndo(...)以便undo恢复。粘贴行p/paste-afterpaste_after(cursorRowIndex)粘贴到当前行之后。P/paste-beforepaste_after(cursorRowIndex-1)粘贴到当前行之前。paste_after 是一个异步线程函数其完整流程为检查vd.getClipboardRows()若为空则提示nothing to paste from cliprows对应 issue #1793 的空剪贴板保护若剪贴板中的列数多于当前表可见列数会为多出的列创建SettableColumn并复制其状态__setstate__即粘贴时自动补齐缺失的列遍历剪贴板行若是Column对象则直接copy否则用sheet.newRow()新建行并按照zip(sheet.visibleCols, vd.getClipboardCols())将剪贴板列的值extcol.getTypedValue(extrow)逐列写入新行通过sheet.addRows(addedRows, indexrowidx)一次性插入。getTypedValue意味着粘贴时值会经过列的“类型化”转换尽量保留原数据类型粘贴操作同样会经过撤销系统登记可随时回退。单元格级操作复制、剪切、粘贴单个值zy/copy-cellcopyCells(cursorCol, [cursorRow]); vd.memoValue(clipval, cursorTypedValue, cursorDisplay)——除了把当前单元格放入clipcells还会把其“类型化值”和“显示值”记入vd.memory.clipval供输入框内直接调用。zx/cut-cellcopyCells(cursorCol, [cursorRow]); cursorCol.setValues([cursorRow], None)——复制后把原单元格置空None。zp/paste-cellcursorCol.setValuesTyped([cursorRow], vd.memory.clipval) if vd.memory.clipval else vd.warning(nothing to paste)——若剪贴板有值则按当前列类型写回光标所在单元格。与剪贴板值配套的一个实用细节在输入框中按CtrlY会插入vd.memory.clipval见 visidata/_input.py即复制单元格后可直接在编辑输入框内粘贴该值。底层写入均由 Column.setValues/setValuesTyped 完成setValues原样写入setValuesTyped会先经过self.type(val)类型强制转换二者都会用itertools.cycle(values)循环复用传入的值列表以铺满目标行并支持撤销vd.addUndoSetValues。列级操作按列批量复制/剪切粘贴到整列gzy/copy-cellscopyCells(cursorCol, onlySelectedRows)把当前列在选中行上的值复制进内部剪贴板。gzx/cut-cellscopyCells(cursorCol, onlySelectedRows); cursorCol.setValues(onlySelectedRows, None)复制后清空这些单元格。gzp/setcol-clipboardsetColClipboard()把剪贴板值写入当前列。注意这是旧版命令paste-cells在新版本中的正式名称visidata/deprecated.py 已将其登记为 2.0 起废弃的别名。copyCells 会取出选中行的“类型化值”存入vd.memory.clipcellssetColClipboard 则执行sheet.cursorCol.setValuesTyped(sheet.onlySelectedRows, *vd.memory.clipcells)空剪贴板时提示nothing to paste from clipcells。文档特别强调了一个循环规则若剪贴板中的值个数少于目标列选中的行数这些值会按顺序循环重复使用。例如剪贴板只有[A, B]目标列有 5 行则依次写入A, B, A, B, A。这一行为来自setValuesTyped内部的itertools.cycle(values)visidata/column.py是批量填充场景下的高频技巧例如用剪贴板的一组标签值循环打标整列。与系统剪贴板对接复制行/单元格/列粘贴到单元格区域系统剪贴板命令通过options.clipboard_copy_cmd与options.clipboard_paste_cmd两个选项与外部命令交互见下文默认按键为Y系列复制与zP/gzP粘贴Y/syscopy-rowsyscopyCells(visibleCols, [cursorRow])把当前行复制到系统剪贴板。gY/syscopy-selectedsyscopyCells(visibleCols, onlySelectedRows)把选中行复制到系统剪贴板。zY/syscopy-cellsyscopyValue(cursorFullDisplay)把当前单元格的显示值复制到系统剪贴板。gzY/syscopy-cellssyscopyCells([cursorCol], onlySelectedRows, filetypetxt)把当前列选中行的值以纯文本格式复制到系统剪贴板。另有syscopy-colname无默认按键syscopyValue(cursorCol.name)复制当前列名。行/列复制为何会询问文件类型Y系列复制行或列时syscopyCells 会弹出输入框询问输出格式Sheet.api def syscopyCells(sheet, cols, rows, filetypeNone): filetype filetype or vd.input(copy %d %s as filetype: % (len(rows), sheet.rowtype), valuesheet.options.save_filetype or tsv) sheet.syscopyCells_async(cols, rows, filetype)默认值取options.save_filetype若未设置则为tsv。背后的 syscopyCells_async 会把待复制数据渲染成所选格式的文本再经clipboard_copy_cmd命令写入系统剪贴板——因此粘贴到其他应用时已是规整的 TSV/CSV/JSON 文本可直接粘贴进 Excel、表格网页或代码编辑器。粘贴系统剪贴板文本到表格区域zP/syspaste-cellspasteFromClipboard(visibleCols[cursorVisibleColIndex:], rows[cursorRowIndex:])从光标所在单元格开始向右下方填充剪贴板文本中键单击释放BUTTON2_RELEASED也绑定到该命令。gzP/syspaste-cells-selectedpasteFromClipboard(visibleCols[cursorVisibleColIndex:], someSelectedRows)仅填充当前选中的行。pasteFromClipboard 的实现要点读取系统剪贴板文本vd.sysclipValue()若为空则失败提示按行分割后若目标区域行数不足会自动追加新行vs.newRow()addRows——这是典型的“从剪贴板灌入数据并自动扩表”行为对每一行按\t拆分单元格依次c.setValue(r, v)写入各列。文本按制表符分列因此最通用的系统剪贴板交换格式就是 TSV从 Excel 或网页表格复制的内容通常本身就是制表符分隔。从系统剪贴板打开一张新表gShiftP/open-syspaste实现位于 visidata/features/open_syspaste.py会把系统剪贴板内容当作数据源直接打开成一张新表BaseSheet.api def open_syspaste(sheet, filetypetsv): v vd.sysclipValue().strip() or vd.fail(nothing to open) p Path(syspaste.filetype, fpio.BytesIO(v.encode(utf-8))) return vd.openSource(p, filetypefiletype)触发时会先弹出输入框询问“paste as filetype:”默认tsv随后读回系统剪贴板文本vd.sysclipValue()为空则报nothing to open把文本包装成一个名为syspaste.filetype的虚拟文件对象交由vd.openSource按指定格式解析并以新表压入栈vd.push(...)。由于文件类型可以任意指定剪贴板数据可以是任何 VisiData 支持的格式——TSV/CSV 自不必说也可以是 JSON、YAML、HTML 表格甚至 SQLite 之外的自定义格式只要输入文本符合该格式的语法。这一能力使“从网页/文档复制一段结构化文本 → 直接进 VisiData 分析”成为可能也是该命令无需依赖外部文件的便利之处。相关选项clipboard_copy_cmd 与 clipboard_paste_cmd两个选项均在 visidata/clipboard.py 定义vd.option(clipboard_copy_cmd, syscopy_cmd_default, command to copy stdin to system clipboard, sheettypeNone) vd.option(clipboard_paste_cmd, syspaste_cmd_default, command to send contents of system clipboard to stdout, sheettypeNone)含义与使用注意选项默认值按平台自动选择作用clipboard_copy_cmdWindows/WSLclip.exemacOSpbcopy wLinux Waylandwl-copyLinux X11 及其他xclip -selection clipboard -filter将stdin 输入的内容写入系统剪贴板clipboard_paste_cmdWindows/WSLpowershell.exe -noprofile -command Get-ClipboardmacOSpbpasteLinux Waylandwl-pasteLinux X11 及其他xclip -selection clipboard -o将系统剪贴板内容输出到stdout从 visidata/clipboard.py 的源码可见平台探测依次覆盖Windows / Cygwin / MSYS2 / WSL 12使用clip.exe与 PowerShell、macOSpbcopy/pbpaste、Linux 则根据WAYLAND_DISPLAY环境变量区分 Waylandwl-copy/wl-paste与 X11xclip两套方案。命令以空格分词后通过subprocess执行因此这些选项的值是完整的命令行字符串可自由替换为自己安装的剪贴板工具如xsel --clipboard --input、wl-copy --type text/plain、pbcopy等只要满足“读 stdin 进剪贴板”或“输出剪贴板到 stdout”的约定即可。在无图形剪贴板的纯终端环境如 SSH 会话或没有 X/Wayland 的服务器中这两个命令会执行失败此时应使用内部剪贴板命令y/gy/p/P等在表内搬运数据或通过配置把命令替换为远程可用的方案。菜单入口与测试保障所有剪贴板命令都收录在 VisiData 的Edit菜单中visidata/clipboard.py路径清晰Edit Copy to internal clipboard current cell/current row/selected cells/selected rowsEdit Copy to system clipboard current cell/current row/selected cells/selected rowsEdit Cut current row/selected cells/current cell/current cellEdit Paste from internal clipboard row after/row before/into selected cells/into current cellEdit Paste from system clipboard cells at cursor/selected cells在测试侧visidata/tests/test_commands.py 的test_baseCommands会对每个已注册命令执行一次实际调用并断言无错误compile语法检查 逐命令运行其中syscopy/syspaste/open-syspaste因依赖真实系统剪贴板而被显式列入nonTested排除清单——这与文档中“系统剪贴板命令依赖外部工具”的性质一致而内部剪贴板命令copy-row、paste-after、setcol-clipboard等则都在自动化测试覆盖范围内可作为命令可用性的佐证。小结VisiData 的剪贴板体系可以概括为“两层三域”内部剪贴板cliprows/clipcols/clipcells/clipval服务行、单元格、列三种粒度的表内搬运系统剪贴板则通过clipboard_copy_cmd/clipboard_paste_cmd与操作系统对接实现跨应用交换与“剪贴板即数据源”的新表打开能力。列粘贴的循环复用、粘贴时按类型转换取值、粘贴自动扩行、以及可替换的外部命令选项都是日常高频使用且值得深入理解的行为。若需查看更广泛的命令体系与选项总览可继续阅读 docs/commands.rst、docs/options.rst 以及 visidata/man/vd.inc 中的相关手册条目。赞分享数据分析CLI数据可视化【免费下载链接】visidataA terminal spreadsheet multitool for discovering and arranging data项目地址https://gitcode.com/gh_mirrors/vi/visidata点击查看免费下载相关推荐告别繁琐复制粘贴Hutool剪贴板工具让系统剪贴板操作如此简单告别繁琐复制粘贴Hutool剪贴板工具让系统剪贴板操作如此简单 你是否还在为Java程序中操作系统剪贴板而烦恼手动处理数据格式转换、监听剪贴板变化时写大量冗后端开发工具prompt-optimizer剪贴板复制粘贴功能与系统集成prompt optimizer剪贴板复制粘贴功能与系统集成 概述 在AI提示词优化的工作流程中高效的复制粘贴功能是提升生产力的关键环节。prompt op人工智能大模型提示工程AI 应用AI 评测Leptos剪贴板复制粘贴功能实现Leptos剪贴板复制粘贴功能实现 在现代Web应用中剪贴板操作是提升用户体验的重要功能。Leptos作为Rust生态中的现代化Web框架提供了优雅且类型前端后端Web框架SSR上一篇Rust嵌入式开发工具cargo-binutils下一篇Termux-Style打造个性化Termux终端体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →