在 Vim 中注释/取消注释 ruby​​ 代码块的最优雅的方式是啥?

Posted

技术标签:

【中文标题】在 Vim 中注释/取消注释 ruby​​ 代码块的最优雅的方式是啥?【英文标题】:What's the most elegant way of commenting / uncommenting blocks of ruby code in Vim?在 Vim 中注释/取消注释 ruby​​ 代码块的最优雅的方式是什么? 【发布时间】:2010-10-02 09:48:57 【问题描述】:

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

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

我觉得这个工作流程没问题,有什么方法可以改进这个流程吗?在 vim 中注释或取消注释 ruby​​ 代码部分还有其他技巧吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

+1,这些脚本几乎适用于所有文件类型,只需点击 ,它将切换(选定)行上的 cmets。 @SamSaffron 我曾经使用 EnhCommentify,但我发现 tComment 更好,恕我直言。【参考方案2】:

我喜欢使用以下内容:

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

也就是说,从包含标记“a”的行到当前行,用散列代替行首。

【讨论】:

很高兴知道如何使用标记来创建宏,但手动选择像这种视觉模式这样的区域对我来说似乎要容易得多。 我同意,这是这里更好的答案之一。但我个人会将其映射到击键或其他有用的东西,更不用说限制是“#”并非用于所有脚本进行评论。 我同意@dreeves,我正在尝试从以线为中心的方法转向以块为中心的方法。但是用了 vi 三十多年就很难了! (-:【参考方案3】:

有些人似乎喜欢Nerd Commenter

【讨论】:

【参考方案4】:

在视觉上选择后,在块模式下,要注释掉的文本,点击I(即大写的i),输入#,最后点击escape钥匙。它与您当前使用的过程基本相同,但使用的是插入而不是替换。

【讨论】:

哇,太好了!但是为什么这只适用于视觉块模式,而不是普通视觉模式呢? 如果你看一下 vim 的可视化操作符 (vim.org/htmldoc/visual.html#visual-operators),你会发现没有可视化字符插入操作符,也没有可视化行插入操作符,只有可视化块插入操作符. 这对我来说是正确的答案 - 最后的Esc 是必要的。【参考方案5】:

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

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 cmets (/*...*/),但我还是不想使用它们。

【讨论】:

您能解释一下搜索字符串中的\@=\@! 是什么意思吗? 我稍微调整了脚本以输入 C、php,就像上面给出的相同 Shift+K 组合的单行注释。 noremap &lt;buffer&gt; K :s,^\(\s*\)[^\/\/ \t]\@=,\1\/\/,e&lt;CR&gt;:nohls&lt;CR&gt;zvj【参考方案6】:

我做的几乎和你一样。

评论:

使用CTRL-V 然后I# 选择可视块(在开头插入#

取消注释:

使用CTRL-V 然后X 进行可视块选择(删除该行的第一个符号)

请注意大写IX

【讨论】:

是的,我没有注意到 大写,这让我得到了你的答案。 :-) +1 关于为什么这在某些情况下可能不起作用的任何想法?我尝试,它只插入我阻止的第一行。我已经安装了 +visualextra。【参考方案7】:

您也可以这样做:

移到第一行注释掉 然后按“ESC” 点击Ctrl + q进入可视块模式 将完成移至最后一行以注释掉 点击I,按#注释掉 点击ESC

并取消注释:

移至评论的第一个 # 点击Ctrl + q进入可视块模式 将完成移至最后一行以注释掉 点击d 删除评论字符

【讨论】:

【参考方案8】:

试试T-comment 和Ruby block。

我将 T-comment 映射到 //.

" Easy commenting
nnoremap // :TComment<CR>
vnoremap // :TComment<CR>

这允许从 Ruby 块中的任何位置将其注释掉:

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

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

【讨论】:

【参考方案9】:

我使用这些插件:

    vim-commentary by Tim Pope,它定义了一个评论操作符 gc vim-textobj-rubyblock,它为 Ruby do ... 块定义了ir(Ruby 块内部)和ar(Ruby 块周围)。 vim-ruby 定义 im/am 用于内部/周围 Ruby 方法,iM/aM 用于内部/周围 Ruby 类。

使用这种组合,我可以在普通模式下轻松注释/取消注释 Ruby 特定代码,例如:

    gcir / gcar 在 Ruby do/end 块内部/周围进行评论。 gcim / gcam 在 Ruby 方法内部/周围评论。 gciM / gcaM 在 Ruby 类内部/周围发表评论。 加上普通的 Commentary 映射,例如 gcc 来评论一行,或 5gcc 来评论 5 行。

总而言之,它非常像 Vim 和自然。

希望对您有所帮助。

【讨论】:

【参考方案10】:

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

第一个,把这个放到你的.vimrc

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

举个例子

评论 12 行:

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

取消注释 12 行:

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

结论

评论:

[quantifier]@c 

取消注释:

[quantifier]@u

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

补充:

为了改善你的导航number.vim可以帮助你很多关于量词的数字。

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

【讨论】:

很棒的提示,我认为它应该在退出插入模式 let @c="I# \ej" 或类似的东西之前添加空间,谢谢

以上是关于在 Vim 中注释/取消注释 ruby​​ 代码块的最优雅的方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

vim 批量注释和批量取消注释

在 Atom 中注释掉代码块

vim批量注释与取消批量注释(转)

在vim中注释/取消注释多个固定行

vim的批量注释与删除注释

vim 批量注释和取消