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

时间:2012-09-30 15:52:14

标签: regex vim

我想一次删除空白和注释。我已经找到了关于删除空行的类似问题,所以对于我使用的空行:

:g/^$/d

和注释行:

:g/^#/d

我很好奇有没有办法合并这些正则表达式?像

这样的东西
:g/^[$#]/d

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

5 个答案:

答案 0 :(得分:22)

您可以尝试以下命令:

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

或者

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

  • $匹配[...]内的文字'$'(:help /$类型寻求帮助)
  • \|用于替换
  • \v非常神奇(最小的反斜杠转义)

答案 1 :(得分:4)

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

:g!/^[^#]/d

答案 2 :(得分:3)

尝试以下方法:

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

|可以同时组合多个命令。

答案 3 :(得分:3)

您可以将正则表达式与“或”运算符结合使用:\|,例如:

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

尽管如此,在这种特殊情况下,您实际上只需要指定#.*是可选的,例如:

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

最后,请注意,您可以将大多数命令与VIM(非正则表达式)“管道”运算符(也是|)链接在一起,例如:

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

答案 4 :(得分:1)

扩展kevs回答:
如果有人还想删除标签配置文件中的注释,
例如:

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