Otwórz dane wyjściowe polecenia powłoki w podzielonym okienku

23

Rozważ dowolny interpretowany język programowania.

Mogę uruchomić aktualnie otwarty skrypt za pomocą ! interpreter %i użyć klawisza return, aby powrócić do vima po zakończeniu wykonywania.

Czy w jakiś sposób nie można zastąpić bieżącego okna danymi wyjściowymi wykonanego polecenia powłoki, ale otworzyć dane wyjściowe w nowym okienku podziału? Chciałbym nadal widzieć mój kod źródłowy podczas wykonywania skryptu.

Próbowałem :split ! interpreter %, ale to nie zadziałało.

Czy jest jakiś sposób? Używam vim 7.3.

tłumić
źródło

Odpowiedzi:

29

Dzięki :!, zewnętrzne polecenie jest wykonywane w powłoce, a ulotne wyjście nie jest przechwytywane w Vimie; po prostu widzisz, co jest drukowane na terminalu, a następnie sterowanie powraca do Vima po zakończeniu zewnętrznego polecenia.

Aby zachować wyjście, musisz wczytać je do bufora Vima . Do tego jest :read!polecenie. Aby otworzyć nowy bufor scratch , połącz to z :new:

:new | 0read ! <command>

Jeśli chcesz przekazać nazwę pliku bieżącego bufora ( %) do polecenia zewnętrznego, musisz użyć :execute, aby została już oszacowana w bieżącym buforze:

:execute 'new | 0read ! interpreter' expand('%')

Lub wykorzystujesz fakt, że z nowym buforem poprzedni staje się alternatywnym i używasz #zamiast %:

:new | 0read ! interpreter #

Pozbądź się bufora scratch z :bdelete!.

Jeśli chcesz widzieć dane wyjściowe asynchronicznie podczas ich wykonywania, potrzebujesz zewnętrznego multipleksera lub wtyczki, jak wspomniano w odpowiedzi @chaos.

Ingo Karkat
źródło
Powyższe polecenie „: execute ...” działa dla mnie, ale gdy próbuję powiązać go z naciśnięciem klawisza F9, używając tego wpisu .vimrc [nnoremap <buffer> <F9>: execute 'new | 0read! / Usr / bin / env python3 'expand ('% ')], pojawia się następujący błąd: [/ bin / bash: -c: linia 0: nieoczekiwany EOF podczas wyszukiwania pasującego rozszerzenia' '' ('%' )]. Próbowałem kilku sekwencji ucieczki, ale chyba nie jest to właściwa. = :). Jakieś pomysły? Dziękuję Ci.
NYCeyes,
2

O ile mi wiadomo, nie możesz tego zrobić w vim. Ale do tego użyj podobnego multipleksera screen. Przed otwarciem vima uruchom multiplekser:

screen

Następnie naciśnij ctrl-, a Saby ustawić poziomo i ctrl-, a |aby uzyskać ekran rozlany w pionie.

Teraz otwórz plik vimna jednym z podzielonych ekranów. I przejdź do drugiego ekranu za pomocą ctrl- a tab. Zauważ, że na drugim ekranie musisz najpierw otworzyć nowy ekran ( ctrl- a c), zanim będziesz mógł z niego korzystać.

Na ekranie z vimem możesz edytować plik, a na drugim ekranie możesz go wykonać i zobaczyć wiadomości i kod na stałe.

Oto krótkie odniesienie do screen.

chaos
źródło
Alternatywnie możesz użyć tmuxmultipleksera i vim-dispatchwtyczki do zautomatyzowania podziału i przeskakiwania między panelami.
taketwo