2014-01-25 42 views

回答

1

其他一些答案提到了插件。我目前使用NERD commenter,它提供了一个ci(评论反转)命令,可以做你想做的。

对于初学者,这里有几种方法可以避免评论已经评论过的行。为了简单起见,我将假定注释字符都在第一列。任何一个都接受一个范围,例如你的问题中的可视范围'<,'>

:s#^\(// \)\@!#// # 
:v#^// #s!^!// ! 

OK,如果你真的想要的切换线是否被注释掉一个命令,那么你必须捕捉线是初始评价,然后用表达式替换:

:%s!^\(// \|\)!\=strpart('// ', strlen(submatch(1))) 

 

:help /\(
:help /\@! 
:help :g 
:help sub-replace-expression 
+0

谢谢,命令不正是我想要的,但我已经决定要使用插件通过几个问题的答案的建议。 – justindeguzman

0

好,我怀疑你可以只使用一个正则表达式做到这一点,这就是为什么蒂姆教皇写了一个扩展对于究竟

然后你必须do是gc来评论一条线或一个视觉选择,并gc来取消注释它!

0

有几种插件可用于评论和取消注释跨多种语言的代码。话虽如此,你可能会想在这种情况下使用两个单独的正则表达式。例如,假设我有一些代码...

var x = 5; 

// Does stuff 5 times 
for (var i = 0; i < x; i++) { 
    // stuff 
} 

当我运行表示,这正则表达式我不想让已经注释行是注释。所以最好做类似的事情,但反过来(例如:'<,'>s!^// !!)。

此外,\ze\zs运算符在这里可以用来保留空白。而:*:'<,'>的快捷方式。比如我可以做

:*s!^\s*\zs// !! 

这将只删除字符//从与他们或与他们之前的空格开头的行。

1

我使用的一个肮脏但非常灵活的技巧是利用:normal命令,该命令将模拟您在给定范围内给出的按键顺序。

例如,要发表评论,请选择你的整个行视觉模式(使用V)并输入命令:

:normal i// 

这是安静不言自明:i打开编辑模式,并且//它写入(因为你进入了编辑模式);该命令将应用于每条选定的行,并将光标定位到该行的开头(因为我们选择了整行V而不是v;否则它会变得棘手)。有了同样的想法,你可以删除评论使用可视化的选择:

:normal xx 

(这不正是它说:删除前两个字符,你可以键入键盘上)。

有这种方法的优点几个,其中包括:

  • 如果您使用不同的注释符号({ , /*, //, #, %)几种不同的语言,它只是一个改变一个笔画问题。
  • 你真的可以发挥创意与正常的命令,因为你可以利用该命令的范围标志,并从字面上做任何事情:

    :normal A //Hello world

  • 再次,感觉很自然的,因为你只是喂养一个带有按键的命令,您可以在选择时使用它。你甚至可以使用this技巧在模式之间切换。