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?

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()

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


Dla tych, którzy nie znają Emacsa: to jest Alt + :
Tom
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.