原文: 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
爲捕獲在分組中,故組中 \1
爲 ok
。
歡迎加入我們的 QQ 羣,與 vimer 一起交流更多的 vim 使用技巧: 755208473