Sie können den pydo
seit Vim 7.4 verfügbaren Befehl verwenden. Das Handbuch beschreibt, wie es besser funktioniert als ich:
: [range] pydo {body}
Führen Sie die Python-Funktion "def _vim_pydo (line, linenr): {body}" für jede Zeile im [Bereich] aus, wobei die Funktionsargumente nacheinander ohne nachfolgendes <EOL> und den aktuellen auf den Text jeder Zeile gesetzt werden Zeilennummer. Die Funktion sollte einen String oder None zurückgeben. Wenn eine Zeichenfolge zurückgegeben wird, wird sie in der aktuellen Runde zum Text der Zeile. Der Standardwert für [Bereich] ist die gesamte Datei: "1, $".
Für Ihr Beispiel können Sie einen Befehl wie den folgenden verwenden:
:python import vim
:pydo vim.current.buffer[linenr - 1] = '[%s]' % line
Das linenr - 1
Bit ist da, weil die Zeilen in vim.current.buffer
0 indiziert sind, aber Vim beginnt, die Zeilen von 1 zu zählen.
Das Schöne ist, dass Sie einfach einen benutzerdefinierten Befehl definieren können, um Ihren Python-Code in einer Reihe von Zeilen auszuführen:
command! -range=% BracketLines
\ <line1>,<line2>pydo vim.current.buffer[linenr - 1] = '[%s]' % line
Sie können den aktuellen Puffer mit
vim.current.buffer
abrufen, der iterierbar ist. Sie können einefor
Schleife verwenden, um jede Zeile abzurufen.Sie können die Zeilen ändern, indem Sie sie zuweisen. Wenn wir das zusammenstellen, erhalten wir:
Siehe auch
:help python-buffer
.quelle