Vim中非连续多行不同文本区域的选择与替换方法
嘿,这个需求在Vim里完全能搞定,我给你分三种实用方式来讲——原生Vim就能实现的方案、高效的宏批量操作,还有更直观的插件辅助玩法,完美适配你的场景:
原生Vim实现非连续多区域选择与替换
原生Vim自带多选区标记功能,咱们一步步来操作:
标记所有需要修改的非连续区域
- 你现在光标在
Roses的R上,先跳到第一个错误单词reed:按3w(跳3个单词),然后用viw选中整个单词(viw是Vim里选中当前单词的神技,记住它!) - 现在进入了可视化模式,按
g Ctrl-G(先按g,再按住Ctrl按G),这就给当前选区打了标记,接下来可以放心移动光标去选下一个区域了 - 跳到第二行:按
j,然后2w跳到aree的开头,viw选中,再按g Ctrl-G标记第二个选区 - 继续处理剩下的两个错误:
- 按
j到第三行,w跳到Sugaar开头,viw选中,g Ctrl-G标记 - 按
j到第四行,3w跳到you,开头,viw选中,g Ctrl-G标记
到这里,四个非连续的错误区域就都被标记选中啦!
- 按
- 你现在光标在
逐个替换成不同内容
- 按
Esc退出可视化模式,然后按g Ctrl-G就能循环切换到每个标记的选区位置(每按一次跳一个) - 跳到第一个选区(
reed)时,按c删除选中的内容,输入red, yellow and green,按Esc完成第一个替换 - 再按
g Ctrl-G跳到第二个选区(aree),按c删除后输入are,Esc - 重复这个操作,就能依次把剩下的两个错误内容替换成对应的文本
- 按
如果是要把所有选中区域替换成相同内容,那就更简单了:选中所有非连续区域后,直接按c输入替换内容,所有选中的区域会一次性被替换成一样的文本。
用宏快速批量处理(适合按顺序操作)
如果觉得标记选区有点繁琐,还可以用Vim的宏功能来一键完成所有修改:
录制宏
- 按
q a(意思是把宏录制到寄存器a里),开始录制操作:3w viw c red, yellow and green Esc(处理第一个错误)j 2w viw c are Esc(处理第二个错误)j w viw c Sugar and molasses Esc(处理第三个错误)j 3w viw c you. Esc(处理第四个错误)
- 按
q结束录制
- 按
执行宏
- 按
@a就能一次性执行刚才录制的所有操作,瞬间完成所有替换!
- 按
插件辅助:vim-multiple-cursors(更直观的多光标操作)
如果你经常需要处理这类非连续多区域修改,可以装个vim-multiple-cursors插件,操作更直观:
- 选中第一个错误单词
reed(viw),按Ctrl-n添加一个光标 - 移动到第二个错误单词
aree的位置,按Ctrl-n再添加一个光标,以此类推,把四个错误位置都加上光标 - 现在每个光标都在对应的错误区域,你可以逐个切换光标(按
Ctrl-p/Ctrl-n切换),然后按c删除内容并输入对应的替换文本
内容的提问来源于stack exchange,提问作者mahbubweb
相关产品推荐
相关产品推荐

