为什么Vim中的交替运算符作为命令而不是映射?

Kam*_*ana 0 regex vim

我想做一个以下命令的简单映射:

:'<,'>s/{\|}//gc
Run Code Online (Sandbox Code Playgroud)

它将删除所选文本中的所有花括号,在每次更改之前询问我.它完美地运作.

如果我把它写成我的.vimrc作为这样的映射:

vmap <leader>rc :<C-R>s/{\|}//gc<cr>
Run Code Online (Sandbox Code Playgroud)

它突然告诉我,它无法匹配模式{|},从而逃避了| 好像没有用.

为什么以及如何正确创建此映射?

Ant*_*nko 5

使用以下内容:

:vmap <leader>rc :s/{\\|}//gc<CR>
Run Code Online (Sandbox Code Playgroud)

确实对选定的文本进行操作:对于:可视模式,您可以'<,'>在命令前面进行操作.

调试这种映射的一种有用方法是省略最后一个<CR>,因此您可以完全按照执行的方式查看命令.这就是我注意到<C-R>你吃掉了s(因为它希望寄存器名称作为下一个字符)并且一层转义消失了.