Regex 使用正则表达式在Vim中注释/取消注释
我正在尝试使用Regex 使用正则表达式在Vim中注释/取消注释,regex,vim,Regex,Vim,我正在尝试使用:“好吧,我怀疑你只能使用一个正则表达式,这就是为什么Tim Pope为此编写了一个扩展: 然后您所要做的就是gc注释一行或一个可视选择,然后gc取消注释它 有几个插件可以跨多种语言注释和取消注释代码。也就是说,在这种情况下,您可能需要使用两个单独的正则表达式。例如,假设我有一些代码 var x = 5; // Does stuff 5 times for ( var i = 0; i < x; i++ ) { // stuff } 这将仅从以字符开头的行或前面
:“好吧,我怀疑你只能使用一个正则表达式,这就是为什么Tim Pope为此编写了一个扩展:
然后您所要做的就是gc
注释一行或一个可视选择,然后gc
取消注释它 有几个插件可以跨多种语言注释和取消注释代码。也就是说,在这种情况下,您可能需要使用两个单独的正则表达式。例如,假设我有一些代码
var x = 5;
// Does stuff 5 times
for ( var i = 0; i < x; i++ ) {
// stuff
}
这将仅从以字符开头的行或前面有空格的行中删除字符。我使用的一个肮脏但非常通用的技巧是利用:normal
命令,该命令将模拟给定范围内的击键顺序
例如,要进行注释,请在视觉模式下选择整行(使用V
),然后输入以下命令:
:normal i//
这是不言自明的:i
打开编辑模式,然后/
写入它(因为您进入了编辑模式);该命令将应用于每一个选定的行,光标将定位到行的开头(因为我们选择了整行V
,而不是V
;否则会很棘手)。使用相同的想法,您可以使用以下方法删除对视觉选择的注释:
:normal xx
(这正是它所说的:删除前两个字符,就像您在键盘上键入的那样)
这种方法有几个优点,包括:
- 如果您使用几种不同的语言并使用不同的注释符号(
{、/*、//、#、%
),只需更改一个笔划即可
- 使用普通命令确实可以获得创造性,因为您可以利用命令范围内的标记,并实际执行任何操作:
:普通A//Hello world
- 同样,这感觉很自然,因为您只需输入一个命令,输入您将在选择中使用的按键。您甚至可以使用技巧在模式之间切换
其他一些答案提到了插件。我目前使用的插件提供了一个ci
(comment invert)命令,可以实现您想要的功能
对于初学者,这里有两种方法可以避免注释掉已经注释过的行。为简单起见,我假设注释字符都在第一列中。任何一个都接受一个范围,例如Visual range,谢谢,该命令完全符合我的要求,尽管我已经决定按照有几个答案。
:normal xx
:s#^\(// \)\@!#// #
:v#^// #s!^!// !
:%s!^\(// \|\)!\=strpart('// ', strlen(submatch(1)))
:help /\(
:help /\@!
:help :g
:help sub-replace-expression