0

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

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

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

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

vmap <leader>rc :<C-R>s/{\|}//gc<cr>

它突然告诉我,它无法匹配模式 {|},因此转义了 | 似乎没有工作。

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

4

2 回答 2

5

使用以下内容:

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

确实对选定的文本进行操作:因为:在可视模式下,您将获得'<,'>命令的前面。

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

于 2013-01-29T11:13:45.073 回答
0

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

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

:/{\|}//gc

这实际上是一个范围说明符而不是替代品。我们只需要删除它

vnoremap <leader>rc :s/{\|}//gc<cr>
于 2013-01-29T11:16:29.267 回答