Wiem, że mogę :!
lub mogę :r!
wykonać polecenie zewnętrzne i opcjonalnie wstawić jego wynik do tekstu. Mogę nawet występować :!sh
i odradzam pocisk, który będzie żył, dopóki go nie opuszczę - ale gdy pocisk jest aktywny, Vim „śpi” i jest niedostępny. Muszę opuścić powłokę i odrodzić nową, jeśli chcę wrócić na chwilę do Vima - niezbyt przydatna.
Mogę uzyskać dostęp do powłoki na drugim końcu, zawieszając Vima ^Zi zarządzając zadaniem Vima poprzez bg
, fg
i jobs
. Ma to większy sens, ale na dłuższą metę jest bardzo uciążliwe. Mogę użyć, Screen
jeśli jest dostępny (często nie jest), lub otworzyć kilka okien mojego menedżera okien (i ssh do docelowego hosta z każdego z nich po kolei, aby mieć zarówno vima, jak i powłokę na zdalnym hoście, znowu niewygodne).
Byłoby najlepiej, gdyby Vim pozwolił mi otworzyć sesję powłoki i zatrzymać ją, powiedzmy, w jednym z (wewnętrznych) okien lub pozwolić mi się na nią przełączyć i wrócić. Czy coś takiego jest możliwe?
:split
, zachowując plik w drugim oknie? ... Dla mnie to brzmi jak praca dla tmux lub screena ...Odpowiedzi:
Istnieje kilka wtyczek vim, które to umożliwiają. Używam Conque ( Github ).
Po umieszczeniu go w katalogu wtyczek wystarczy, że:
W vimie będziesz mieć interaktywną powłokę bash. Następnie możesz używać swoich regularnych gestów vim, aby robić cokolwiek innego, co chcesz zrobić w oknie.
Inną wtyczką jest vimshell .
źródło
:help shell-window
. (Krótka odpowiedź: nie.)W przypadku VIM uważam, że wtyczki, które mają to zrobić, nie są wcale takie świetne, chociaż vimshell IMO jest najbliższy. Musisz jednak zrozumieć, że jest to problem z 2 częściami.
Moim zdaniem istnieją dwa podejścia, które pod tym względem działają znacznie lepiej.
Powinienem dodać, że istnieje duże prawdopodobieństwo, że NeoVIM może zmienić ten aspekt, ponieważ jednym z jego głównych celów jest możliwość wykonywania zadań asynchronicznie. Ale do tego czasu moim zdaniem jest to najlepsze, co możemy uzyskać.
źródło
W
:help shell-window
możemy przeczytać o wykonywaniu poleceń powłoki w oknie:Istnieje jednak kilka rozwiązań, z których można skorzystać:
zastosowanie
screen
specjalnie zaprojektowane do tego rodzaju rzeczy, np .:Zobacz więcej na: GNU Screen Survival Guide at stackoverflow SE
Czyli GNU Dzielenie ekranu , ekran szybkich Reference więcej szczegółów.
VIM-Shell - łatka innej firmy
vterm - emulator terminala w vimie.
Vimux - łatwa interakcja z tmux z vim.
inne już wspomniane: Conque
Powiązane: Jak uruchomić terminal w vimie? przy przepełnieniu stosu
źródło