Vim中的多种替换操作方法与批量文本处理技巧
Vim 批量转换文件名格式的多种实现方法
以下方法按操作简便度从高到低排序,可根据自己的使用习惯选择:
1. 正则替换(1条命令全量处理,最推荐)
不需要逐行操作,打开文件后直接在普通模式输入以下命令敲回车即可:
:%s/\v(.*\d{3})\..*(\.mkv)$/\1\2/
命令逻辑说明:
%指定作用范围为全文所有行\v开启正则「魔法模式」,省去大量转义符输入- 第一组捕获
(.*\d{3}):匹配每行开头到连续3位集数(026/027这类)为止的前缀内容 - 中间匹配
\..*:对应集数后第一个点,以及点之后、后缀之前的所有冗余文本 - 第二组捕获
(\.mkv)$:匹配行尾的.mkv后缀 - 替换为
\1\2就是直接拼接前缀和后缀,自动剔除中间所有多余内容
如果确定所有文件前缀都是固定的Dragon.Ball,还可以把正则写得更精准,避免误匹配:
:%s/\v(Dragon\.Ball\.\d{3}).*(\.mkv)/\1\2/
2. 块可视模式(零正则,手速快2秒搞定)
这个方法适合当前示例场景——所有行的集数位置完全对齐,操作步骤:
- 把光标挪到第一行集数(比如026)后面的第一个点上
- 按
Ctrl+v进入列块选择模式 - 按
G直接跳到文件最后一行,此时所有行的对应列起始位置都会被选中 - 按
$跳到行尾,再按4h往左移动4个字符,刚好选中所有行里集数后到.mkv前的冗余块 - 按
d删除选中内容,直接完成全部修改
注意:如果不同行的前缀长度不一致,集数位置不对齐,这个方法就不适用。
3. 简化版宏(比常规宏操作效率高很多)
如果觉得宏操作繁琐,大概率是录制时做了太多逐字符移动的操作,结合Vim的查找动作,宏只需要录3-4个动作:
- 光标移到第一行行首,按
qa开始把宏录制到a寄存器 - 按
3f.快速跳到行内第三个点的位置(也就是集数后面的第一个点,刚好是冗余内容的起点) - 输入
d/.mkv<CR>,删除从当前光标位置到.mkv前的所有内容 - 按
j跳到下一行,按q结束录制 - 剩下4行不需要手动操作,直接按
4@a就会自动逐行执行宏完成修改
4. 点命令重复(少量行场景比宏还方便)
如果只有几行内容,连宏都不用录:
- 第一行手动改完:光标移到集数后的点,按
d/.mkv<CR>完成第一行修改 - 后续每一行只需要把光标移到对应行集数后面的点上,按
.(重复上次修改命令)就能直接完成该行修改,5行内容10秒内就能处理完。
内容的提问来源于stack exchange,提问作者dp403aan
相关产品推荐
相关产品推荐

