Как добавить символы в непустые строки с помощью vim

#vim

#vim

Вопрос:

У меня есть текстовый документ, в котором есть пустые строки и строки, начинающиеся с заглавных букв месяцев.

Я хочу добавить «- » в начало каждой непустой строки.

Пробовал это:

 1,$s/^[A-Z]/- / 
  

и это удаляет первую букву месяца (например, «- une», когда это должно быть «- June»)
Как я могу добавить эту букву обратно? Или есть «лучший» способ сделать это для большого документа, где мне нужно сохранить пустые строки нетронутыми.

Ответ №1:

попробуйте это, это должно дать то, что вы хотите

 %s/^[A-Z]/- amp;/
  

или используйте :g :

 :g/^[A-Z]/s/^/- /
  

Комментарии:

1. Или, если это легче запомнить, это почти то же самое, что amp; в заменяющей части.

2. vimgolf: если строки действительно пустые, мы можем просто использовать . so :%s/^./- amp;

Ответ №2:

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

 %s/^[A-Z]@=/- /
  

или

 %s/^ze[A-Z]/- /
  

Смотрите :help zero-width , :help /@= :help /ze .

Комментарии:

1. оба ответа работают, я ценю указания на помощь и объяснение в этом.