我在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(-#)。


当前回答

这是一个基于C-v的基本单线图,然后是上面概述的I方法。

此命令(:Comment)将所选字符串添加到任何选定行的开头。

command! -range -nargs=1 Comment :execute "'<,'>normal! <C-v>0I" . <f-args> . "<Esc><Esc>"

将这一行添加到.vimrc中,以创建一个接受单个参数的命令,并将该参数放置在当前选择的每一行的开头。

例如,如果选择了以下文本:

1
2

然后运行this::Comment//,结果将是:

//1
//2

其他回答

我使用Jasmeet Singh Anand的comments.vim(在vim.org上找到),

它适用于C、C++、Java、PHP[2345]、proc、CSS、HTML、htm、XML、XHTML、vim、vimrc、SQL、sh、ksh、csh、Perl、tex、fortran、ml、caml、ocaml、vhdl、haskel和普通文件

它在正常和可视模式下对不同源文件中的行进行注释和取消注释

用法:

CtrlC注释单行CtrlX取消注释单行ShiftV并选择多行,然后CtrlC对所选多行进行注释ShiftV并选择多行,然后CtrlX取消注释所选多行

如果您已经知道行号,那么n,ms/#//将起作用。

我使用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

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

我使用vim多个光标。

要选择区域,请按0(它是零,而不是字母“o”)转到要注释掉的区域的第一行或最后一行的第一个字符。然后按V键并使用J、K或上下箭头键选择区域。然后按CtrlN将虚拟光标放在选择的每一行上。然后按I键同时编辑选择的每一行。