【问题标题】:Advanced Usage of Ranges with Vim Keymappings使用 Vim 键映射的范围的高级用法
【发布时间】:2013-07-04 21:30:18
【问题描述】:

我在我的 vimrc 中有一个向下映射 c 代码区域的映射:

nmap comc :normal! I//<ESC>

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

.,.-5 normal comc 

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

同样,范围操作支持评论直到达到搜索模式,例如:

.,/int main/ comc

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

【问题讨论】:

    标签: vim keymapping


    【解决方案1】:

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

    您也可以在完全不更改映射的情况下使用可视模式:V2kcomc。您必须添加具有相同 lhsrhsxnoremap,因为 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

    【讨论】:

      【解决方案2】:

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

      我推荐 commentary.vim 进行文件类型感知评论。

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

      您的用例:

      • 向下注释 N 行(比如 3)::.,.+3normal gccgc3j4gcc

      • 评论向上 5 行::.,.-5normal gcc,或简单地gc5k

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

      【讨论】:

      • 事实上,我确实有一个映射'comp' 可以输出perl 和python 代码,还有一个'comh' 可以输出haskell 代码。我有自动命令,可以递归地将“com”映射到我正在使用的文件类型所需的任何键映射。由于我已经走了这么远,我宁愿避免切换到插件。不过,这确实听起来像是一个很棒的插件,当我完成我的“我要学习 VIM”踢球时,我可能会切换到它。
      猜你喜欢
      • 1970-01-01
      • 2016-04-21
      • 2013-04-29
      • 2011-03-22
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多