- 一、vim 替换表达式的语法格式
- 二、vim 关于 range 的表达式
- 三、vim 关于 flags 的元字符
- 四、vim 关于数量的元字符
- 五、环视和固化分组
- 六、vim 替换表达式的示例
- (一)结合 copy 命令使用
- (二)结合 move 命令使用
- (三)结合 normal 命令使用
- (四)匹配重复性模式
- (五)指定重复次数
- (六)匹配可选项
- (七)多选一匹配模式/多选结构
- (八)引用分组
- (九)替换内容的特殊字符
- 1. & 符号
- 2. ~ 符号
- 3. \u 和 \l
- 4. \U 和 \L
- (十)界定 pattern 的子集
语法格式:[range]substitute/from/to/[flags]
或者 [range]s/src/dest/[para]
或者 [range]s/pattern/replacement/[options]
说明:substitute
命令可以对一个指定范围的区域执行替换操作,可以简写为 s
。该命令是将[range]所指定范围中的字符串"from"替换为"to",“from” 可以使用正则表达式。
range
意为检索范围,如果不指定 range
,则表示当前行。vim 表示范围或者位置的表达式或者元字符如下表所示:
%
整个文档,即每一行,所有行,等价于 1,$
1
表示整个文档的第一行$
表示行尾,这是虚拟的概念;另外还表示整个文档的最后一行^
表示行首,这是虚拟的概念0
虚行,表示第一行的上方.
当前行'm
包含位置标记m的行,不知道干嘛的\(?逆序否定环视\@>
(?>
固化分组\%(atom\)
(?:
非捕获型括号
和 perl 稍有不同的是,vim 中的环视和固化分组的模式的位置与 perl 不同。 例如,查找紧跟在 foo 之后的 bar,perl 将模式写在环视的括号内, 而 vim 将模式写在环视的元字符之前。
perl 的写法: /(? RESTORE
示例 2:
:s/ResTore/\L&/g # ResTore --> restore
示例 3:
\U
和 \e
或 \E
组合使用,表示 \U
和 \E
之间的字符转成大写;\L
和 \e
或 \E
组合使用,表示 \L 和 \E
之间的字符转成小写。
:s/restore/re\Usto\ere/ # restore --> reSTOre
(十)界定 pattern 的子集
元字符 \zs
标志着一个匹配的起始,而元字符 \ze
则用来界定匹配的结束。将二者相结合,可以让我们先定义一个模式来匹配一个较大的文本范围,然后再收窄匹配范围。
我想要查找 Practical 后面的 Vim。
/Practical Vim
使用上述的 pattern 文档中所有出现 Practical Vim 的地方都会被搜索出来。一旦将查找模式改为:
/Practical \zsVim
则只有单词 Vim 会被高亮选中,而单词 Practical 会被排除于匹配之外,但它仍是模式的一部分。
如此一来,只有前面紧跟着单词 Practical 的 Vim 才会被真正匹配到,而其他前面不是 Practical 的 Vim 则不会被匹配。这与通过 /Vim
命令进行简单查找的结果有很大不同。其实也可以使用“逆序肯定环视”来匹配。