文件处理

Vim 文件处理 #

1 命令 #

1.1 全局处理 #

:[range]g[lobal][!]/{pattern}/[cmd]

命令 描述
range 表示操作范围,Vim :global 命令的默认作用范围是整个文件 (用%表示)
! 表示反转 :global 命令的行为,将在没有匹配到指定模式的行上执行 [cmd]
pattern 指定 :global 命令要匹配的目标模式,若将该域留空,Vim会自动使用当前(最近一次)的查找模式
cmd 除 :global 命令之外的任何 Ex 命令,Vim缺省使用 :print 命令 (缩写 :p)

2 特殊字符 #

3 增则 #

9 案例 #

9.1 删除奇偶行 #

  1. 删除所有奇数行 :g/^/d|m.

:g/^/d 是在整个文档中执行 d 命令,同行中输入多个命令使用 | 用来分割。 m:move 的缩写,完整格式为 :[range]move{address},表示将 range 范围内的行文本移动到 address 指定的位置。 m. 表示移动当前行(缺省range)到当前行(.),实际上不会造成任何文本变化。参考Vim复制命令copy和移动命令move

  1. 删除所有偶数行 :g/^/+d

:g/^/+d 表示查找所有行的开头,待执行 +d 命令(delete 的缩写形式)。 :delete 命令的完整格式为 :[range]d[elete] [x],表示将 [range] 范围内的所有行删除到寄存器 x 中,缺省的 range 是当前行,+d 表示删除当前行的下一行。

9.2 行首行尾字符增删 #

一、添加

  1. 在每行行首添加 ", :%s/^/"
  2. 在每行行尾添 ", :%s/$/"
  3. 删除代码段每行的行号 :%s/^\s*[0-9]*\s*//gc
  4. 删除行首空格 ^\+\s
  5. 删除行尾空格 \s\+$ 其中,^表示行首,$表示行尾,\s表示空格,[0-9]表示0~9的数字,*表示0或多个,%s/^\s*[0-9]*\s*//gc 的意思是将每行以0或多个空格开始中间包含0或多个数字并以0或多个空格结束的字符串替换为空。