如何在不覆盖原有文本的前提下打开过滤后的VIM文件
VIM 实现仅查看/编辑指定匹配行且保留原文件内容
你不需要用外部命令折腾,VIM内置功能就能完美解决你的需求——既可以只显示匹配^ab的行方便编辑/用宏,保存后原文件的所有行都不会受影响。
方法一:用折叠隐藏不匹配行(最直观)
- 打开目标文件:
vim names.txt - 输入以下命令设置折叠规则,让不匹配
^ab的行自动折叠:
执行后,只有以:set foldmethod=expr :set foldexpr=getline(v:lnum)=~'^ab'?0:1ab开头的行会显示出来,其他行都被折叠隐藏了。 - 正常编辑显示的匹配行,完成后直接执行
:wq保存即可——原文件里未匹配的行完全不会被修改或删除,下次打开文件时折叠状态会自动重置,不影响正常查看。- 要是临时想查看所有行,输入
zR就能展开所有折叠;想重新折叠不匹配行,输入zM即可。
- 要是临时想查看所有行,输入
方法二:直接对匹配行批量操作(不用隐藏也能高效用宏)
如果你只是想给所有^ab开头的行应用宏,甚至不用隐藏行,直接执行以下命令就行:
:g/^ab/normal @q
这里的@q是你录制好的宏(假设宏存在寄存器q里),这条命令会自动对所有匹配^ab的行执行宏操作,全程不用手动筛选。
避坑提醒
你之前用cat names.txt | grep “a.*” > names.txt是严重错误操作——shell的重定向会先清空目标文件,再执行前面的命令,结果就是原文件内容会被清空,绝对不能这么做。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

