我试图使用:'<,'>s!^!// !
在可视模式下注释突出显示的代码。是否可以编辑正则表达式,以便它在注释代码时取消注释?使用正则表达式在Vim中评论/取消注释
回答
其他一些答案提到了插件。我目前使用NERD commenter,它提供了一个ci
(评论反转)命令,可以做你想做的。
对于初学者,这里有几种方法可以避免评论已经评论过的行。为了简单起见,我将假定注释字符都在第一列。任何一个都接受一个范围,例如你的问题中的可视范围'<,'>
。
:s#^\(// \)\@!#// #
:v#^// #s!^!// !
OK,如果你真的想要的切换线是否被注释掉一个命令,那么你必须捕捉线是初始评价,然后用表达式替换:
:%s!^\(// \|\)!\=strpart('// ', strlen(submatch(1)))
:help /\(
:help /\@!
:help :g
:help sub-replace-expression
好,我怀疑你可以只使用一个正则表达式做到这一点,这就是为什么蒂姆教皇写了一个扩展对于究竟:
然后你必须do是gc
来评论一条线或一个视觉选择,并gc
来取消注释它!
有几种插件可用于评论和取消注释跨多种语言的代码。话虽如此,你可能会想在这种情况下使用两个单独的正则表达式。例如,假设我有一些代码...
var x = 5;
// Does stuff 5 times
for (var i = 0; i < x; i++) {
// stuff
}
当我运行表示,这正则表达式我不想让已经注释行是注释。所以最好做类似的事情,但反过来(例如:'<,'>s!^// !!
)。
此外,\ze
和\zs
运算符在这里可以用来保留空白。而:*
是:'<,'>
的快捷方式。比如我可以做
:*s!^\s*\zs// !!
这将只删除字符//
从与他们或与他们之前的空格开头的行。
我使用的一个肮脏但非常灵活的技巧是利用:normal
命令,该命令将模拟您在给定范围内给出的按键顺序。
例如,要发表评论,请选择你的整个行视觉模式(使用V
)并输入命令:
:normal i//
这是安静不言自明:i
打开编辑模式,并且//
它写入(因为你进入了编辑模式);该命令将应用于每条选定的行,并将光标定位到该行的开头(因为我们选择了整行V
而不是v
;否则它会变得棘手)。有了同样的想法,你可以删除评论使用可视化的选择:
:normal xx
(这不正是它说:删除前两个字符,你可以键入键盘上)。
有这种方法的优点几个,其中包括:
- 如果您使用不同的注释符号(
{ , /*, //, #, %
)几种不同的语言,它只是一个改变一个笔画问题。 你真的可以发挥创意与正常的命令,因为你可以利用该命令的范围标志,并从字面上做任何事情:
:normal A //Hello world
再次,感觉很自然的,因为你只是喂养一个带有按键的命令,您可以在选择时使用它。你甚至可以使用this技巧在模式之间切换。
- 1. 正则表达式使用Grails取代JavaScript注释评论
- 2. 评论正则表达式
- 3. Vim NERD-Commenter:如何取消注释第一级评论,而不取消注释嵌套评论?
- 4. 注释&正则表达式
- 5. 评论/取消注释vim中的多个固定行
- 6. vim 7.4在Vim中没有插件的评论/取消注释行
- 7. VIM正则表达式匹配直列评论
- 8. 使用正则表达式从git日志获取评论块
- 9. 设置CTRL + /评论和取消注释vim
- 10. 使用正则表达式在Javascript中删除HTML评论
- 11. 正则表达式不匹配评论
- 12. 正则表达式匹配的评论
- 13. 正则表达式匹配PHP评论
- 14. 正则表达式 - 匹配评论
- 15. 正则表达式的C#评论
- 16. 使用bash在gedit中评论和取消注释
- 17. vim的正则表达式解释
- 18. Xcode评论取消注释问题
- 19. 正则表达式在Dreamweaver注释css
- 20. ImageMagick - 使用正则表达式在for循环中注释?
- 21. 使用正则表达式在bash中删除XML注释
- 22. 评论/取消注释Eclipse中的特定格式
- 23. 评论/取消注释NetBeans快捷方式中的代码块
- 24. 提取PDF注释/评论
- 25. 正则表达式“Url”外部注释
- 26. C#正则表达式来注释console.log
- 27. 正则表达式的注释
- 28. 正则表达式排除注释
- 29. Php注释正则表达式
- 30. 使用JavaScript正则表达式来提取评论从在一个函数
谢谢,命令不正是我想要的,但我已经决定要使用插件通过几个问题的答案的建议。 – justindeguzman