Was ist in Vim eine elegante Möglichkeit, die Ausgabe über die Befehlszeile zu erfassen?

14

Wenn ich in Vim bin und eine Ausgabe von der Befehlszeile erhalten und in meine aktuelle Datei einfügen möchte, kann ich Folgendes ausführen:

:! echo "foo" >> %

Dadurch wird "foo" an meine aktuelle Datei angehängt, und ich muss neu laden.

Gibt es einen eleganteren Weg, dies zu tun - muss diese Ausgabe in einen Puffer gehen, den ich zum Beispiel einfügen kann?

Nathan Long
quelle

Antworten:

24

Ja:

:r !echo "foo"

Sehen

:help :r!

Dadurch wird die Ausgabe des Befehls nach der aktuellen Zeile eingefügt. Wenn Sie die Befehlsausgabe in einem Register erfassen möchten, das Sie einfügen können, können Sie dies tun:

:let @a = system('echo "foo"')

Jetzt ist die Ausgabe des Befehls (einschließlich der nachfolgenden Newline) im Register a. Sehen

:help let-@
:help system()
garyjohn
quelle
Nachdem ich mir die Hilfe angesehen und experimentiert habe, sehe ich, dass 1) :rdie Abkürzung für "read" ist (Sie können also "read" oder nur "r" eingeben und es ist der gleiche Befehl), und 2) durch Ausführen :r path/to/foo.txtwird der Inhalt davon eingefügt Datei nach dem Cursor.
Nathan Long
Auch - ich wusste nicht über den systemAnruf. Das ist großartig!
Nathan Long
1
Ich wusste auch nicht, dass Sie Register wie manuell einstellen können let @a = 'foo'. Eine gute Idee wäre, nach dem Suchen und Ersetzen den Suchbegriff in einem Register zu speichern, um ihn an einer anderen Stelle einzufügen, indem Sie Folgendes tun let @a = @/: "Das Register soll das enthalten, was das / -Register enthält, nämlich meine letzte Suche."
Nathan Long
1
@ Nathan Long: Gern geschehen. Weitere Möglichkeiten zum Einfügen aus dem / -Register sind: 1) Ausführen :put /, um den Registerinhalt in die nächste Zeile einzufügen, und 2) Eingeben von Strg-R im Einfügemodus, gefolgt vom /Einfügen des Registerinhalts an der Cursorposition. Mehr dazu unter :help :putund :help i_CTRL-R.
Garyjohn