在我用来初始化一些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 应该保持代码不变。
现在:我做错了什么?
答案 0 :(得分:4)
你正在添加不必要的东西。
:s/^/% <CR>
和
:s/^% /<CR>
应分别用于评论和取消注释。
第三个/
用于为“确认”添加/c
或“全局”添加/g
等选项。如果您不使用这些选项,则根本不需要/
。
在您的“取消注释”替换中,您正在逃避%
,但%
本身对Vim的正则表达式没有特殊含义。如果它被转义,Vim肯定不会匹配它,但\%<something>
被用于像\%d
这样的一堆原子。所以你的模式失败了,因为Vim偶然发现你的\%
期待原子的其余部分并且“没有”。