Vim, удаляя пустые и прокомментированные строки в одном регулярном выражении
Я хочу удалить пустую и прокомментированную выровненную за один раз. Я уже нашел аналогичный вопрос об удалении пустых строк, поэтому для пустых строк я использую:
:g/^$/d
и для прокомментированных строк:
:g/^#/d
Мне любопытно, есть ли способ объединить это регулярное выражение в одном? Что-то вроде
:g/^[$#]/d
но, очевидно, он не работает в vim.
Ответы
Ответ 1
Вы можете попробовать эту команду:
:g/^\(#\|$\)/d
или
:g/\v^(#|$)/d
-
$
соответствует буквенному '$' внутри [...] (введите :help /$
для справки)
-
\|
предназначен для чередования
-
\v
очень магия (минимальный побег с обратной косой чертой)
Ответ 2
Попробуйте следующее:
:g/^$/d | /^#/d
|
заключается в объединении нескольких команд в одно и то же время.
Ответ 3
Вы можете комбинировать шаблоны регулярных выражений с оператором "или": \|
, например:
:g/^\(#.*\|$\)/d
Хотя в этом конкретном случае вам просто нужно указать, что #.*
является необязательным, например:
:g/^\(#.*\)\?$/d
Наконец, имейте в виду, что вы можете объединить большинство команд с помощью оператора VIM (не регулярного выражения) "pipe", также |
, например:
:g /^#/d | /^$/d
Ответ 4
Другим способом решения этого вопроса является сохранение строк без комментариев:
:g!/^[^#]/d
Ответ 5
Расширение ответа на 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