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 删除奇偶行 #
- 删除所有奇数行
:g/^/d|m.
:g/^/d
是在整个文档中执行 d 命令,同行中输入多个命令使用 |
用来分割。
m
是 :move
的缩写,完整格式为 :[range]move{address},表示将 range 范围内的行文本移动到 address 指定的位置。
m.
表示移动当前行(缺省range)到当前行(.),实际上不会造成任何文本变化。参考Vim复制命令copy
和移动命令move
。
- 删除所有偶数行
:g/^/+d
:g/^/+d
表示查找所有行的开头,待执行 +d
命令(delete 的缩写形式)。
:delete
命令的完整格式为 :[range]d[elete] [x],表示将 [range] 范围内的所有行删除到寄存器 x 中,缺省的 range 是当前行,+d 表示删除当前行的下一行。
9.2 行首行尾字符增删 #
一、添加
- 在每行行首添加
"
,:%s/^/"
- 在每行行尾添
"
,:%s/$/"
- 删除代码段每行的行号
:%s/^\s*[0-9]*\s*//gc
- 删除行首空格
^\+\s
- 删除行尾空格
\s\+$
其中,^表示行首,$表示行尾,\s表示空格,[0-9]表示0~9的数字,*表示0或多个,%s/^\s*[0-9]*\s*//gc
的意思是将每行以0或多个空格开始中间包含0或多个数字并以0或多个空格结束的字符串替换为空。