Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Vim,删除一个正则表达式中的空白行和注释行_Regex_Vim - Fatal编程技术网

Regex Vim,删除一个正则表达式中的空白行和注释行

Regex Vim,删除一个正则表达式中的空白行和注释行,regex,vim,Regex,Vim,我想一次删除空白和注释行。我已经发现了关于删除空行的类似问题,因此对于空行,我使用: :g/^$/d 对于注释行: :g/^#/d 我很好奇有没有办法把这些正则表达式合并成一个?差不多 :g/^[$#]/d 但显然它在vim中不起作用。您可以尝试以下命令: :g/^\(#\|$\)/d 或 $匹配[…]内的文字“$”(键入:help/$以获取帮助) \\\124;用于替换 \v非常神奇(最小反斜杠转义) 尝试以下操作: :g/^$/d | /^#/d 用于同时组合多个命令。您可以将

我想一次删除空白和注释行。我已经发现了关于删除空行的类似问题,因此对于空行,我使用:

:g/^$/d
对于注释行:

:g/^#/d
我很好奇有没有办法把这些正则表达式合并成一个?差不多

:g/^[$#]/d

但显然它在vim中不起作用。

您可以尝试以下命令:

:g/^\(#\|$\)/d


  • $
    匹配[…]内的文字“$”(键入
    :help/$
    以获取帮助)
  • \\\124;
    用于替换
  • \v
    非常神奇(最小反斜杠转义)
尝试以下操作:

:g/^$/d | /^#/d

用于同时组合多个命令。

您可以将正则表达式模式与“or”运算符组合:
\\\
,例如:

:g/^\(#.*\|$\)/d
:g /^#/d | /^$/d
不过,在这种特殊情况下,您实际上只需要指定
#.*
是可选的,例如:

:g/^\(#.*\)\?$/d
最后,请注意,您可以使用VIM的(而不是regex的)“pipe”操作符将大多数命令链接在一起,也可以使用
,例如:

:g/^\(#.*\|$\)/d
:g /^#/d | /^$/d

另一种解决方法是保留未注释的行:

:g/^#/d

:g/^[^#]/d

扩展KEV答案:
如果任何人也想删除选项卡式配置文件中的注释,
例如:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;
    ...
您可以尝试以下方法:

:g/\v^(#|$|\t#)/d

不能通过管道传输到
g
,但
g
适用于管道中的所有命令。因此,最好将其写成
:g/^$/d |/^#/d
这里我建议的唯一一件事是在
d
操作符后添加下划线,将删除的行发送到黑洞寄存器。这样:
:g/\v^(#|$)/d
如果文件很大,速度会明显加快。此外,删除的注释可能不需要用于后续粘贴,那么为什么要保留它们呢