这个 Vim 映射出了什么问题?

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应该使代码保持完整。

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

rom*_*inl 5

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

:s/^/% <CR>
Run Code Online (Sandbox Code Playgroud)

:s/^% /<CR>
Run Code Online (Sandbox Code Playgroud)

应该分别用于评论和取消评论。

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

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