如何使用 Vim 的 escape() 并将 <C-R> 作为其第一个参数?

How do I use Vim's escape() with <C-R> as its first argument?

我的目标是 select 在 Vim 的可视化模式下(好吧,在我的例子中是 neovim),按 leader+L 并让 fzf 显示搜索结果selected 字符串到 :Rg。我想到了这个:

vnoremap <expr> <leader>l 'y:<C-U>Rg '. shellescape(escape('<C-R>"', '()[]><')) .'<CR>'

这确实有效,但是当我 select 文本 options(:modifier) 并触发搜索时, escape() 命令不会转义括号并且 Rg 无法转义return 个结果。

简而言之,我希望这个命令能够触发:

:Rg 'options\(:modifier\)'

我得到的是这个:

:Rg 'options(:modifier)'

我猜我不能在这种情况下使用 <C-R>,但我似乎无法弄清楚为什么?


更新:感谢用户 D. Ben Knoble 的有用回复,指出我可以放弃并以不同的方式构建映射,我最终得到了这个,解决了我的问题:

vnoremap <leader>l "ky:exec 'Rg '. shellescape(escape(@k, '()[]{}?.'))<CR>

你不需要——所有寄存器都可以作为前缀为 @ 的变量使用(我认为除了 @_ 之外的所有寄存器都是可读的,大多数是可写的)。

所以不要使用 <C-R>",而是使用 @"