目录

Vim常见场景处理

记录常见场景下,Vim的使用方法。

删除奇数行、偶数行

如果希望将一个文本中的奇数行、偶数行分离出来2个独立的文件,那么可以考虑分别批量删除奇数行和删除偶数行来实现,具体命令如下:

  1. :g/^/d|m.:删除奇数行(注意:有小数点)

  2. :g/^/+1 d:删除偶数行(注意:没小数点,+1d 之间有空格)

其中 :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,可以参考使用如下命令:

  1. :s/source/dest/:仅替换当前行的“source”

  2. :%s/source/dest/:替换所有行的“source”,%表示作用于所有行

  3. :%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:向下滚屏一行
  4. :1,5s/source/dest/ 对1至5行执行替换操作

  5. :54s/source/dest/ 只对54行执行替换操作