我希望一次性删除空白和注释行。我已经找到了有关删除空白行的类似问题,对于空白行,我使用以下代码:
:g/^$/d
对于已注释的行:
:g/^#/d
我很好奇是否有办法将这些正则表达式合并为一个?类似于
:g/^[$#]/d
但显然在vim中不起作用。
您可以尝试使用此命令:
:g/^\(#\|$\)/d
或者:g/\v^(#|$)/d
$
可以在 [...] 中匹配字面字符 '$' (输入 :help /$
获取帮助)\|
用于交替选择\v
是非常魔法的(使用最少的反斜杠转义):g!/^[^#]/d
\|
来组合正则表达式模式,例如::g/^\(#.*\|$\)/d
#.*
是可选的,例如::g/^\(#.*\)\?$/d
最后要注意,您可以使用VIM的“管道”运算符(而不是正则表达式)将大多数命令链接在一起,例如:|
:g /^#/d | /^$/d
:g/^$/d | /^#/d
< p > |
用于同时组合多个命令。
g
管道,但g
适用于管道中的所有命令。因此,更好的写法是:g /^$/d | /^#/d
。 - Will Palmer在 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
d
操作符后添加下划线将已删除的行发送到黑洞寄存器。就像这样::g/\v^(#|$)/d_
如果文件很大,这会明显更快。而且,已删除的注释可能不需要用于后续粘贴,为什么要保留它们呢? - Peter Perháč