在 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,这些脚本几乎适用于所有文件类型,只需点击我喜欢使用以下内容:
将光标放在要注释掉的第一行 输入 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 <buffer> K :s,^\(\s*\)[^\/\/ \t]\@=,\1\/\/,e<CR>:nohls<CR>zvj
【参考方案6】:
我做的几乎和你一样。
评论:
使用CTRL-V
然后I#
选择可视块(在开头插入#
)
取消注释:
使用CTRL-V
然后X
进行可视块选择(删除该行的第一个符号)
请注意大写I
和X
。
【讨论】:
是的,我没有注意到 大写,这让我得到了你的答案。 :-) +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 代码块的最优雅的方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章