21

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

:g/^$/d

对于注释行:

:g/^#/d

我很好奇有没有办法将这些正则表达式合并为一个?就像是

:g/^[$#]/d

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

4

5 回答 5

29

你可以试试这个命令:

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

或者

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

  • $匹配 [...] 中的文字 '$'(输入:help /$帮助)
  • \|用于交替
  • \v非常神奇(最小的反斜杠转义)
于 2012-09-30T15:56:10.793 回答
5

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

:g!/^[^#]/d

于 2012-09-30T18:32:09.053 回答
4

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

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

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

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

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

:g /^#/d | /^$/d
于 2012-09-30T15:58:42.393 回答
3

尝试以下操作:

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

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

于 2012-09-30T15:58:07.897 回答
3

扩展 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
于 2017-11-14T11:12:27.413 回答