Vim常见场景处理

记录常见场景下,Vim的使用方法。
删除奇数行、偶数行
如果希望将一个文本中的奇数行、偶数行分离出来2个独立的文件,那么可以考虑分别批量删除奇数行和删除偶数行来实现,具体命令如下:
-
:g/^/d|m.:删除奇数行(注意:有小数点) -
:g/^/+1 d:删除偶数行(注意:没小数点,+1和d之间有空格)
其中 :g 是全局命令 :global 命令的缩写,它允许你找到符合某个匹配模式的行,然后执行相应的处理(比如替换、删除等),其通用形式是:
:[range]global/{pattern}/{command}
注意:其中的
command必须也是vim命令行模式所支持的命令,如:s、:d等等……
对于第一条命令:g/^ 是先标记了所有行,然后执行 d|m. 命令。d 命令即删除第一行,紧接着执行 m. 命令移动当前行(由于第一行已经被删掉了,所以当前行其实是原文件的第二行,实际上没有移动),m. 的操作就是把 g/^ 所标记的所有行的第二行去掉标记,也就是不删除第二行。
对于第二条命令:g/^ 标记所有行,然后执行 +1 d 命令,即删除下一行并将光标移动到刚刚删除掉的那行的下一行,这样每次删除的都是源文件的偶数行。
字符串替换操作
vim 中的 substitute 命令(可以缩写为s)可以非常方便的将指定字符串替换成其他字符串,批量或者逐一替换。
比如想将字符串 source 替换成 dest,可以参考使用如下命令:
-
:s/source/dest/:仅替换当前行的“source” -
:%s/source/dest/:替换所有行的“source”,%表示作用于所有行 -
:%s/source/dest/c:其中c(确认)标志告诉:s命令,在执行每个替换前都需要得到用户的确认(y/n/a/q/l/^E/^Y),这些确认操作表示:y:Yes,替换掉吧n:No,别替换a:All,全部给劳资换掉q:Quit,退出,剩下的也别管了l:Last one,最后一个,替换了完了就退出Ctrl + E:向上滚屏一行Ctrl + Y:向下滚屏一行
-
:1,5s/source/dest/对1至5行执行替换操作 -
:54s/source/dest/只对54行执行替换操作