Regex 什么';这个Vim映射有什么问题?

Regex 什么';这个Vim映射有什么问题?,regex,vim,mapping,key-bindings,comments,Regex,Vim,Mapping,Key Bindings,Comments,在我用来初始化某些TeX相关设置的函数中,定义了以下映射: vmap <buffer> ucm :s/^\% //<CR>:nohlsearch<CR> vmap ucm:s/^\%/:nohlsearch 我希望它能让我轻松地取消对所选行的注释。类似的: vmap <buffer> cm :s/^/\% /<CR>:nohlsearch<CR> vmap cm:s/^/\%/:nohlsearch 在评论方面做得很

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

vmap <buffer> ucm :s/^\% //<CR>:nohlsearch<CR>
vmap ucm:s/^\%/:nohlsearch
我希望它能让我轻松地取消对所选行的注释。类似的:

vmap <buffer> cm :s/^/\% /<CR>:nohlsearch<CR>
vmap cm:s/^/\%/:nohlsearch
在评论方面做得很好。对于其他语言,使用#而不是%的类似映射也可以正常工作。最后一个是这样的:

vmap <buffer> cm :s/^/# /<CR>:nohlsearch<CR>
vmap <buffer> ucm :s/^# //<CR>:nohlsearch<CR>
vmap cm:s/^/#/:nohlsearch
vmap ucm:s/^#/:nohlsearch
V10jcmV10kucm的序列应该使代码保持原样


那么现在:我做错了什么?

你在添加不必要的东西

:s/^/% <CR>
:s/^/%

:s/^%/
应该分别用于注释和取消注释

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


在“uncomment”替换中,您正在转义
%
,但
%
本身对Vim的正则表达式没有特殊意义。如果Vim被转义,不仅它肯定不会匹配它,而且
\%
被用于一堆原子,比如
\%d
。因此,您的模式失败了,因为Vim偶然发现您的
\%
期望原子的其余部分,却“一无所获”。

您正在添加不必要的东西

:s/^/% <CR>
:s/^/%

:s/^%/
应该分别用于注释和取消注释

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

在“uncomment”替换中,您正在转义
%
,但
%
本身对Vim的正则表达式没有特殊意义。如果Vim被转义,不仅它肯定不会匹配它,而且
\%
被用于一堆原子,比如
\%d
。因此,您的模式失败了,因为Vim无意中发现您的
\%
期望原子的其余部分而“一无所获”