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


当前回答

我喜欢简短的、综合的、令人难忘的方法,不依赖于外部脚本——一种花哨的小题大做。。。

TLDR:按gI(大写i)将光标置于插入模式下的行首(无论是空格还是非空格字符,并防止自动缩进)

使用此选项可快速注释(例如)非连续行,注释符号(例如#或//)为第一个字符,不带缩进,方法是按。(点)-->,但如果仍有自动缩进机制,则在插入模式下按和以更正缩进,操作后退出到正常模式。现在可用于注释行。。。

长:我现在(几年后)意识到,按gI(大写I)会将光标置于插入模式下的第1列(意思是:无论是单词还是非单词字符,都在行的开头)。

插入注释符号(如#)并按escape-现在可以在只按的同时注释单个非连续行(注释符号作为第一个字符,没有缩进)。(点)。

与按0i或仅按I相反,它将注释符号放在第一个单词字符处,部分还带有不需要的缩进

其他回答

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

如评论中所述:

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

从这里的答案中的想法开始,我开始了自己的评论功能。它可以打开和关闭评论。它可以处理//打印(“蓝色”)等事情//这个东西是蓝色的,只是切换第一条评论。此外,它在第一个非空白处添加注释和一个空格,而不是在行的开头。另外,在注释和缩进行时,它不会不必要地复制空白,而是使用缩放(:h\zs表示帮助)来避免这种额外的工作。希望它能帮助一些极简主义者。欢迎提出建议。

" these lines are needed for ToggleComment()
autocmd FileType c,cpp,java      let b:comment_leader = '//'
autocmd FileType arduino         let b:comment_leader = '//'
autocmd FileType sh,ruby,python  let b:comment_leader = '#'
autocmd FileType zsh             let b:comment_leader = '#'
autocmd FileType conf,fstab      let b:comment_leader = '#'
autocmd FileType matlab,tex      let b:comment_leader = '%'
autocmd FileType vim             let b:comment_leader = '"'

" l:pos   --> cursor position
" l:space --> how many spaces we will use b:comment_leader + ' '

function! ToggleComment()
    if exists('b:comment_leader')
        let l:pos = col('.')
        let l:space = ( &ft =~ '\v(c|cpp|java|arduino)' ? '3' : '2' )
        if getline('.') =~ '\v(\s*|\t*)' .b:comment_leader
            let l:space -= ( getline('.') =~ '\v.*\zs' . b:comment_leader . '(\s+|\t+)@!' ?  1 : 0 )
            execute 'silent s,\v^(\s*|\t*)\zs' .b:comment_leader.'[ ]?,,g'
            let l:pos -= l:space
        else
            exec 'normal! 0i' .b:comment_leader .' '
            let l:pos += l:space
        endif
        call cursor(line("."), l:pos)
    else
        echo 'no comment leader found for filetype'
    end
endfunction

nnoremap <Leader>t :call ToggleComment()<CR>
inoremap <Leader>t <C-o>:call ToggleComment()<CR>
xnoremap <Leader>t :'<,'>call ToggleComment()<CR>

:%s/^/\/\//g

删除角色和使用此命令注释.C或CPP文件

我是这样做的:

转到要注释掉的第一行的第一个字符。在GVIM中按Ctrl+q或在VIM中按Ctrl+v,然后向下选择要注释的行上的第一个字符。然后按c,并添加注释字符。

解压缩的方式相同,只需键入空格而不是注释字符。

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

我使用tcomment进行评论。

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

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

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