W vimie wstaw tylko wiersze z tekstem


3

Mam listę jak poniżej:

words
more words
here's more

skip space
words here
bananza!


D: look
more spaces
and words!

Jak mogę wstawiać rzeczy na początku tylko tych wierszy z tekstem? :%norm 0i*będzie *dobrze, ale ponieważ robi wszystkie linie, otrzymuje również puste linie. Czy jest jakiś sposób, aby to zrobić bez konieczności cofania się i usuwania tych pustych miejsc (wiem, że byłyby to tylko *, więc nie powinno być trudno, ale to dodatkowa praca)

Odpowiedzi:


6

Coś takiego powinno działać:

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

EDYCJA Ponieważ poprosiłeś o rozbicie wyrażenia regularnego:

:% Wszystkie linie

s/Początek polecenia zastępczego; rozpocząć wzór

^ Początek linii

\(Początek grupy chcemy zachować. Będzie to ważne później.

.* Dowolna liczba znaków

[^\n] Niektóre postacie oprócz nowej linii

\) Koniec grupy

$ Koniec linii

/ Koniec wzoru, początek podstawienia

* \1Wstaw *, a następnie pierwszą grupę, którą wybraliśmy po lewej stronie.

/ Koniec zamiany i polecenia


To zadziałało! : D Czy możesz jednak wyjaśnić, jak to działa? Nie jestem świetny w wyrażeniach regularnych (czytaj, nie znam żadnych), ale chciałbym móc to „dostać”. Dzięki!
Rob

W rzeczywistości chwyta pierwszą z podwójnie pustych linii. D: Zobaczę jednak, czy to tylko moja wina. EDYCJA: nie, najwyraźniej pusta linia z pustą linią pod nią nie jest pusta. D:
Rob

s // jest oparty na linii; nie mogłeś po prostu zrobić s/^\(.\+\)$/* \1/?
Christian Mann,

4
To zbyt skomplikowane, działa::% s /^./* & /
Heptite

1
@Heptite, puste linie składające się ze spacji również pasują. Prawdopodobnie najlepiej określić tylko wiersze, które zawierają niepusty znak, używając/.*\S.*/
Firstrock

3

Próbować

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

g/\S/jest operatorem zakresu (analogicznie do %tego, że zaznacza wszystkie wiersze znakiem niepustym).

s/^/* / wstawia „*” na początku każdej wybranej linii.

Pozwala to uniknąć problemu z odpowiedzią @ objectified na umieszczenie prefiksu w pierwszym wierszu sekwencji podwójnie pustych wierszy.

Następujące znaki dołączają „*” na końcu każdej wybranej linii.

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

Dzięki! Są świetne i wymyśliłem kilka rzeczy, bawiąc się nimi!
Rob
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.