Jak zrzucić wewnętrzne polecenie vim (nie polecenie powłoki) do nowego bufora?
Na przykład, chcę zrzucić listę wszystkich wtyczek do :enew
od :scriptnames
tak, że mogę go przeszukać.
źródło
Jak zrzucić wewnętrzne polecenie vim (nie polecenie powłoki) do nowego bufora?
Na przykład, chcę zrzucić listę wszystkich wtyczek do :enew
od :scriptnames
tak, że mogę go przeszukać.
Możesz użyć :redir
do przekierowania wyjścia do zmiennej, rejestru lub pliku. Przykład przekierowania do rejestru bez nazwy:
:redir @">|silent scriptnames|redir END|enew|put
Alternatywnie skrypt scriptease.vim Tima Pope'a udostępnia :Scriptnames
polecenie, które załaduje :scriptnames
się na listę szybkich i :copen
.
Jeśli przekierowujesz wiele poleceń, możesz zawrzeć je w poleceniu:
command! -nargs=+ -complete=command Redir let s:reg = @@ | redir @"> | silent execute <q-args> | redir END | new | pu | 1,2d_ | let @@ = s:reg
Teraz możesz użyć :Redir
polecenia, aby przekierować dane wyjściowe do nowego bufora. np . :Redir scriptnames
lub :Redir ls
.
Vim 8 jest dostarczany z nową execute()
funkcją. Możesz użyć tej execute()
funkcji, aby zamiast :redir
przechwytywać dane wyjściowe polecenia.
:enew|pu=execute('scriptnames')
Aby uzyskać więcej pomocy, zobacz:
:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()
END
znaczy:redir END
mówi Vimowi, aby zakończył przekierowywanie wiadomości. Zobacz:h :redir
Dla kompletności chcę przedstawić te niesamowite funkcje, które zebrałem (ukradłem) z romainl
To zajmie normalne lub systemowe polecenie wyjściowe i umieści je w nowej karcie. Zmień linię
tabnew
navsplit
lubsplit
itd.źródło
Istnieje również wtyczka bufferize.vim :
która jest w zasadzie spakowaną wersją zaakceptowanej odpowiedzi (za pomocą
:redir
) i może być wygodniejsza dla niektórych.źródło