使用Vim Keymappings的范围的高级用法

时间:2013-07-04 21:30:19

标签: vim keymapping

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

nmap comc :normal! I//<ESC>

由于'normal'ex命令隐式地将诸如“Ncomc”之类的输入转换为“。,。+ N-1 comc”,因此我可以向下调整注释而无需多次击键且不离开正常模式。然而,这是vim范围可以做的非常有限的子集。如果我愿意冗长,我可以像这样做出向上的评论:

.,.-5 normal comc 

在编辑文本时,我更喜欢键入类似“-6comc”的内容,或者使用向上范围的“Comc”映射。我没能成功。

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

.,/int main/ comc
但是,如果没有打字,我会这么做。

2 个答案:

答案 0 :(得分:3)

您请求的行为通常使用:h map-operator映射完成。通过此评论,3行向下将变为comc2j,但现在就可以轻松推出3行:comc2k

您也可以在不更改映射的情况下使用可视模式:V2kcomc。您必须使用相同的xnoremaplhs添加rhs,因为nnoremap仅适用于普通模式。 (And do not use nmap.

第三个选项是将-映射到移动{count}行并将计数放回原点的内容:

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

。这假设您正在撰写6-comc,而不是-6comc

//顺便说一句,如果是插件,我会建议The NERD Commenter

答案 1 :(得分:1)

尽管在没有任何插件的情况下尽可能地去做是值得称赞的,但有时它们只是最好的选择。当您开始使用包含#(* ... *)评论的语言时,您会怎么做?为这些注释字符添加新映射?

我建议commentary.vim进行文件类型感知评论。

commentary.vim 中的默认评论运算符为gc。您可以将它与运动结合使用,也可以在可视模式下使用它。

您的使用案例:

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

  • 评论超过5行::.,.-5normal gcc,或只是gc5k

  • 评论到int main:.,/int main/-1normal gcc,或只是gc/int main后跟 Enter