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.