在user-define命令中使用行号

时间:2014-01-31 02:15:03

标签: vim

我想设置简单的用户自定义命令,以便能够在VIM中一次注释掉多行。我试过这个

:command -range Cm :<line1>,<line2>s/^/##/

并如图所示调用

:Cm 11,14

但是收到错误Trailing Characters。也尝试使用-nargs = +替换-range,但仍然不起作用。任何人都可以帮助我,我在这里失踪了吗?

2 个答案:

答案 0 :(得分:6)

用户定义的命令以与其他Vim命令相同的方式接受范围。也就是说,它们来自命令行的开头。你想要执行

:11,14Cm

答案 1 :(得分:5)

vim中有许多好的插件可供评论,包括tCommentvim-commentary。但是,如果你想制作这样的自定义命令,这里是一个从以下开始的模板:

command! -range -nargs=* Cm <line1>,<line2>call Comment(<f-args>)
fun! Comment(...) range
   if a:firstline != a:lastline
      sil exe a:firstline . "," . a:lastline . "s/^/##/"
   else
      sil exe a:1 . "," . a:2 . "s/^/##/"
   endif
endfun

此命令采用范围或参数。允许它采用范围是有用的,因为您可能希望在视觉选择上操作命令。它将默认范围设置为当前行,然后说明当前行是否是我们正在操作的所有行,忽略给定的范围,而是查看给定的参数。