您当前的位置: 首页 >  vim

liaowenxiong

暂无认证

  • 3浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

vim 底行命令模式的正则表达式(匹配模式)

liaowenxiong 发布时间:2021-06-26 10:54:10 ,浏览量:3

文章目录
  • 一、vim 替换表达式的语法格式
  • 二、vim 关于 range 的表达式
  • 三、vim 关于 flags 的元字符
  • 四、vim 关于数量的元字符
  • 五、环视和固化分组
  • 六、vim 替换表达式的示例
    • (一)结合 copy 命令使用
    • (二)结合 move 命令使用
    • (三)结合 normal 命令使用
    • (四)匹配重复性模式
    • (五)指定重复次数
    • (六)匹配可选项
    • (七)多选一匹配模式/多选结构
    • (八)引用分组
    • (九)替换内容的特殊字符
      • 1. & 符号
      • 2. ~ 符号
      • 3. \u 和 \l
      • 4. \U 和 \L
    • (十)界定 pattern 的子集

一、vim 替换表达式的语法格式

语法格式:[range]substitute/from/to/[flags] 或者 [range]s/src/dest/[para] 或者 [range]s/pattern/replacement/[options]

说明:substitute 命令可以对一个指定范围的区域执行替换操作,可以简写为 s。该命令是将[range]所指定范围中的字符串"from"替换为"to",“from” 可以使用正则表达式。

二、vim 关于 range 的表达式

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 命令进行简单查找的结果有很大不同。其实也可以使用“逆序肯定环视”来匹配。

关注
打赏
1661566967
查看更多评论
0.0425s