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.
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.
Antworten:
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()
: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
" redirect the output of a Vim or external command into a scratch buffer
function! Redir(cmd)
if a:cmd =~ '^!'
execute "let output = system('" . substitute(a:cmd, '^!', '', '') . "')"
else
redir => output
execute a:cmd
redir END
endif
tabnew
setlocal nobuflisted buftype=nofile bufhidden=wipe noswapfile
call setline(1, split(output, "\n"))
put! = a:cmd
put = '----'
endfunction
command! -nargs=1 Redir silent call Redir(<f-args>)
Dies übernimmt die normale oder Systembefehlsausgabe und legt sie in einem neuen Tab ab. Fühlen Sie sich frei, die Zeile tabnew
zu vsplit
oder split
usw. zu ändern .
Es gibt auch das bufferize.vim Plugin:
:Bufferize scriptnames
Dies ist im Grunde eine gepackte Version der akzeptierten Antwort (unter Verwendung von :redir
) und kann für einige praktischer sein.
END
bedeutet