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


当前回答

我是这样做的:

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

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

其他回答

我使用Tim Pope的vim评论插件。

我个人不喜欢注释“切换”功能,因为它会破坏代码中已经包含的注释。此外,我希望注释字符始终显示在最左边,这样我可以很容易地看到注释块。此外,我希望这是嵌套的(如果我首先注释掉一个块,然后是一个封闭块)。因此,我稍微改变了其中一个解决方案。我使用F5注释,使用Shift-F5取消注释。此外,我在s/命令末尾添加了/g:

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 = '"'
autocmd FileType nasm             let b:comment_leader = ';'

function! CommentLine()
    execute ':silent! s/^\(.*\)/' . b:comment_leader . ' \1/g'
endfunction

function! UncommentLine()
    execute ':silent! s/^' . b:comment_leader . ' //g'
endfunction

map <F5> :call CommentLine()<CR>
map <S-F5> :call UncommentLine()<CR>

一些常规的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中:

1-按v进入视觉模式。

2-使用箭头选择要注释的块。

3-按下:

4-类型“s/^/#”

要删除注释,只需将步骤4替换为:

4-类型's/^#//'

视觉和Shift-I不适合我。

在没有任何插件的情况下工作最简单的是


选择块-V,然后选择j或k或任何相关运动(不要使用箭头键):)然后点击:它提示命令:“<,”>至注释使用#-`s/^/#/`使用`//`-`s/^/\/\//`取消注释使用#-`s/^#//`使用`//`-`s/^\/\//`


再平面化-

“<,”>-应用于视觉块

s-替代品

^-以开头

在/add字符#之后,在这种情况下,\/\/转义为//


使现代化

我编写了一个函数,用<Space><Space>注释和取消注释当前行

适用于接下来的10行,例如10<Space><Space>

将其粘贴到.vimrc

function CommentUncomment()
  let line = getline('.')
  if line[:1] == "//"
      norm ^2x
  else 
      norm I//
  endif
endfunction

nnoremap <Space><Space> :call CommentUncomment()<CR>