如何正确 vim 转义变量/寄存器

Vit*_*ner 7 vim escape-characters

例如,我想突出显示当前 yank 寄存器的出现,即,

:let @/=@"
Run Code Online (Sandbox Code Playgroud)

它有效,除非里面@"有“有趣”的东西,比如反斜杠。

我可以

:let @/=escape(@", '\\')
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否是正确的做法,以及它是否会逃避所有可能的有问题的角色。也许还有其他人。

更新:好的,我真的需要逃避更多的东西。至少看起来是所有摄政特殊字符。那么是否有一个正则表达式转义函数或变量列出所有正则表达式特殊字符?

gar*_*ohn 5

我认为不存在这样的列表。这是我使用了相当长一段时间的转义函数,作为宏的一部分来搜索当前选定的字符串:

\n\n
escape(@", \'\\\\/.*$^~[]\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑:

\n\n

由于我从 ~/.vimrc 复制了太多内容,原始答案有额外的参数。这是我使用转义的映射,以防上下文可能有所帮助。突出显示某些文本并键入*搜索该文本的下一个匹配项。(映射最初由 J\xc3\xbcrgen Kr\xc3\xa4mer 编写。)

\n\n
\nvnoremap <silent> * :<C-U>\n          \\let old_reg=getreg(\'"\')<bar>\n          \\let old_regmode=getregtype(\'"\')<cr>\n          \\gvy/<C-R><C-R>=substitute(\n          \\escape(@", \'\\\\/.*$^~[]\'), \'\\n\', \'\\\\n\', \'g\')<cr><cr>\n          \\:call setreg(\'"\', old_reg, old_regmode)<cr>\n\n
\n