Wie kann ich die Ausgabe eines Shell-Befehls in einen neuen Puffer in Vim leiten? Folgendes würde offensichtlich nicht funktionieren, aber Sie können sehen, worauf ich hinaus will:
:!echo % | :newtab
Wie kann ich die Ausgabe eines Shell-Befehls in einen neuen Puffer in Vim leiten? Folgendes würde offensichtlich nicht funktionieren, aber Sie können sehen, worauf ich hinaus will:
:!echo % | :newtab
Antworten:
Sie können die Ausgabe eines Shell-Befehls nicht an einen Befehl weiterleiten, der einen neuen Puffer erstellt. Sie können jedoch einen neuen Puffer erstellen und die Ausgabe eines Shell-Befehls mit einem Eintrag in der Befehlszeile von Vim in diesen Puffer einlesen. Eine funktionierende Version Ihres Beispiels wäre
:tabnew | r !echo <c-r>=bufname("#")<cr>
Beachten Sie, dass das Pipe-Symbol in diesem Fall ein Trennzeichen zwischen Vim ex-Befehlen ist, nicht die Pipe der Shell. Siehe auch
:help :tabnew
:help :r!
:help :bar
:r!echo
ohne den Puffer zu verändern.
Hier ist was ich tue. Darauf wird in den Kommentaren in den obigen Antworten angespielt.
:new | r ! <cmd>
:new | r ! <cmd> # (# is replaced with filename)
Beispiel 1 : Finden Sie alle Textdateien in/tmp
:new | r ! find /tmp -name '*.txt'
Beispiel 2 : Sie bearbeiten die Datei foo.txt und möchten ls -la foo.txt
die Ausgabe in einem Puffer ausführen :
:new | r ! ls -la #
Das #
wird durch den Dateinamen des ursprünglichen Puffers ersetzt, den Sie bearbeiten. Dies ist besonders nützlich für Ad-hoc-Versionsverwaltungsbefehle, z
:new | r ! hg annotate -un #
:new
Erstellt eine horizontale Teilung. Verwenden :vnew
Sie diese Option, wenn Sie stattdessen eine vertikale Teilung und :tabnew
eine neue Registerkarte wünschen .
:tabnew | enew | r ! <your shell cmd>
funktioniert bei mir.
Wenn Sie das Ergebnis wirklich in einem neuen Puffer speichern möchten, aber Informationen aus dem alten aktuellen Puffer benötigen, können Sie Folgendes verwenden system()
:
:let res = system('echo '.expand('%'))
:tabnew
:put=res
oder speichern Sie den aktuellen Puffernamen für später :
:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>