Привет В Gvim я должен вставить пустую строку или два перед каждым комментарием в файле.
Например,
#comment 1
#comment 2
statement 1
statement 2
#comment 3
После выполнения команды это должно быть
#comment 1
#comment 2
statement 1
statement 2
#comment 3
Как я делаю это?
Спасибо
Обновление: Спасибо за ответы
Но если комментарии непрерывны, я не хочу, чтобы новая строка была добавлена промежуточная их. Существует ли способ сделать это?
например,
#comment 1
#comment 2
Я не делаю, чтобы хотеть, чтобы это было
#comment 1
#comment 2
Вы также можете использовать эту команду: : g / ^ # / norm O
Хорошо, вот объяснение:
Это сокращение от : global / ^ # / normal O
, что означает:
: global / ^ # /
) нормальный O
) - что означает делать то, что клавиша' O ' работает в «нормальном» (не вставке и не команде) режиме VIM. И «O» вставляет новую строку. Используйте эту команду: :% s / ^ \ ze \ s * # / \ r /
Еще один способ (работает и для 1-й строки)
:s/^[ TAB]*#-1s/^/\r/
есть решение, которое работает и в «неулучшенном vi»:
: 2, $ g / ^ [TAB] * # / s / ^ / ^ M /
где TAB и ^ M должны быть введенным как соответствующий управляющий символ.
Надеюсь, это поможет - и я благодарю Хейкки за указание на проблему 1-й строки
Не затрагивая первую строку
Пример вывода выглядит так, как будто перед первой строкой в файле не должно быть новой строки. Для этого можно добавить проверку lookbehind.
:%s/^\n\@<=\ze\s*#/\r/
\n\@<=
Совпадает только если перед текущей позицией есть новая строка, поэтому первая строка не будет совпадать. Для получения дополнительной информации смотрите :h \n\@<=
Это также может быть сделано с помощью проверки строки. Следующий regex соответствует только тем строкам, которые не являются первой строкой.
:%s/^\%>1l\ze\s*#/\r/
\%>1
Совпадает со строкой ниже первой. См. :h \%>l
Вот то, что должно работать с обновленным вопросом, то есть добавлять новую строку только перед текущей строкой, если перед ней нет строки комментария.
:g/^\%^\@
^\%^\@ Не используйте эту строку, если перед ней находится начало файла.
:h \%^
и :h \@
\(^\s*#.*\n\)\@Соответствует только этой строке, если первый непустой символ предыдущей строки не #.
Этот regex изменит
#comment 1 #comment 2 statement 1 statement 2 #comment 3
на
#comment 1 #comment 2 statement 1 statement 2 #comment 3