Lubię używać globalnego polecenia vim do wykonywania takich zadań. Dotyczy to dodawania iteracji na początku linii lub modyfikowania symbolu w tekście. Wygląda na bardziej skomplikowane niż inne rozwiązania, ale jest dość elastycznym wzorem do użycia, gdy masz go pod ręką, i można go łatwo modyfikować bez zastanowienia.
Najpierw wybierz zakres (które linie chcesz zastosować). Zwykle używam znaków (np. maW pierwszym wierszu i mbw drugim, ale możesz także użyć numerów linii lub wyboru wizualnego), a następnie wprowadź modyfikację następującego polecenia (obecnie dostosowanego do twojego przypadku użycia)
:let i=1|'a,'bg/^/s/^/\=i.". "/|let i=i+1
Dekonstrukcja
:let i=1
To ustawia zmienną iz wartością początkową. Zwykle listy zaczynają się od 1, więc ustawiam i na 1.
|
Pasek rozpoczyna nowe polecenie
'a,'b
Ustawia zakres następnego polecenia. Przechodzę od znaku ado znaku b, który zostałby ustawiony w pierwszym wierszu i ostatnim wierszu listy.
g/^/
To jest polecenie globalne. Przeszukuje plik (lub zakres) pod kątem określonego wyrażenia regularnego i wykona resztę wiersza poleceń na każdym z pasujących wierszy. Dopasowuję każdą linię, szukając „początku linii”. Jeśli masz tekst podobny do
Item some txt
other text
Item second item
whatever
Item third
i chcę tylko umieścić te etykiety przed Itemi zignorować inne wiersze, zrób g/Item/lub g/^Item/zamiast (zakładając dosłowny tekst pozycji)
s/^/\=i.". "/
Spowoduje to wykonanie wyrażenia regularnego w celu zastąpienia początku wiersza wartością ikonkatenowaną przez a .. Zasadniczo możesz to zrobić w dowolny sposób (na przykład zastąp etykietę Itemnumerem).
|let i=i+1
Mimo że pasek rozpoczyna nowe polecenie, ustawia drugie polecenie do uruchomienia w ramach polecenia globalnego, zamiast po zakończeniu globalnego. W rezultacie zwiększamy, izanim kolejny wiersz zostanie przetworzony przez g. Oto inne miejsce elastyczności. Modyfikacja i może być dowolna (inkrementacja o 2, wywołanie funkcji, która generuje następny element sekwencji Fibonacciego, cokolwiek).
awkjest prawdopodobnie narzędziem do tego zadania. Ale jestem na Windowsie (westchnienie).