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


当前回答

我的.vimrc中有以下内容:

" Commenting blocks of code.
augroup commenting_blocks_of_code
  autocmd!
  autocmd FileType c,cpp,java,scala let b:comment_leader = '// '
  autocmd FileType sh,ruby,python   let b:comment_leader = '# '
  autocmd FileType conf,fstab       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>s/^/<C-R>=escape(b:comment_leader,'\/')<CR>/<CR>:nohlsearch<CR>
noremap <silent> ,cu :<C-B>silent <C-E>s/^\V<C-R>=escape(b:comment_leader,'\/')<CR>//e<CR>:nohlsearch<CR>

现在,您可以键入cc来注释一行,键入cu来取消注释一行(在正常模式和视觉模式下都有效)。

(多年前我从某个网站上偷了它,所以我无法完全解释它是如何工作的:)。有一条注释对其进行了解释。)

其他回答

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

我个人想评论一下Visual Studio。我在工作中已经习惯了它,以至于它占据了我的肌肉记忆(使用vsvim)。使用shift+v选择所需的行,然后按ctrl+k,ctrl+c进行注释,或按ctrl+k,ctrl+u取消注释。

:vnoremap <C-k><C-c> :norm i//<Cr>
:vnoremap <C-k><C-u> :s/\/\///g<Cr>:noh<Cr>

我使用EnhancedCommentify。它评论了我所需要的一切(编程语言、脚本、配置文件)。我将其用于视觉模式绑定。只需选择要评论的文本,然后按co/cc/cd。

vmap co :call EnhancedCommentify('','guess')<CR>
vmap cc :call EnhancedCommentify('','comment')<CR>
vmap cd :call EnhancedCommentify('','decomment')<CR> 

切换注释

如果你只需要切换评论,我宁愿使用commenttary.vim by tpope。

安装

病菌:

cd ~/.vim/bundle
git clone git://github.com/tpope/vim-commentary.git

vim插头:

Plug 'tpope/vim-commentary'

Vundle公司:

Plugin 'tpope/vim-commentary'

进一步定制

将其添加到.virc文件:noremap<leader>/:Comments<cr>

现在,您可以通过按Leader+/来切换评论,就像Sublime和Atom一样。

前面有30个答案,我将尝试给出一个更简单的解决方案:在行的开头插入#。然后沿直线向下按点(.)。要重复,请执行j,。,j要取消注释,请删除#(可以在#上单击x),然后使用k、.、,。,等