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

时间:2013-01-29 11:01:29

标签: regex vim

我想对以下命令进行简单的映射:

:'<,'>s/{\|}//gc

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

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

vmap <leader>rc :<C-R>s/{\|}//gc<cr>
它突然告诉我,它无法匹配模式{|},从而逃避了|好像没有用。

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

2 个答案:

答案 0 :(得分:5)

使用以下内容:

:vmap <leader>rc :s/{\\|}//gc<CR>

对所选文本进行操作:对于:,在可视模式下,您会在命令前面获得'<,'>

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

答案 1 :(得分:0)

我认为你需要在冒号之后删除<C-R>,这是在冒号粘贴s寄存器然后你的模式之后说的。

您不可能在此寄存器中有任何内容,因此命令行如下所示:

:/{\|}//gc

实际上是范围说明符而不是替代。我们只需删除

vnoremap <leader>rc :s/{\|}//gc<cr>