In vim, wenn ich benutze
:r !ls somefilename
Die Ausgabe dieses Befehls wird in eine neue Zeile unterhalb der aktuellen Zeile eingefügt.
Wenn ich mache
let @a = system("ls")
und später
"ap
Die Ausgabe wird weiterhin in eine neue Zeile unterhalb der aktuellen Zeile eingefügt.
Gibt es eine Möglichkeit, die Ausgabe von vim insert an der aktuellen Position zu erstellen?
command-line
vim
Deshmukh
quelle
quelle
Antworten:
Sie können den Inhalt des Zwischenablagepuffers mit Strg-R * im Einfügemodus zwischen Zeichen einfügen (und bei anderen Puffern ähnlich). Wenn Sie also den Systembefehl in einen Puffer bekommen können, sollten Sie gesetzt sein. (Quelle: https://stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position ).
:let @a=system("ls -l")
Setzt den Ausgang vonls -l
in das Registera
. Sie können es dann (im Einfügemodus) mit einfügen^R-a
.quelle
*
) mit einem Register synchronisiert. Wenn Sie also Ihre Befehlsausgabe in die Zwischenablage leiten, können"*
Sie sie verwenden.liest die Ausgabe des Befehls und fügt sie in die Zeile unter der aktuellen Zeile ein. So ist vi programmiert, Sie können das Verhalten nicht ändern.
Sagen Sie aber, ob Sie in Zeile 3 stehen. Wenn Sie es versuchen
:r !date
. Der Datumswert wird in Zeile 4 eingefügt.Wenn der Datumswert in Zeile 3 angezeigt
:2r !date
werden soll, fügen Sie den Datumswert in Zeile 3 ein.quelle
Hier ist eine alternative Möglichkeit, die Ausgabe eines externen Befehls vor dem Cursor einzufügen:
oder benutze expression register (
:help @=
):dann schlagen P. Oder kürzer durch:
quelle
:exe
) enthält, die in Befehlen enthalten sein kann.