Vim 环视和固化分组

原文: https://wsdjeg.spacevim.org/vim-regular-expression-look-around-and-solidified-group/

vim Perl 意义
\@= (?= 顺序环视
\@! (?! 顺序否定环视
\@<= (?<= 逆序环视
\@<! (?<! 逆序否定环视
\@> (?> 固化分组
\%(atom\) (?: 非捕获型括号

和 perl 稍有不同的是,vim 中的环视和固化分组的模式的位置与 perl 不同。 例如,查找紧跟在 foo 之后的 bar,perl 将模式写在环视的括号内, 而 vim 将模式写在环视的元字符之前。
Perl的写法

/(?<=foo)bar/

vim的写法

/\(foo\)\@<=bar

Vim 使用示例

  • 顺序环视
    查找后面是sql的my: /my\(sql\)\@=
  • 顺序否定环视
    查找后面不是sql的my:/my\(sql\)\@!
  • 逆序环视
    查找前面是my的sql: /\(my\)\@<=sql
  • 逆序否定环视
    查找前面不是my的sql: /\(my\)\@<!sql
  • 固化分组
  • 非捕获型括号
    意思是,此分组不捕获,可以理解为不算在分组信息中
:%s/\%(my\)sql\(ok\)/\1

上面的命令会将 mysqlok 替换为 ok ,由于 my 为捕获在分组中,故组中 \1ok

欢迎加入我们的 QQ 群,与 vimer 一起交流更多的 vim 使用技巧: 755208473

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章