在user-define命令中使用行号

ven*_*art 3 vim

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

:command -range Cm :<line1>,<line2>s/^/##/
Run Code Online (Sandbox Code Playgroud)

并如图所示调用它

:Cm 11,14
Run Code Online (Sandbox Code Playgroud)

但得到错误说Trailing Characters.也尝试使用-nargs = +替换-range,但仍然无效.谁能帮助我,我在这里失踪了?

jam*_*san 6

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

:11,14Cm
Run Code Online (Sandbox Code Playgroud)


Con*_*ner 5

在vim中有许多好的插件可供评论,包括tCommentvim- comment.但是,如果你想制作这样的自定义命令,这里有一个模板:

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
Run Code Online (Sandbox Code Playgroud)

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