我在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命令不适用于我在Windows上的设置。Ctrl+v和Ctrl+q是其中的一些。后来我发现以下方法可以取消注释行。

鉴于

一些缩进的注释

   # Practice in Vim
   # Practice in Vim
   # Practice in Vim
   # Practice in Vim
   # Practice in Vim
   # Practice in Vim
   # Practice in Vim

以下方法删除#符号并保留缩进。

方法

将光标移动到第一条注释(箭头或h、j、k、l)。然后应用以下技术之一:

视觉块模式(更快)

Ctrl+Shift+v进入视觉块模式js来选择垂直线。l包括水平字符(可选)x删除块

搜索/替换+Regex

选择具有常规视觉模式的文本,即Shift+v类型:。您将得到提示“<,”>。键入regex,例如s/#//将哈希值替换为空。(可选:键入s/#//以包含空格)。进来

:norm命令

选择具有常规视觉模式的文本,即Shift+v类型:。您将得到提示“<,”>。发出命令。键入:norm ^x以删除第一个非空白字符和下一个字符。(可选:如果不缩进,请尝试:norm x,或:norm ^xx以包含空格)。进来

g模式

选择具有常规视觉模式的文本,即Shift+v类型:。您将得到提示“<,”>。发出命令。键入g/#/nom^x。(可选:键入g/#/nom!^xx以包含空格)。进来

后果

    Practice in Vim
    Practice in Vim
    Practice in Vim
    Practice in Vim
    Practice in Vim
    Practice in Vim
    Practice in Vim

另请参见

关于删除缩进的评论的帖子关于如何快速评论Vim的帖子Primagen的g命令教程。VimTrick的注释代码教程

其他回答

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

下面是my.vimrc的一部分:

"insert and remove comments in visual and normal mode
vmap ,ic :s/^/#/g<CR>:let @/ = ""<CR>
map  ,ic :s/^/#/g<CR>:let @/ = ""<CR>
vmap ,rc :s/^#//g<CR>:let @/ = ""<CR>
map  ,rc :s/^#//g<CR>:let @/ = ""<CR>

在正常和视觉模式下,我可以按,ic插入注释,按,rc删除注释。

@CMS的解决方案是注释输入/输出行的最“vim原生”方式。在@CMS的第二步中,在CtrlV之后,您还可以使用r#添加注释或使用x删除注释。Drew Neil的《实用Vim》(第46页)很好地解释了这一技术。

另一个好的选择是使用ex模式命令[范围]归一化##⌴。显然,要用这个保存击键,您需要注释掉15+行。

要取消注释整个文件,请执行以下操作:

Esc退出插入模式转到第一行的第一个字符ctrl+V或ctrl+shift+V选择当前字符G或shift+G转到最后一行x删除所选内容

" comments
augroup comment_like_a_boss
    autocmd!
    autocmd FileType c,cpp,go                let b:comment_leader = '// '
    autocmd FileType ruby,python             let b:comment_leader = '# '
    autocmd FileType conf,fstab,sh,bash,tmux let b:comment_leader = '# '
    autocmd FileType tex                     let b:comment_leader = '% '
    autocmd FileType mail                    let b:comment_leader = '> '
    autocmd FileType vim                     let b:comment_leader = '" '
augroup END
noremap <silent> ,cc :<C-b>silent <C-e>norm ^i<C-r>=b:comment_leader<CR><CR>
noremap <silent> ,uc :<C-b>silent <C-e>norm ^xx<CR>