如何在vimscript中转义搜索模式或正则表达式?

iwa*_*nyj 4 regex vim search escaping

我正在vimscript中编写一个vim插件,我需要使用以下命令在另一个文件中搜索当前光标下的单词:

exec 'vimgrep /' . expand('<cword>') . '/g filename'
Run Code Online (Sandbox Code Playgroud)

我需要确保搜索模式中没有正则表达式或斜杠.

我该如何逃脱这些角色?

Ing*_*kat 8

\V它开始正则表达式,它变成"非常无害"的模式; 即只有以反斜杠开头的原子才是特殊的.确切地说,这个反斜杠然后通过转义escape().并且,由于此正则表达式由分隔符/.../,因此正斜杠也必须被转义.

exec 'vimgrep /\V' . escape(expand('<cword>'), '/\') . '/g filename'
Run Code Online (Sandbox Code Playgroud)

如果要使搜索区分大小写,而不考虑'ignorecase'设置,请添加\Catom:/\V\C...

PS:如果filename可以包含特殊字符(比如%),你也应该fnameescape()这样.