我在vi中打开了一个Ruby代码文件,其中有行注释为#:

class Search < ActiveRecord::Migration
  def self.up
    # create_table :searches do |t|
    #   t.integer :user_id
    #   t.string :name
    #   t.string :all_of
    #   t.string :any_of
    #   t.string :none_of
    #   t.string :exact_phrase
    # 
    #   t.timestamps
    # end
  end

  def self.down
    # drop_table :searches
  end
end

假设我想取消注释第一个定义中的所有行。。。端部。在Vim中有什么有效的方法可以做到这一点?

总的来说,我正在寻找一种简单、流畅的方式来注释和取消注释行。这里我处理的是Ruby代码,但可能是JavaScript(//)或Haml(-#)。


当前回答

我使用vim 7.4,这对我有用。假设我们正在注释/取消注释3行。

要注释:

如果行的开头没有制表符/空格:ctrl+V然后jjj然后shift+I(capital I)然后//然后esc esc如果该行的开头有制表符/空格,您仍然可以执行上述操作或替换为c:ctrl+V然后jjj然后c然后//然后esc esc取消注释:

如果行的开头没有制表符/空格:ctrl+V,然后jjj,然后ll(下限L),然后c

如果行的开头有制表符/空格,则将一个空格加上escctrl+V,然后jjj,然后ll(下限L),然后c,然后空格,然后esc

其他回答

有几个vim插件,如Tcomment和nerdcommeter。

我使用tcomment进行评论。

gcc:它将切换当前行上的注释。v{motion}gc:它将切换注释可视选择的一系列行

示例:v3jgc将切换3行区域。

这些命令可用于处理任何语言的注释。

尽管这个问题已经有了很多答案,但我仍然认为我会对我写的一个小插件大声叫好:commentify。

Commentify使用commentstring设置来决定如何注释掉代码块,因此您不必在配置中保留不同注释类型的映射,并且支持基于行的注释(例如,//)和块注释(例如/**/)。

它还为注释和取消注释块映射了相同的快捷方式(默认为ctrl+c),因此您不必记住两个映射或一组复杂的命令。

通过mark命令标记文本区域,例如ma和mbtype命令::'a,'bg/(.*)/s////\1/

您可以在http://bknpk.ddns.net/my_web/VIM/vim_shell_cmd_on_block.html

使用Control-V选择文本矩形:转到第一个#字符,键入Ctrl+V,向右移动一次,然后向下移动,直到注释结束。现在键入x:删除所有#字符,后跟一个空格。

我使用NERD评论员脚本。它允许您在代码中轻松注释、取消注释或切换注释。

如评论中所述:

对于任何对用法感到困惑的人,默认的前导是“\”,所以10\cc将注释十行,10\cu将取消注释这十行