Możesz użyć pydo
polecenia dostępnego od Vima 7.4, w podręczniku opisz, jak działa lepiej niż ja:
: [range] pydo {body}
Wykonaj funkcję Pythona „def _vim_pydo (line, linenr): {body}” dla każdej linii w [zakresie], z argumentami funkcji ustawionymi kolejno na tekst każdej linii, bez końcowego <EOL>, i bieżącego numer kolejki. Funkcja powinna zwrócić ciąg lub Brak. Jeśli ciąg zostanie zwrócony, staje się tekstem wiersza w bieżącej turze. Domyślnie [zakres] to cały plik: „1, $”.
Na przykład możesz użyć polecenia takiego jak:
:python import vim
:pydo vim.current.buffer[linenr - 1] = '[%s]' % line
linenr - 1
Bit jest tam, ponieważ linie vim.current.buffer
są 0-indeksowane ale Vim zacząć liczyć od 1 linii.
Zaletą jest to, że możesz łatwo zdefiniować niestandardowe polecenie do wykonywania kodu Pythona w szeregu wierszy:
command! -range=% BracketLines
\ <line1>,<line2>pydo vim.current.buffer[linenr - 1] = '[%s]' % line
Możesz pobrać bieżący bufor
vim.current.buffer
, który jest iterowalny; możesz użyćfor
pętli, aby uzyskać każdą linię.Możesz zmienić linie, przypisując do nich; łącząc to, otrzymujemy:
Zobacz także
:help python-buffer
.źródło