Подтвердить что ты не робот

Vim, удаляя пустые и прокомментированные строки в одном регулярном выражении

Я хочу удалить пустую и прокомментированную выровненную за один раз. Я уже нашел аналогичный вопрос об удалении пустых строк, поэтому для пустых строк я использую:

:g/^$/d

и для прокомментированных строк:

:g/^#/d

Мне любопытно, есть ли способ объединить это регулярное выражение в одном? Что-то вроде

:g/^[$#]/d

но, очевидно, он не работает в vim.

4b9b3361

Ответ 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