3

У меня есть список, как показано ниже:

words
more words
here's more

skip space
words here
bananza!


D: look
more spaces
and words!

Как я могу вставить вещи в начале только тех строк с текстом? :%norm 0i* поместит * просто отлично, но поскольку он выполняет все строки, он также получает пустые строки. Есть ли способ сделать это, не возвращаясь и не убирая эти пробелы (я знаю, что они будут просто *, так что это не должно быть трудно сделать, но это дополнительная работа)

2 ответа2

6

Примерно так должно работать:

:%s/^\(.*[^\n]\)$/* \1/

РЕДАКТИРОВАТЬ Так как вы попросили разбить регулярное выражение:

:% Все строки

s/ Начало замещающей команды; начать шаблон

^ Начало строки

\( Начало группы мы хотим сохранить. Это будет важно позже.

.* Любое количество символов

[^\n] Некоторые символы кроме новой строки

\) Конец группы

$ Конец строки

/ Конец шаблона, начало замещения

* \1 Вставьте * , затем первую группу, которую мы выбрали слева.

/ Конец замены и команды

3

Пытаться

:g/\S/s/^/* /

g/\S/ - оператор диапазона (аналог % за исключением того, что он выбирает все строки с непустым символом).

s/^/* / вставляет «*» в начале каждой выбранной строки.

Это позволяет избежать проблемы, связанной с ответом @ objectified о введении префикса в 1-ю строку последовательности из двух пустых строк.

Следующее добавляет "*" в конце каждой выбранной строки.

:g/\S/s/$/ */

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .