Wklej łańcuch formatowania lub wklej z zastąpieniem

0

Czy w Vim mogę dostarczyć ciąg formatujący, szarpnąć go i wkleić z sformatowanymi wartościami w zakresie ?. Przykładem w Pythonie 2 byłoby:

dla i w zakresie (1, 3): print "To jest linia% d"% i

Jeśli nie jest to możliwe w Vimie, czy byłoby tak w Emacsie lub innym edytorze?

doubleshot
źródło

Odpowiedzi:

0

Nie jest dla mnie całkowicie jasne, co chcesz, ale w Vimie możesz zrobić coś takiego:

:for i in range(line('$')) | call append(i+i, printf("this is line %d:", i+1)) | endfor

Powód, dla którego używam i+i „jest tak, ponieważ linie są wstawiane do bufora, numery linii zmieniają się, a to poprawia to. (Jeśli masz inny„ punkt początkowy ”w swoim zakresie, twój algorytm korekty będzie musiał być bardziej skomplikowany.)

Lub jeśli chcesz zmodyfikować istniejące linie w buforze:

:for i in range(1, line('$')) | call setline(i, printf("this is line %2d: %s", i, getline(i))) | endfor

Oczywiście, jeśli nie chcesz zmieniać bufora, ale po prostu wydrukujesz na ekranie, użyj „echo” zamiast „wywołania” i usuń fragmenty append () / setline () z całego printf ().

Widzieć:

:help :for
:help :call
:help :echo
:help range()
:help line()
:help append()
:help setline()
:help getline()
:help printf()
Heptite
źródło
Idealny; Dziękuję Ci. Przepraszam, że nie jestem zwięzły, ale twój drugi przykład kodu zrobił dokładnie to, co chciałem. Ponieważ jestem nowy, nie mogę go głosować, ale zrobię to, kiedy będę mógł.
doubleshot
Oczywiście istnieje inny, prawdopodobnie prostszy sposób:% s / ^ / \ _ printf („To jest linia% d:”, linia („.”)) / /
Heptite
1

W Emacs spróbuj:

M: (dotimes (i 3) (insert (format "This is line %2d.\n" (1+ i))))

Tutaj M: oznacza eval-expression

Oleg Pavliv
źródło
Dla tych, którzy nie znają Emacsa: to jest Alt + :
Tom