Czy możliwe jest uzyskanie wyniku działania:! polecenie w podziale zamiast w całym oknie?

11

Jeśli mam sesję vim z dwoma podziałami, kiedy wykonam :!polecenie, wynik zostanie wyświetlony w całym oknie. Czy możliwe jest wyświetlanie wyników tylko w aktywnym podziale?

dr
źródło
2
Nie, to nie jest możliwe. Dane wyjściowe, jeśli :!są wyświetlane w wierszu polecenia, którego jest tylko jeden, i mogą znajdować się tylko na dole ekranu. Najlepsze, co mogę wymyślić, to utworzenie nowego bufora /: podziału pod bieżącym ...
Martin Tournoij
@Carpetsmoker, Dla mnie dane wyjściowe :!nie trafiają do wiersza poleceń. Zamiast tego sesja vim znika, a całe okno terminalu pokazuje dane wyjściowe terminala, w tym to, co zostało wydrukowane przed vimjego wywołaniem.
drs.
1
Może to z powodu używanego terminala i / lub TERMustawienia?
Martin Tournoij
Ta różnica dotyczy altscreen (in screen) lub alternatywnego ekranu (in tmux).
tommcdo

Odpowiedzi:

8

Możesz użyć tego polecenia:

:new | 0read ! command

Spowoduje to otwarcie nowego podziału i umieszczenie danych wyjściowych polecenia w tym podziale ( choć nie w aktualnie aktywnym podziale, jak wspomniano ).

nowy - tworzy nowy podział

read - aby uzyskać wynik polecenia

polecenie - aktualne polecenie

meain
źródło
6

Możesz wykonać polecenie, aby to zrobić:

  1. Otwórz nowy podział (lub kartę)
  2. Uruchom polecenie i pokaż wyniki w tym podziale (lub karcie)

Polecenie wyglądałoby mniej więcej tak:

:Rsplit command

lub

:Rtab command

W swoim .vimrcmożesz napisać to:

" execute a command and show its output in a split window
command! -nargs=* -complete=shellcmd Rsplit execute "new | r! <args>"

" execute a command and show its output in a new tab
command! -nargs=* -complete=shellcmd Rtab execute "tabnew | r! <args>"

Możesz dowiedzieć się, jak tworzyć własne polecenia :help :command.

Lucas Gabriel Sánchez
źródło
1

To nie będzie możliwe. Będziesz musiał podzielić ekran za pomocą innego narzędzia, takiego jak tmux (IIRC), screen, ...

Jeśli nie musisz wchodzić w interakcje z wykonanym programem, możesz jednak zaimportować jego wyniki bezpośrednio w dowolnym oknie (w sensie vim :h windows), z którym chcesz :r!command line.:h :r!

Luc Hermitte
źródło