Powiedzmy, że mam następujący bardzo prosty plik
a
b
c
d
e
i zdecydowałem, że chcę dodać puste linie po każdej linii. Kilka różnych metod natychmiast przychodzi mi do głowy. Możemy to po prostu zrobić (a tym samym zaakceptować porażkę). Możemy nagrać makro qqo<ESC>jq
i powtórzyć je kilka razy.
Dwie inne metody wydawały mi się wtedy bardziej oczywiste.
Po pierwsze, pomyślałem, że wydam :norm
polecenie o
w każdej linii. Więc biegnę :%norm o
. Ale tak naprawdę dzieje się tak, że otrzymujemy 5 pustych linii, po których następują nierozdzielone linie, jak wyżej. Interpretuję to w ten sposób, że przez %norm
vim faktycznie odbiera problem z komunikatem następujące pierwsze polecenie w pierwszych pięciu wierszach tego pliku pięciu wierszy . o
Polecenie tworzy nową linię i vim jest „głupi” w tym sensie, że jest wykorzystywana przez numer linii i faktycznie nie za pośrednictwem innego identyfikatora.
Cóż, byłem zawstydzony. Pewnie. Próbowałem kilku innych rzeczy, aby sprawdzić, czy powyższa metoda działa, ale niestety nie mogłem. Z ciekawości wypróbowałem inną ulubioną metodę masowego nakładania. To skłoniło mnie do spróbowania :g/^/norm o
. Ku mojemu zdziwieniu to działa dobrze! Moim zdaniem wydaje się, że vim nie jest tutaj „głupi” w taki sam sposób jak powyżej i odwołuje się do linii po więcej niż tylko numerze linii.
Co się właściwie dzieje?
:%s/$/\r/
lub tak::%s/\n/\r\r/
. Na wynos można dopasować nowe wiersze\n
, ale należy je zapisać jak\r
w wartościach zastępczych.