VisiData 终极生存指南(vd)
# VisiData (vd) 终极生存指南
终端里的"交互式 Excel",极速处理 CSV/JSON/Excel/数据库等 GB 级数据。
使用 vd -h 寻求帮助吧. 这里只列出主要章节标题,方便在vd帮助文档中查找
- Column Manipulation
# 打开文件
vd file.csv # 直接打开
vd . # 打开目录浏览器,选文件回车
ps aux | vd # 管道输入
vd -f csv data.txt # 指定格式
vd -f pandas data.parquet # pandas 支持的格式
2
3
4
5
追加打开:按 o,输入路径回车。
# 基础导航
| 按键 | 作用 |
|---|---|
hjkl / 方向键 | 移动光标 |
gj / gk | 跳到最后/第一行 |
gh / gl | 跳到最左/最右列 |
Ctrl-F / Ctrl-B | 下/上翻页 |
c + 列名 | 跳转到指定列 |
/ / ? | 向下/向上正则搜索 |
n / N | 下/上一个匹配 |
zr + n / zc + n | 跳到第 n 行/列 |
U / R | 撤销/重做 |
# Sidebar(v3.0+)
右侧上下文信息面板,显示当前 Sheet 的帮助指南和状态消息。
| 按键 | 作用 |
|---|---|
b | 显示/隐藏 sidebar |
gb / Shift-B | 把 sidebar 内容展开为独立 Sheet |
Ctrl-G | 循环切换输入帮助级别 |
配置(~/.visidatarc):
options.disp_sidebar = False # 永久关闭
options.disp_help = 0 # -1=无状态消息, 0=无帮助, 1=sheet帮助, 2=输入帮助(默认)
2
# Sheets 管理
| 按键 | 作用 |
|---|---|
Shift-S / gS | 打开 Sheet 列表 |
Ctrl-^ | 在当前和上一个 Sheet 间切换 |
q | 关闭当前 Sheet |
e | 在 Sheet 列表中重命名 |
# 列操作
# 列类型转换
| 按键 | 类型 | 场景 |
|---|---|---|
~ | string | 文本(默认) |
# | int | 整数、数量、ID |
% | float | 小数、比例 |
$ | currency | 货币 |
@ | date | 日期(转后可 .year 等) |
# 列宽与显示
| 按键 | 作用 |
|---|---|
_ | 当前列自适应宽度 |
g_ | 所有列自适应宽度(含 width=0 的隐藏列) |
- | 隐藏当前列 |
gv | 显示所有隐藏列 |
z- | 当前列宽度减半 |
Shift-C | 打开列元信息表(可改 width/type 等) |
# 列编辑
| 按键 | 作用 |
|---|---|
^ | 重命名当前列 |
! | 钉选为关键列(固定左侧) |
H / L | 当前列左/右移一位 |
gH / gL | 移到最左/最右 |
( / ) | 展开/折叠嵌套数据列 |
= | 输入 Python 表达式创建新列 |
: | 按分隔符拆分列 |
# 行操作
# 行选中(按后自动下移,方便连续操作)
s/u/t:选中 / 取消 / toggle 当前行gs/gu/gt:选中 / 取消 / toggle 所有行zs/zu/zt:从顶部到光标行 选中/取消/togglegzs/gzu/gzt:从光标行到底部 选中/取消/toggle
# 按条件选中
⚠️
|和\是同一个键位:Shift+\ 出|= 选中,直接按\= 取消选中。
|+ 正则:当前列匹配的行选中\+ 正则:当前列匹配的行取消选中g|+ 正则:任意列匹配的行选中g\+ 正则:任意列匹配的行取消选中,:当前列值 = 当前单元格值的所有行选中g,:任意列值 = 当前单元格值的所有行选中
# 选中后操作
":新开 Sheet 只显示选中行(最常用)gd:删除所有选中行gz":深拷贝选中行到新 Sheetd:删除当前行
典型流程:| 输入正则选中 → " 打开选中行的新 Sheet → 在新表里继续分析。
# 数据统计
# 频率统计(最常用)
- 光标移到分组列(如
department) - 按
Shift-F生成频率表(count + percent)^M: open-cell
Enter钻取查看某分组的明细行q返回
聚合数值列(如薪资总和):
- 先把数值列按
#转成整数类型 - 光标移到该数值列,按
+选sum/avg/min/max - 移回分组列,按
Shift-F
| 按键 | 作用 |
|---|---|
+ | 设置当前列的聚合函数(替换) |
g+ | 设置所有列的聚合函数 |
z+ | 添加聚合函数(可叠加 sum+avg) |
# 排序与计算
| 按键 | 作用 |
|---|---|
[ / ] | 当前列升/降序 |
+ + sum/avg/max | 底部状态栏显示当前列计算结果 |
# Python 扩展
| 按键 | 作用 |
|---|---|
Ctrl-X | 执行 Python 表达式,结果作为新对象打开 |
示例:过滤注册资本 > 50 万的企业
reg_capital列按#转整数Ctrl-X输入:[r for r in sheet.rows if r.reg_capital > 500000]
# 命令日志与回放(Replay)
VisiData 会记录每一步操作到 Command Log,可保存为文件后回放,实现分析流程的自动化和复用。
录制
| 方式 | 说明 |
|---|---|
vd file.csv -w log.vdj | 启动时开始录制,退出后自动保存 |
Ctrl+D | 直接保存当前 cmdlog 到文件 |
Shift+D | 打开 CommandLog Sheet,可查看/编辑后 Ctrl+S 保存 |
录制的文件默认是 .vdj(JSONL)格式,每行记录一条操作。
回放
vd file.csv -p log.vdj # 交互式回放
vd file.csv -p log.vdj -w 1 # 每条命令间隔 1 秒(方便观察)
vd file.csv -p log.vdj --replay-movement # 光标逐格移动,看清操作位置
vd -b -p log.vdj file.csv -o result.tsv # 批量模式:无界面,回放后将最终 sheet 输出到文件
2
3
4
| 参数 | 作用 |
|---|---|
-p / --play | 回放指定 cmdlog 文件 |
-w N / --replay-wait=N | 每条命令间等待 N 秒 |
--replay-movement | 光标移动也逐格展示(llll 会看到一格格右移) |
-b / --batch | 批量模式,不启动界面,跑完即退出 |
-o file | 批量模式下将最终 sheet 保存为文件 |
回放过程中 Ctrl+C 暂停,q 退出。
文件格式
| 扩展名 | 格式 | 说明 |
|---|---|---|
.vdj | JSONL | 推荐,v3.x 默认,每行一个 JSON 对象 |
.vd | TSV | 旧格式,制表符分隔,已废弃但仍兼容 |
.vdx | 纯文本 | 简化格式,每行只有命令 longname 和 input,适合手写 |
.vdj 字段:sheet(操作所在 sheet 名,留空=当前)、row(行索引)、col(列名)、keystrokes(实际按键)、longname(命令长名)、input(输入内容,无则 null)。
控制字符:keystrokes 中 ^ 表示 Ctrl 键,^M=Enter、^[=Esc、^C=Ctrl+C、^I=Tab、^H=Backspace。
适配不同文件
录制的 cmdlog 会硬编码文件名和 sheet 名。要复用到其他文件:编辑 .vdj 删除 longname: "open-file" 的行,并将所有 "sheet" 值清空(留空表示操作当前 sheet),然后 vd -b -p log.vdj newfile.csv -o output.tsv。
限制:空 sheet 名只适用于线性流程(不切换 sheet)。多 sheet 切换需保留 sheet 名或用
Ctrl+^(jump-prev)等栈相对命令导航。
常见问题
KeyError: '"sheet"'等格式错误:扩展名与内容格式不匹配。JSONL 内容必须用.vdj,TSV 用.vd。- 回放太快看不清:加
-w 1或更大值,配合--replay-movement。 - 回放中断报错:某条命令的
longname或col与当前版本不匹配,编辑.vdj修正或删除该行后重录。 - 想手写简单 replay:用
.vdx格式,每行写longname input,如freq-table、select-col-regex 技术部,光标位置用col 列名和row 行号命令控制。
# 实用技巧
- 不用记快捷键:tmux 分屏,一侧
vd -h \| vim -搜命令,另一侧操作 - 挂起恢复:
Ctrl-Z挂起,fg %1捞回 - 遇到困难:
Ctrl-H内置帮助,或看 sidebar 指南