Не влияет на первую строку
Пример вывода выглядит так, что не должно быть новой строки перед первой строкой в файле.
Вы можете добавить проверку lookbehind , чтобы достичь этого.
:%s/^\n\@<=\ze\s*#/\r/
\n\@<=
Соответствует только в том случае, если перед текущей позицией стоит новая строка, поэтому первая строка не будет соответствовать. Для получения дополнительной информации см :h \@<=
Это также можно сделать с помощью проверки строки . Следующее регулярное выражение соответствует только тем строкам, которые не являются первой.
:%s/^\%>1l\ze\s*#/\r/
\%>1
Соответствует строке 1. См. :h \%>l
<ч />
Вот кое-что, что должно работать с обновленным вопросом, то есть только добавлять новую строку перед текущей строкой, если нет строки комментариев перед .
:g/^\%^\@<!\(^\s*#.*\n\)\@<!\s*#/norm O
^\%^\@<!
Не сопоставлять эту строку, если начало файла находится перед ней. :h \%^
и: ч \@<!
\(^\s*#.*\n\)\@<!
Соответствует этой строке, только если первый непустой символ в предыдущей строке не является #.
Это регулярное выражение изменится
#comment 1
#comment 2
statement 1
statement 2
#comment 3
до
#comment 1
#comment 2
statement 1
statement 2
#comment 3