在Vim中评论/取消注释ruby代码块的最优雅方式是什么?


What's the most elegant way of commenting / uncommenting blocks of ruby code in Vim?

在VIM中,我需要注释掉一段Ruby代码:

  • 我导航到我要注释掉的行的第一列
  • 我按CTRL-v进入可视区块模式
  • 我向下导航到我想要结束操作的地方
  • 如果我想取消注释代码,我输入r,如果我想要注释,我输入r#

这个工作流程对我来说似乎没问题,有没有办法改进这个过程? 是否有任何其他技巧可以在vim中评论或取消注释ruby代码部分?


我做的几乎和你一样。

注释:

  • 视觉块选择CTRL-V然后I#(在开头插入#)

取消注释:

  • 视觉块选择CTRL-V然后X(删除行上的第一个符号)

请注意大写IX


对于每种语言(ftplugin),我编写映射,添加或删除注释引导并将光标向下移动一行。例如,在我的python ftplugin中,我有这个:

1
2
noremap   <buffer> K      :s,^\(\s*\)[^# \t]\@=,\1#,e<CR>:nohls<CR>zvj
noremap   <buffer> <C-K>  :s,^\(\s*\)#\s\@!,\1,e<CR>:nohls<CR>zvj

我发现这是一个非常灵活的设置:

  • K注释当前行。
  • 反复按K以评论许多行。
  • 6K评论6行。
  • 视觉模式中的K评论整个选择。
  • 使用CTRL-K可以以相同的方式取消注释所有内容
  • 如果行已经注释,则它们不会在开头添加额外的#
  • 如果#后跟一个空格,则将其视为文本注释,不会被触及。

我对每种语言略有适应。对于旧C评论(/*...*/)它不起作用,但我不想再使用它们。


我使用这些插件:

  • Tim Pope的评论,定义了一个注释运算符gc
  • vim-textobj-rubyblock,它定义了ir(在Ruby块内)和ar(在Ruby块周围),用于Ruby do ...块。
  • vim-ruby,它定义了Ruby方法内部/周围的im / am,以及Ruby类内部/周围的im / am
  • 使用这种组合,我可以在普通模式下轻松注释/取消注释特定于Ruby的代码,例如:

  • Ruby do / end块内/周围的gcir / gcar注释。
  • gcim / gcam在Ruby方法内部/周围发表评论。
  • gcim / gcam在Ruby类内部/周围发表评论。
  • 加上正常的评论映射,如gcc来评论一行,或5gcc评论5行。
  • 总而言之,它非常像Vim和自然。

    希望有所帮助。


    有些人似乎喜欢Nerd Commenter


    我喜欢使用以下内容:

    • 将光标放在要注释掉的第一行上
    • 输入ma(无冒号)在该行上放置标记
    • 转到要注释的块的最后一行
    • 输入:'a,.s / ^ /#/然后输入

    也就是说,从包含标记"a"的行到当前行,将哈希替换为行的开头。


    你试过EnhCommentify.vim或tComment.vim吗?


    在块模式下直观地选择要注释的文本,点击I(即大写i),键入#并最后点击转义键。它基本上与您当前使用的程序相同,但使用insert而不是replace。


    你也可以这样做:

    • 移至第一行注释掉
    • 然后按'ESC'
    • Ctrl + q进入Visual Block模式
    • 将完成移至最后一行以注释掉
    • 点击I,按#注释掉
    • 点击ESC

    并取消注释:

    • 移至评论的第一个#
    • Ctrl + q进入Visual Block模式
    • 将完成移至最后一行以注释掉
    • d删除注释字符

    我将向您推荐一种使用Macro进行评论的替代方法

    第一个,只是把它放到你的.vimrc

    1
    2
    let @c="I#\ej"
    let @u="^xj"

    例如

    评论12行:

  • 导航到要开始评论的第一行。
  • 在命令模式下键入12@c以注释12行
  • 取消注释12行:

  • 导航到要取消注释的第一行。
  • 在命令模式下键入12@u以取消注释12行
  • 结论

    注释:

    1
    [quantifier]@c

    取消注释:

    1
    [quantifier]@u

    注意:这些命令将从当前行开始注释/取消注释。

    额外:

    为了改善你的需要,number.vim可以帮助你量化量词。

    https://github.com/myusuf3/numbers.vim


    尝试使用Ruby块进行T-comment。

    我将T-comment映射到//。

    1
    2
    3
    " Easy commenting
    nnoremap // :TComment<CR>
    vnoremap // :TComment<CR>

    这允许从Ruby块中的任何位置使用以下内容对其进行注释:

    1
    2
    var  (visual around Ruby)
    //   (toggle comments)

    请注意,Ruby块有一些需要安装的插件依赖项,请参阅我的Vimfiles示例。