这个Vim映射有什么问题?

时间:2011-11-16 20:17:35

标签: regex vim mapping key-bindings commenting

在我用来初始化一些TeX相关设置的函数中,我定义了以下映射:

vmap <buffer> ucm :s/^\% //<CR>:nohlsearch<CR>

我希望它允许我轻松取消选择视觉选择的线条。类似的:

vmap <buffer> cm :s/^/\% /<CR>:nohlsearch<CR>

在评论方面做得非常好。对于使用#的其他语言也是类似的映射,而不是%的工作就好了。最后的那些看起来像这样:

vmap <buffer> cm :s/^/# /<CR>:nohlsearch<CR>
vmap <buffer> ucm :s/^# //<CR>:nohlsearch<CR>

序列 V 10 j cm V 10 k ucm 应该保持代码不变。

现在:我做错了什么?

1 个答案:

答案 0 :(得分:4)

你正在添加不必要的东西。

:s/^/% <CR>

:s/^% /<CR>

应分别用于评论和取消注释。

第三个/用于为“确认”添加/c或“全局”添加/g等选项。如果您不使用这些选项,则根本不需要/

在您的“取消注释”替换中,您正在逃避%,但%本身对Vim的正则表达式没有特殊含义。如果它被转义,Vim肯定不会匹配它,但\%<something>被用于像\%d这样的一堆原子。所以你的模式失败了,因为Vim偶然发现你的\%期待原子的其余部分并且“没有”。