星期六, 一月 31, 2026

VIM学习笔记 编辑CSV数据文件

CSV是一种以逗号分隔值的文本文件,常用于电子表格程序,如 Microsoft Excel 或 OpenOffice Calc。CSV 文件中的每一行代表数据库中的一行,而每行数据又由一个或多个以逗号分隔的字段组成。

针对典型的CSV数据处理场景,以下将结合Vim内置命令、操作系统命令和csv.vim插件进行操作演示。

您也可以使用Rainbow CSV等其他插件执行类似操作。

安装配置

推荐使用minpac等插件管理器,来安装GitHub上的csv.vim插件。(请参阅官方安装文档

固定标题行

通过以下步骤,将文件拆分在两个水平窗口中显示并绑定滚动,可以保持标题行始终置顶显示:

  1. 打开CSV文件,使用:set nowrap命令,取消折行显示;
  2. 使用:sp命令,水平分割窗口,然后点击1Ctrl-w_快捷键,调整窗口尺寸仅显示首行;
  3. 点击Ctrl-wj快捷键,跳转到下一窗口;
  4. 使用:set scrollopt=hor命令,显示横向滚动条;使用:set scrollbind命令,绑定滚动;
  5. 点击Ctrl-wk快捷键,跳转到上一窗口;
  6. 使用:set scrollbind命令,绑定滚动;

此时在文件中左右移动,标题行与内容将自动同步对齐:

CSV-Frozen-Headers.png

使用csv.vim插件,执行以下命令可以固定标题行:

:Header

执行以下命令可以取消固定标题行:

:Header!

按列对齐

假设有以下逗号分割的CSV文件,如下图红线所示,数据列没有对齐:

CSV-Column-Align-Before

在Linux中,使用过滤器(Filter)执行外部column命令来按列对齐:

:%!column -t

CSV-Column-Align-After

使用csv.vim插件,执行以下命令可以按列对齐:

:%ArrangeColumn

plugin_csv_ArrangeColumn

按列排序

调用外部sort命令,可以按照第2列进行排序:

:%!sort -t ',' -k2

使用csv.vim插件,执行以下命令可以按照第2列进行排序:

:Sort 2

按列合并

假设names.txt文件,包含姓名信息:

Jason
Cameron
Tim

假设numbers.txt文件,包含电话信息:

555-1234
555-9876
555-2468

使用以下Linux命令,可以将多个文件按列合并:

$ paste names.txt numbers.txt

CSV-Column-Merge-paste

按行合并

在Windows中,使用copy命令可以合并多个文件:

$ copy *.csv merged-filname.csv

在Linux中,使用cat命令可以合并多个文件:

$ cat *.csv > merged-file.csv

拆分文件

调用外部split命令,可以按照制定行数拆分成多个文件:

$ split -l200 passengers.csv --verbose

creating file ‘xaa’
creating file ‘xab’
creating file ‘xac’
creating file ‘xad’
creating file ‘xae’

调用外部 wc.命令,可以统计文件包含的行数,以验证拆分的结果:

$ wc -l xa*

200 xaa
200 xab
200 xac
200 xad
 92 xae
892 total

删除空行

使用以下全局命令,可以删除所有空行:

:%g/^ *$/d

在Linux中,使用以下任一命令都可以删除所有空行:

$ sed '/^$/d' old.csv > new.csv

$ grep . old.csv > new.csv

$ awk NF old.csv > new.csv

$ cat old.csv | tr -s '\n' new.csv

删除重复行

使用sort命令,将删除重复行并对文本进行排序(请注意,这将改变文本行的原有顺序):

:sort u

使用以下全局命令,可以删除所有重复行:

:g/^\(.*\)$\n\1$/d

在Linux中,使用过滤器(Filter)执行外部uniq命令可以删除所有重复行:

:%!uniq

数据统计

使用以下命令,可以查找并计数行内的逗号数量

:s/,/,/gn

使用csv.vim插件,执行以下命令可以显示当前行的列数:

:NrColumns!

Ver: 260128 | YYQ<上一篇 | 目录 下一篇>

VIM学习笔记 Rainbow CSV数据编辑

使用Rainbow CSV插件,可以为编辑CSV数据文件提供语法高亮、按列对齐和复杂查询等高级功能。

安装配置

推荐使用minpac等插件管理器,来安装GitHub上的Rainbow CSV插件。(请参阅官方安装文档

多重高亮显示

安装Rainbow CSV插件之后,打开CSV文件将自动以不同的颜色显示不同的列,以提高数据的可读性:

rainbow_csv_color

按列对齐

使用以下命令,可以将数据按列对齐:

:RainbowAlign

rainbow_csv_align

请注意,插件是通过新增空格来实现按列对齐,如果您此时保存文件,那么新增的空格也将被保存到原文件中。

使用以下命令,可以删除由:RainbowAlign命令新增的空格,以恢复文件原貌:

:RainbowShrink

数据查询

使用类似SQL的RBQL查询语言,可以对CSV文件进行灵活的数据处理,甚至包括连接查询和更新。

使用以下命令,将按照第8列的倒序,显示第1列和第8列:

Select a1, a8 order by a8 desc

如下图所示,随着光标移动,可以在状态上查看当前列的序号和名称:

rainbow_csv_column_info

使用以下命令,可以将查询结果复制回原文件并覆盖原有内容:

:RainbowCopyBack

关于RBQL查询语言的更多信息,可以查看在线文档

Ver: 251013 | YYQ<上一篇 | 目录 下一篇>