Vim:添加注释宏

4

Vim对我来说几乎是完美的。但我仍然希望有行注释和块注释功能,我想知道如何编写一个vimrc文件,在python和javascript中实现这个功能。

不需要插件


你所说的块注释功能,是指使用可视模式选择一个代码块,然后在其周围添加注释吗?还是其他什么功能? - alesplin
是的,在可视模式下选择一个代码块,然后添加块注释。 - guilin 桂林
编辑了我的答案,包括一个函数,可以注释掉可视选定的代码块。 - alesplin
尽管OP特别要求行或块注释,但我认为我应该提到这个vimrc only脚本,它可以向函数添加类似javadoc的注释!https://dev59.com/9VzUa4cB1Zd3GeqP57dX#8026272 - puk
3个回答


3
如果你想要使用c样式的行注释(我认为在javascript中是合法的),你可以在你的.vimrc文件中设置以下内容,这将注释掉光标(在普通模式下)当前所在的行。
map \lo I/*<Esc>A*/<Esc>

如果您想添加Python注释,可以按照以下步骤操作:
map \lo I#<Esc>

如果你只想要一个语句,可以这样做:

if match(expand("%:t"), ".py") != -1
  map \lo I#<Esc>
else
  map \lo I/*<Esc>A*/<Esc>
endif

如果您正在编辑 .py 文件,则使用 # 注释,否则使用 /* ... */ 注释。

编辑:以下函数将通过检查文件类型以适当的样式注释来注释出一个可视选定的块。 然后,您可以将其映射到像下面的 vmap 语句这样简单的东西。

  function! BlockComment(top,bottom)

    " deal with filetypes that don't have block comments 
    let fileName = expand("%:t")
    echo fileName

    if fileName =~ "\.py" || fileName =~ "\.sh" || fileName =~ "\.pl"
        execute "normal I# "
        return
    elseif fileName =~ "\.vim"
        execute 'normal I" '
        return
    endif

    " for c-style block comments (should work for javascript)
    let topLine = line("'<")

    " the + 1 is because we're inserting a new line above the top line
    let bottomLine = line("'>") + 1

    " this gets called as a range, so if we've already done it once we need to
    " bail
    let checkLine = getline(topLine - 1)
    if (checkLine =~ '\/\*')
        return
    endif

    let topString = "normal " . topLine . "GO/*"
    let bottomString = "normal " . bottomLine . "Go*/"

    execute topString
    execute bottomString

  endfunction

  vmap <Leader>bco<CR> :call BlockComment()<CR>

请忽略奇怪的语法高亮。看起来语法高亮器不支持vimscript。


你是想在光标所在行评论,但怎样选择一个视觉块并将其注释掉呢? - guilin 桂林
我需要对此进行一些研究... :) - alesplin
我在我的vimrc文件中添加了map,但是如何使用它? - chovy
使用可视模式选择一段文本,然后使用<Leader>bco<CR>调用函数。<Leader>通常映射到<kbd></kbd>,而<CR>是<kbd>Enter</kbd>。因此,当您选择文本时,键入\bco然后按下Enter即可完成操作。 - alesplin

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接