1

我的 vimrc 中有一个映射,它向下注释掉 c 代码的区域:

nmap comc :normal! I//<ESC>

由于 'normal' ex 命令将诸如“Ncomc”之类的输入隐式转换为“.,.+N-1 comc”,因此我可以向下排列注释,而无需多次击键,也无需离开正常模式。然而,这只是 vim 范围可以做的一个非常有限的子集。如果我愿意冗长,我可以实现向上范围的评论,如下所示:

.,.-5 normal comc 

在编辑文本时,我更喜欢输入“-6comc”之类的内容或制作使用向上范围的“Comc”映射。我无法成功地做到这一点。

类似地,范围操作支持评论,直到达到搜索模式,例如:

.,/int main/ comc

但是,我希望在没有所有输入的情况下这样做。

4

2 回答 2

3

您请求的行为通常通过:h map-operator映射完成。有了这个注释后 3 行将变成comc2j虽然,但 3 行现在同样简单:comc2k.

你也可以使用可视模式而不改变你的映射:V2kcomc. 您必须添加xnoremap相同的lhsrhs因为nnoremap仅适用于正常模式。(并且不要使用nmap

第三个选项是映射-到移动{count}线并放回计数的东西:

nnoremap <expr> - (v:count ? ":\<C-u>\n" . (v:count-1) . 'k' . v:count : '')

. 这假设您正在写作6-comc,而不是-6comc.

// 顺便说一下,The NERD Commenter如果涉及到插件,我会建议。

于 2013-07-05T03:49:14.367 回答
1

虽然尽可能不使用任何插件是值得称道的,但有时它们只是最好的选择。当您开始使用带有#or注释的语言时,您会怎么做(**)为这些评论字符添加新的映射?

我推荐commentary.vim,它做文件类型感知的评论。

commentary.vim中默认的注释操作符是gc. 您可以将它与动作结合起来,也可以在视觉模式下使用它。

您的用例:

  • 向下注释 N 行(比如 3 行)::.,.+3normal gcc、 或gc3j4gcc

  • 向上注释 5 行::.,.-5normal gcc,或简单地说gc5k.

  • 评论直到int main:.,/int main/-1normal gcc,或简单地gc/int main跟在Enter.

于 2013-07-04T21:40:07.507 回答