在linux系统的文本编辑场景中,Vim是很多用户首选的编辑器,当我们需要批量删除文件中的偶数行或者奇数行时,不需要逐行手动操作,Vim提供了多种高效的处理方式,能够快速完成这类批量行删除任务。

使用命令行模式删除行
删除偶数行
打开目标文件后,按下Esc键进入普通模式,然后输入冒号进入命令行模式,执行以下命令即可删除所有偶数行:
:g/^/if line('.')%2==0 | delete | endif
命令解析:g/^/表示匹配所有行,line('.')获取当前行的行号,%2==0判断行号是否为偶数,满足条件则执行delete删除当前行。
删除奇数行
同样在命令行模式下,执行以下命令可以删除所有奇数行:
:g/^/if line('.')%2==1 | delete | endif
这里将判断条件改为%2==1,即行号除以2余数为1的奇数行会被删除。
使用宏操作删除行
删除偶数行
宏操作适合对操作步骤更熟悉的用户,操作步骤如下:
- 按下
Esc进入普通模式,将光标移动到第一行 - 按下
qa开始录制宏,存储到a寄存器 - 按下
j移动到下一行(第二行,即第一个偶数行) - 按下
dd删除当前行 - 按下
q停止录制宏 - 按下
@a执行一次宏,然后连续按下100@@(根据实际行数调整次数,重复执行宏直到所有偶数行被删除)
删除奇数行
删除奇数行的宏操作步骤如下:
- 按下
Esc进入普通模式,将光标移动到第一行(第一个奇数行) - 按下
qa开始录制宏 - 按下
dd删除当前行 - 按下
j移动到下一行(原第二行,现在变为第一行) - 按下
q停止录制宏 - 按下
@a执行宏,再根据需要重复执行@@直到所有奇数行被删除
两种方式的适用场景
命令行模式的方式适合处理行数较多的文件,执行一次命令即可完成所有操作,效率更高。宏操作的方式更适合需要灵活调整删除逻辑的场景,或者用户对命令行语法不熟悉时,通过可视化操作步骤也能完成需求。
需要注意的是,执行删除操作前建议先备份文件,避免误操作导致内容丢失。如果对命令效果不确定,可以先打开一个小测试文件验证操作是否符合预期。