sza*_*ica 0 regex mapping vim comments key-bindings
在我用来初始化一些 TeX 相关设置的函数内部,我定义了以下映射:
vmap <buffer> ucm :s/^\% //<CR>:nohlsearch<CR>
Run Code Online (Sandbox Code Playgroud)
我希望它能让我轻松地取消注释视觉上选择的行。类似的:
vmap <buffer> cm :s/^/\% /<CR>:nohlsearch<CR>
Run Code Online (Sandbox Code Playgroud)
在评论方面做得非常好。其他语言的类似映射(使用 # 而不是 %)也可以正常工作。最后那些看起来像这样:
vmap <buffer> cm :s/^/# /<CR>:nohlsearch<CR>
vmap <buffer> ucm :s/^# //<CR>:nohlsearch<CR>
Run Code Online (Sandbox Code Playgroud)
一系列的V10jcmV10kucm应该使代码保持完整。
那么现在:我做错了什么?
你正在添加不必要的东西。
:s/^/% <CR>
Run Code Online (Sandbox Code Playgroud)
和
:s/^% /<CR>
Run Code Online (Sandbox Code Playgroud)
应该分别用于评论和取消评论。
第三个/
用于添加选项,例如/c
“确认”或/g
“全局”。/
如果您不使用这些选项,则根本不需要这个。
在“取消注释”替换中,您正在转义%
,但%
其本身对于 Vim 的正则表达式风格没有特殊含义。如果它被转义,不仅 Vim 肯定不会匹配它,而且还\%<something>
用于一堆像\%d
. 所以你的模式失败了,因为 Vim 偶然发现你\%
期待原子的其余部分并得到“什么也没有”。