Wie speichere ich einen internen vim-Befehl (nicht einen Shell-Befehl) in einem neuen Puffer?
Zum Beispiel möchte ich eine Liste aller Plugins :enew
von :scriptnames
speichern, damit ich sie durchsuchen kann.
quelle
Wie speichere ich einen internen vim-Befehl (nicht einen Shell-Befehl) in einem neuen Puffer?
Zum Beispiel möchte ich eine Liste aller Plugins :enew
von :scriptnames
speichern, damit ich sie durchsuchen kann.
Mit können Sie :redir
die Ausgabe in eine Variable, ein Register oder eine Datei umleiten. Beispiel für die Weiterleitung zum unbenannten Register:
:redir @">|silent scriptnames|redir END|enew|put
Alternativ bietet Tim Popes scriptease.vim den :Scriptnames
Befehl, der :scriptnames
in die Quickfix-Liste und geladen wird :copen
.
Wenn Sie feststellen, dass Sie viele Befehle umleiten, können Sie dies in einem Befehl zusammenfassen:
command! -nargs=+ -complete=command Redir let s:reg = @@ | redir @"> | silent execute <q-args> | redir END | new | pu | 1,2d_ | let @@ = s:reg
Jetzt können Sie den :Redir
Befehl verwenden, um die Ausgabe in einen neuen Puffer umzuleiten. zB :Redir scriptnames
oder :Redir ls
.
Vim 8 wird mit der neuen execute()
Funktion ausgeliefert. Sie können die execute()
Funktion verwenden :redir
, um die Ausgabe von Befehlen zu erfassen , anstatt sie zu erfassen.
:enew|pu=execute('scriptnames')
Weitere Hilfe finden Sie unter:
:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()
END
bedeutet:redir END
Weist Vim an, die Umleitung von Nachrichten zu beenden. Siehe:h :redir
Der Vollständigkeit halber möchte ich diese fantastischen Funktionen vorstellen, die ich von romainl gesammelt (gestohlen) habe
Dies übernimmt die normale oder Systembefehlsausgabe und legt sie in einem neuen Tab ab. Fühlen Sie sich frei, die Zeile
tabnew
zuvsplit
odersplit
usw. zu ändern .quelle
Es gibt auch das bufferize.vim Plugin:
Dies ist im Grunde eine gepackte Version der akzeptierten Antwort (unter Verwendung von
:redir
) und kann für einige praktischer sein.quelle