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


当前回答

" 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>

其他回答

按ctrl+v,然后使用↑ 或↓ 选择要注释的行数。然后按shift+I,按#,然后按ESC。这将注释掉您选择的行数。

与取消注释行相反。

对于这些任务,我使用了大部分时间块选择。

将光标放在第一个#字符上,按CtrlV(或按CtrlQ表示gVim),然后向下移动到最后一个注释行,然后按x,这将垂直删除所有#字符。

对于注释文本块几乎是相同的:

首先,转到要评论的第一行,按CtrlV。这将使编辑器处于VISUAL BLOCK模式。然后使用箭头键并选择直到最后一行现在按ShiftI,这将使编辑器处于INSERT模式,然后按#。这将在第一行添加一个哈希。然后按Esc键(给它一秒钟),它将在所有其他选定行上插入#字符。

默认情况下,对于debian/ubuntu附带的精简版vim,请在第三步中键入:s/^/#(可以使用:nohl删除每行第一个字符的任何剩余突出显示)。

这里有两个小屏幕录音,供视觉参考。

注释:

取消注释:

视觉和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>

如何取消注释vi中的以下三行:

#code code
#code
#code code code

将光标放在左上角的#符号上,然后按CtrlV。这将使您进入视觉块模式。按下向下箭头或J三次以选择所有三条线。然后按D。所有评论都会消失。要撤消,请按U。

如何注释vi中的以下三行:

code code
code
code code code

将光标放在左上角的字符上,按CtrlV。这将使您进入视觉块模式。按↓ 或J三次以选择所有三条线。然后按:

I//Esc键

这是大写的I、//和Escape。

按ESC键时,所有选定的行都将获得指定的注释符号。

"comment (cc) and uncomment (cu) code 
noremap   <silent> cc      :s,^\(\s*\)[^# \t]\@=,\1# ,e<CR>:nohls<CR>zvj
noremap   <silent> cu      :s,^\(\s*\)# \s\@!,\1,e<CR>:nohls<CR>zvj

可以使用#注释/取消注释单行或多行。要执行多行操作,请选择行,然后键入cc/cu快捷方式,或键入数字,然后键入cc/cu,例如7cc将注释光标中的7行。

我从Vim中注释/取消注释ruby代码块的最优雅方式是什么?并进行了一些小的更改(更改了快捷键,并在#后面添加了空格)。