首页 文章

什么是在Vim中评论/取消注释行的快速方法?

提问于
浏览
894

我在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

假设我想取消注释第一个 def ... end 部分中的所有行 . 在Vim中这样做的有效方法是什么?

一般来说,我处理Ruby代码,但它可能是JavaScript( // )或Haml( -# ) .

30 回答

  • 2

    使用Control-V选择文本的矩形:转到第一个 # 字符,键入Ctrl V,向右移动一次,然后向下移动,直到注释结束 . 现在输入 x :您将删除所有 # 字符,后跟一个空格 .

  • 8

    这是我 .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删除注释 .

  • 108

    这个答案在这里1)显示正确的代码粘贴到 .vimrc 以获取 vim 7.4+ 进行块注释/取消注释,同时在可视模式下保持缩进级别1个快捷方式,2)解释它 .

    这是代码:

    let b:commentChar='//'
    autocmd BufNewFile,BufReadPost *.[ch]    let b:commentChar='//'
    autocmd BufNewFile,BufReadPost *.cpp    let b:commentChar='//'
    autocmd BufNewFile,BufReadPost *.py    let b:commentChar='#'
    autocmd BufNewFile,BufReadPost *.*sh    let b:commentChar='#'
    function! Docomment ()
      "make comments on all the lines we've grabbed
      execute '''<,''>s/^\s*/&'.escape(b:commentChar, '\/').' /e'
    endfunction
    function! Uncomment ()
      "uncomment on all our lines
      execute '''<,''>s/\v(^\s*)'.escape(b:commentChar, '\/').'\v\s*/\1/e'
    endfunction
    function! Comment ()
      "does the first line begin with a comment?
      let l:line=getpos("'<")[1]
      "if there's a match
      if match(getline(l:line), '^\s*'.b:commentChar)>-1
        call Uncomment()
      else
        call Docomment()
      endif
    endfunction
    vnoremap <silent> <C-r> :<C-u>call Comment()<cr><cr>
    

    这个怎么运作:

    • let b:commentChar='//' :这在vim中创建了一个变量 . b 这里指的是范围,在这种情况下包含在缓冲区中,意味着当前打开的文件 . 您的注释字符是字符串,需要用引号括起来,引号不是切换注释时要替换的内容的一部分 .

    • autocmd BufNewFile,BufReadPost *... :自动命令触发不同的事物,在这种情况下,当新文件或读取文件以特定扩展名结束时,这些事件会触发 . 触发后,执行以下命令,允许我们根据文件类型更改 commentChar . 还有其他方法可以做到这一点,但它们对新手(比如我)更容易混淆 .

    • function! Docomment() :函数以 function 开头并以 endfunction 结尾 . 功能必须以资本开头 . ! 确保此函数使用此版本的 Docomment() 覆盖定义为 Docomment() 的任何先前函数 . 没有 ! ,我有错误,但那可能是因为我通过vim命令行定义了新函数 .

    • execute '''<,''>s/^\s*/&'.escape(b:commentChar, '\/').' /e' :执行调用命令 . 在这种情况下,我们正在执行 substitute ,它可以占用一个范围(默认情况下这是当前行),例如整个缓冲区的 % 或突出显示的部分的 '<,'> . ^\s* 是正则表达式,用于匹配行的开头,后跟任意数量的空格,然后将其附加到(由于 & ) . . 此处用于字符串连接,因为 escape() 不能用引号括起来 . escape() 允许您通过在 \ 之前添加它们来转义 commentChar 中与参数匹配的字符(在本例中为 \/ ) . 在此之后,我们再次与 substitute 字符串的结尾连接,该字符串具有 e 标志 . 这个标志让我们无声地失败,这意味着如果我们在给定的行上找不到匹配,我们就不会对此大喊大叫 . 总的来说,这一行让我们在第一个文本之前放置一个注释字符后跟一个空格,这意味着我们保持缩进级别 .

    • execute '''<,''>s/\v(^\s*)'.escape(b:commentChar, '\/').'\v\s*/\1/e' :这与我们上一次巨大的长命令类似 . 这个独有,我们有 \v ,这确保我们不必逃避 ()1 ,这是指我们用 () 制作的组 . 基本上,我们匹配一行以任何数量的空格开头,然后我们的注释字符后跟任意数量的空格,我们只保留第一组空格 . 同样,如果我们在该行上没有注释字符, e 让我们无声地失败 .

    • let l:line=getpos("'<")[1] :这设置了一个变量,就像我们使用注释字符一样,但 l 指的是本地范围(此函数的本地范围) . 在这种情况下, getpos() 获取我们突出显示的开始位置, [1] 表示我们只关心行号,而不是列号等其他内容 .

    • if match(getline(l:line), '^\s*'.b:commentChar)>-1 :你知道 if 是如何工作的 . match() 检查第一件事是否包含第二件事,因此我们 grab 我们开始突出显示的行,并检查它是否以空格开头,后跟我们的注释字符 . match() 返回此为真的索引,如果未找到匹配则返回 -1 . 由于 if 评估所有非零数字为真,我们必须比较输出以查看它是否大于-1 . vim 中的比较如果为false则返回0,如果为真则返回1,这是 if 想要正确评估的内容 .

    • vnoremap <silent> <C-r> :<C-u>call Comment()<cr><cr>vnoremap 表示在可视模式下映射以下命令,但不要更改可能以其他方式使用的任何其他命令 . 基本上,如果你是一个vim新手,总是使用 noremap 来确保你不会破坏东西 . <silent> 表示"I don't want your words, just your actions"并告诉它不要在命令行中打印任何内容 . <C-r> 是我们要映射的东西,在这种情况下是ctrl r(请注意,在这种映射的正常模式下,你仍然可以正常使用C-r用于"redo") . C-u 有点令人困惑,但基本上它确保你不会忘记你的视觉突出显示(根据this answer它使你的命令以 '<,'> 开始,这是我们想要的) . call 这里只是告诉vim执行我们命名的函数, <cr> 指的是按 enter 按钮 . 我们必须打一次实际上调用函数(否则我们只是在命令行上键入 call function() ,我们必须再次点击它以让我们的替代品一直通过(不确定为什么,但无论如何) .

    无论如何,希望这会有所帮助 . 这将使用 vVC-v 突出显示任何内容,检查第一行是否被注释,如果是,则尝试取消注释所有突出显示的行,如果没有,则为每行添加额外的注释字符层 . 这是我理想的行为;我不只是想让它切换块中的每一行是否都被评论过,所以在关于这个主题的问题之后,它对我来说是完美的 .

  • 22

    这是基于 C-v 的基本单线程,后面是 I 方法 .

    This command (:Comment) adds a chosen string to the beginning of any selected lines.

    command! -range -nargs=1 Comment :execute "'<,'>normal! <C-v>0I" . <f-args> . "<Esc><Esc>"
    

    将此行添加到 .vimrc 以创建一个接受单个参数的命令,并将参数放在当前选择中每行的开头 .

    例如 . 如果选择以下文本:

    1
    2
    

    并运行: :Comment // ,结果将是:

    //1
    //2
    
  • 2

    在我前面有30个答案,我将尝试提供一个更简单的解决方案:在行的开头插入一个 # . 然后沿着一条线按下点( . ) . 要重复,请执行 j.j. 等...要取消注释,请删除 # (可以通过 # 点击 x ),然后使用 k. 等执行相反操作...

  • 9

    我使用vim 7.4,这对我有用 .
    假设我们正在评论/取消注释3行 .

    评论:

    如果该行在开头没有制表符/空格:
    ctrl + V 然后 jjj 然后 shift + I (cappital i) 然后 // 然后 esc esc
    如果该行在开头有标签/空格,您仍然可以执行上述操作或交换 c
    ctrl + V 然后 jjj 然后 c 然后 // 然后 esc esc

    取消注释:

    如果行开头没有制表符/空格:
    ctrl + V 然后 jjj 然后 ll (lower cap L) 然后 c

    如果这些行在开头有空格/空格,那么你将空格一个和 esc
    ctrl + V 然后 jjj 然后 ll (lower cap L) 然后 c 然后 space 然后 esc

  • 4

    您可以使用tpope(https://github.com/tpope/vim-commentary)的vim-comment来使用它,如下所示:

    按下进入可视模式

    'v'
    

    然后按

    'j' repeatedly or e.g 4j to select 4 row
    

    现在您只需输入键即可完成选择:

    'gc'
    

    这将注释掉所有选择,取消注释重复键:

    'gc'
    
  • 5

    有时我被绑在一个远程盒子里,我的插件和.vimrc无法帮助我,或者有时候NerdCommenter弄错了(例如嵌入HTML中的JavaScript) .

    在这些情况下,一个低技术替代方案是内置 norm 命令,它只在指定范围内的每一行运行任意vim命令 . 例如:

    Commenting with #

    1. visually select the text rows (using V as usual)
    2. :norm i#
    

    这会在每行的开头插入"#" . 请注意,当您键入:范围将被填充,所以它看起来真的像 :'<,'>norm i#

    Uncommenting #

    1. visually select the text as before (or type gv to re-select the previous selection)
    2. :norm x
    

    这将删除每一行的第一个字符 . 如果我使用了诸如//之类的2-char注释,那么我只需要 :norm xx 删除两个字符 .

    如果评论在OP的问题中缩进,那么您可以锚定您的删除,如下所示:

    :norm ^x
    

    这意味着“转到第一个非空格字符,然后删除一个字符” . 请注意,与块选择不同,即使注释具有不均匀的缩进,此技术也可以工作!

    注意:由于 norm 实际上只是执行常规vim命令,因此您不仅限于注释,还可以对每一行进行一些复杂的编辑 . 如果您需要将转义字符作为命令序列的一部分,请键入ctrl-v然后点击转义键(或者更简单,只需记录一个快速宏,然后使用norm在每一行上执行该宏) .

    注意2:如果你发现自己经常使用 norm ,你当然也可以添加一个映射 . 例如,将以下行放在〜/ .vimrc中,可以在进行视觉选择后键入 ctrl-n 而不是 :norm

    vnoremap <C-n> :norm
    

    注3:Bare-bones vim有时没有编译成 norm 命令,所以一定要使用增强版本,即通常是/ usr / bin / vim,而不是/ bin / vi

    (感谢@Manbroski和@rakslice对此答案的改进)

  • 6

    这个简单的片段来自我的.vimrc:

    function! CommentToggle()
        execute ':silent! s/\([^ ]\)/\/\/ \1/'
        execute ':silent! s/^\( *\)\/\/ \/\/ /\1/'
    endfunction
    
    map <F7> :call CommentToggle()<CR>
    

    它适用于// - 评论,但您可以轻松地适应其他角色 . 您可以使用autocmd将领导者设置为jqno建议 .

    这是一种非常简单有效的方式,可以自然地使用范围和视觉模式 .

  • 6

    一世为此使用vim-multiple-cursors .

    • 要选择区域,请按0(它为零,不是字母"o")转到要注释掉的区域的第一行或最后一行的第一个字符 . 然后按V并使用J,K或向上和向下箭头键选择区域 .

    • 然后按CtrlN将虚拟光标放在选择的每一行上 .

    • 然后按I同时编辑选择的每一行 .

  • 4

    我的 .vimrc 中有以下内容:

    " Commenting blocks of code.
    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 = '" '
    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 来取消注释一行(在正常模式和可视模式下都可以) .

    (我多年前从某个网站偷了它,所以我不能完全解释它是如何工作的:) . 有一个comment在哪里解释 . )

  • 2

    我是这样做的:

    • 转到要注释掉的第一行的第一个字符 .

    • 在GVIM中按Ctrl键q或在VIM中按Ctrl键,然后向下键选择要注释掉的行上的第一个字符 .

    • 然后按c,添加注释字符 .

    取消注释以相同的方式工作,只需键入空格而不是注释字符 .

  • 3

    我结合了Phil和jqno的回答,并用空格做了无聊的评论:

    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 = '"'
    function! CommentToggle()
        execute ':silent! s/\([^ ]\)/' . b:comment_leader . ' \1/'
        execute ':silent! s/^\( *\)' . b:comment_leader . ' \?' . b:comment_leader . ' \?/\1/'
    endfunction
    map <F7> :call CommentToggle()<CR>
    
  • 7

    从这里的答案中的想法开始,我开始了自己的评论功能 . 它会打开和关闭评论 . 它可以处理像 //print('blue'); //this thing is blue 之类的东西,只是切换第一条评论 . 此外,它在第一个非空白区域添加注释和单个空格,而不是在行的开头 . 另外,它不会不必要地复制空白,但是在评论和缩进行时使用缩放(: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>
    
  • 160

    我使用comments.vim from Jasmeet Singh Anand(在vim.org上找到),

    它适用于C,C,Java,PHP [2345],proc,CSS,HTML,htm,XML,XHTML,vim,vimrc,SQL,sh,ksh,csh,Perl,tex,fortran,ml,caml,ocaml, vhdl,haskel和普通文件

    它在正常和可视模式下对不同源文件中的行进行注释和取消注释

    用法:

    • CtrlC到 comment 单行

    • CtrlX到 un-comment 单行

    • ShiftV并选择多行,然后按CtrlC注释所选的多行

    • ShiftV并选择多行,然后按CtrlX取消注释选定的多行

  • 235

    我喜欢使用tcomment插件:http://www.vim.org/scripts/script.php?script_id=1173

    我已经映射了gc和gcc来注释一行或突出显示的代码块 . 它检测文件类型并且工作得很好 .

  • 28

    是的,这个问题已经有33个(主要是重复的)答案 .

    这是另一种如何在Vim中注释掉行的方法: motions . 基本思想是使用与通过键入 yip 或通过键入 dj 删除2行来删除段落相同的方法来注释或取消注释行 .

    这种方法可以让你做到这样的事情:

    • ccj 评论下两行,并 cuk 取消注释;

    • cci{ 将一个块注释掉,并 cui{ 取消注释;

    • ccip 评论整个段落, cuip 取消注释 .

    • ccG 将所有内容评论到最后一行,并 cugg 取消注释到第一行的所有内容 .

    您只需要 operate over motions 的2个函数,以及每个函数的2个映射 . 首先,映射:

    nnoremap <silent> cc  :set opfunc=CommentOut<cr>g@
    vnoremap <silent> cc  :<c-u>call  CommentOut(visualmode(), 1)<cr>
    nnoremap <silent> cu  :set opfunc=Uncomment<cr>g@
    vnoremap <silent> cu  :<c-u>call  Uncomment(visualmode(), 1)<cr>
    

    (请参阅有关 g@ 运算符和 operatorfunc 变量的手册 . )

    而现在的功能:

    function! CommentOut(type, ...)
      if a:0
        silent exe "normal!  :'<,'>s/^/#/\<cr>`<"
      else
        silent exe "normal!  :'[,']s/^/#/\<cr>'["
      endif
    endfunction
    
    function! Uncomment(type, ...)
      if a:0
        silent exe "normal!  :'<,'>s/^\\(\\s*\\)#/\\1/\<cr>`<"
      else
        silent exe "normal!  :'[,']s/^\\(\\s*\\)#/\\1/\<cr>`["
      endif
    endfunction
    

    修改上面的正则表达式,以满足您对 # 应该在哪里的品味:

  • 22

    How to uncomment the following three lines in vi:

    #code code
    #code
    #code code code
    

    将光标放在左上角的 # 符号上,然后按CtrlV . 这使您处于可视阻止模式 . 按向下箭头或J三次以选择所有三条线 . 然后按D.所有评论都消失了 . 要撤消,请按U.

    How to comment the following three lines in vi:

    code code
    code
    code code code
    

    将光标放在左上角的字符上,按CtrlV . 这使您处于可视阻止模式 . 按↓或J三次以选择所有三条线 . 然后按:

    I // Esc键

    这是资本I,//和Escape .

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

  • 1888

    Specify which lines to comment in vim:

    显示行号:

    :set number
    

    然后

    :5,17s/^/#/     this will comment out line 5-17
    

    或这个:

    :%s/^/#/        will comment out all lines in file
    
  • 48

    我用的是NERD Commenter script . 它可以让您轻松评论,取消注释或切换代码中的注释 .

    如_111761中所述:

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

  • 703

    对于那些我大部分时间都在使用block selection的任务 .

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

    对于评论文本块几乎是相同的:

    • 首先,转到要评论的第一行,按CtrlV . 这将使编辑器处于 VISUAL BLOCK 模式 .

    • 然后使用箭头键和选择直到最后一行

    • 现在按ShiftI,将编辑器置于 INSERT 模式,然后按# . 这将向第一行添加哈希 .

    • 然后按Esc(给它一秒钟),它将在所有其他选定行上插入 # 字符 .

    对于默认情况下随debian / ubuntu一起提供的精简版vim,请在第三步中键入 : s/^/# .

    这是两个用于视觉参考的小屏幕录制 .

    评论:

    取消注释:

  • 9

    它们中最快捷,最直观的方法是将 ) 重新映射为行的逐行注释,然后重新编号 ( 以便取消注释 . 尝试一下,你就不会回去了 .

    RubyBash 中,有2个空格的缩进:

    map ) I# <Esc>j
    map ( k^2x
    

    C/C++PHP 中,有4个空格的缩进:

    map ) I//  <Esc>j
    map ( k^4x
    

    缺点是你会因为句子移动而丢失 () (但是 das 可以在那里填写),并且你偶尔会回到选择和替换或CtrlV来处理长段 . 但这种情况非常罕见 .

    对于C风格,长评论最好用以下方式处理:

    set cindent
    set formatoptions=tcqr
    

    ...结合使用 V[move]gq 来重做自动换行 .

  • 3

    我已经想出了一个简单的添加到我的.vimrc文件,该文件运行良好,可以轻松扩展 . 您只需向comment_map及其评论 Headers 添加新的文件类型即可 .

    我添加了正常和可视模式的映射,但您可以重新映射到您喜欢的任何内容 . 我更喜欢只有'切换'风格的功能 . 一个熊有多个映射等 .

    let s:comment_map = { 
        \   "c": '\/\/',
        \   "cpp": '\/\/',
        \   "go": '\/\/',
        \   "java": '\/\/',
        \   "javascript": '\/\/',
        \   "lua": '--',
        \   "scala": '\/\/',
        \   "php": '\/\/',
        \   "python": '#',
        \   "ruby": '#',
        \   "rust": '\/\/',
        \   "sh": '#',
        \   "desktop": '#',
        \   "fstab": '#',
        \   "conf": '#',
        \   "profile": '#',
        \   "bashrc": '#',
        \   "bash_profile": '#',
        \   "mail": '>',
        \   "eml": '>',
        \   "bat": 'REM',
        \   "ahk": ';',
        \   "vim": '"',
        \   "tex": '%',
        \ }
    
    function! ToggleComment()
        if has_key(s:comment_map, &filetype)
            let comment_leader = s:comment_map[&filetype]
            if getline('.') =~ "^\\s*" . comment_leader . " " 
                " Uncomment the line
                execute "silent s/^\\(\\s*\\)" . comment_leader . " /\\1/"
            else 
                if getline('.') =~ "^\\s*" . comment_leader
                    " Uncomment the line
                    execute "silent s/^\\(\\s*\\)" . comment_leader . "/\\1/"
                else
                    " Comment the line
                    execute "silent s/^\\(\\s*\\)/\\1" . comment_leader . " /"
                end
            end
        else
            echo "No comment leader found for filetype"
        end
    endfunction
    
    
    nnoremap <leader><Space> :call ToggleComment()<cr>
    vnoremap <leader><Space> :call ToggleComment()<cr>
    

    注意:

    我't use any callbacks or hooks into the file types/loading, because I find they slow down Vim'的启动比 .vimrc 静态函数/映射更多,但's just my preference. I'也试图保持简单和高效 . 如果您确实使用自动命令,则需要确保将它们放在自动命令组中,否则回调会在每个文件加载时多次添加到文件类型,从而导致性能大幅下降 .

  • 3

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

  • 2

    我用EnhancedCommentify . 它评论我需要的一切(编程语言,脚本,配置文件) . 我使用它与视觉模式绑定 . 只需选择要评论的文本,然后按co / cc / cd即可 .

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

    这个改变生命的插件由 tpope 称为 vim-commentary

    https://github.com/tpope/vim-commentary

    This plugin provides

    • 理智

    • 正确缩进评论

    • 不会注释掉空/不必要的行

    Usage

    • 通过Vundle安装(或者我想是病原体) .

    • 突出显示您的文字并按:这将显示为 :<,'>

    • 在此处输入评论 :<,'>Commentary 并按Enter键 .

    • 轰隆 . 你做完了 .

  • 4

    在vim中注释掉块:

    • 按Esc(退出编辑或其他模式)

    • 点击ctrl v(可视块模式)

    • 使用向上/向下箭头键选择你想要的行(它赢了't highlight everything - it' s OK!)

    • Shift i(资本I)

    • 插入您想要的文字,即 %

    • 按EscEsc


    要取消注释vim中的块:

    • 按Esc(退出编辑或其他模式)

    • 点击ctrl v(可视块模式)

    • 使用↑/↓箭头键选择要取消注释的行 .

    如果要选择多个字符,请使用一个或组合这些方法:

    • 使用左/右箭头键选择更多文本

    • 选择文本块使用shift←/→箭头键

    • 你可以反复按下面的删除键,就像常规的删除按钮一样

    • 如有必要,请按d或x删除字符

  • 14

    我标记了第一行和最后一行(ma和mb),然后执行:'a,'bs / ^#//

  • 3

    切换评论

    如果你需要的只是 toggle comments ,我宁愿和commentary.vim一起去commentary.vim .

    安装

    病原:

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

    VIM插头:

    Plug 'tpope/vim-commentary'
    

    Vundle:

    Plugin 'tpope/vim-commentary'
    

    进一步定制

    将其添加到.vimrc文件中: noremap <leader>/ :Commentary<cr>

    您现在可以按 Leader / 切换注释,就像Sublime和Atom一样 .

  • 93

    我使用Tim Pope的vim-commentary插件 .

相关问题