如何正确地对变量/寄存器进行 vim 转义

如何正确地对变量/寄存器进行 vim 转义

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

:let @/=@"

它可以工作,除非@"其中有像反斜杠这样的“有趣”的东西。

我可以

:let @/=escape(@", '\\')

但我不确定这是否是正确的做法,以及它是否会逃脱全部可能有问题的字符。也许还有其他的。

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

答案1

我认为没有这样的列表。下面是我长期使用的转义函数,作为宏的一部分,用于搜索当前选定的字符串:

escape(@", '\\/.*$^~[]')

编辑:

由于我从 ~/.vimrc 中复制了太多内容,所以原始答案有额外的参数。以下是我使用该转义的映射,以防有该上下文可能会有所帮助。突出显示一些文本并键入*搜索该文本的下一个出现位置。(映射最初由 Jürgen Krämer 编写。)


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

相关内容