Zamień wzór na bieżący numer linii


16

Chciałbym zastąpić „x” w tym pliku bieżącym numerem wiersza. To znaczy zmiana

x
x
x

do

1
2
3

Na razie używam jedno liniowego Perla:

perl -pi -e '$x=$.; s/x/$x/' myfile.txt

Myślę, że UltraEdit może to zrobić za pomocą pionowego wyboru i zamiany. Czy można to zrobić w vimie? (Mój przykład tutaj zakłada, że ​​„x” to wszystko, co jest w jednej linii. Ale linie w moim prawdziwym pliku są znacznie bardziej skomplikowane.)

Odpowiedzi:


24

Tak, vim może to zrobić! Wykonaj globalne wyszukiwanie xi zamień je na \=printf("%d", line('.'). Na przykład:

:%s/x/\=printf("%d", line('.'))

W xrazie potrzeby możesz także przejść do innego wyszukiwania.

Wyjaśnienie:

To zastępuje każde wystąpienie x(lub cokolwiek, czego szukasz) rejestrem oceny \=. Ten rejestr ocenia kod vimscript i zwraca ciąg znaków. W tym przypadku oceniany kod to „Drukuj wiersz, w którym się znajdujemy, jako liczbę dziesiętną”


9

Ponieważ wspomniałeś o pionowym wybieraniu i zastępowaniu, możesz to również zrobić. Użyj, CtrlVaby zrobić, wybierz blokadę tekstu, który chcesz zastąpić, a następnie cwpisz 0, aby zastąpić go zerami. Następnie wybierz te 0:

wprowadź opis zdjęcia tutaj

Następnie naciśnij g<c-a>( g+ Ctrla):

wprowadź opis zdjęcia tutaj

Jeśli zastąpiłeś jedną kolumnę, możesz użyć, gvaby szybko ponownie wybrać ten sam obszar.

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.