Jestem przyzwyczajony do Emacsa, ale wypróbowuję Vima, żeby zobaczyć, który z nich bardziej mi się podoba.
Jedną z rzeczy, które lubię w Emacsie, jest możliwość uruchomienia terminalu wewnątrz Emacsa. Czy jest to możliwe w Vimie? Wiem, że możesz wykonywać polecenia z Vima, ale chciałbym móc uruchomić terminal wewnątrz karty.
:! <command>
tego szukasz?:term
polecenie, które otwiera nowy terminal w nowym podzielonym oknie. Jeśli to nie działa, sprawdź,vim --version | grep -o .terminal
czy ta funkcja jest dostępna (+terminal
) czy niedostępna (-terminal
).Odpowiedzi:
Zdecydowanie poleciłbym
screen
coś takiego. Vim to edytor tekstu, a nie powłoka.Chciałbym użyć, Ctrl+ASaby podzielić bieżące okno w poziomie, lub w ekranie Ubuntu i innych poprawionych wersjach możesz użyć Ctrl+A|(potoku), aby podzielić w pionie. Następnie użyj Ctrl+ATab(lub równoważnie w niektórych systemach, Ctrl+ACtrl+Iktóre mogą być łatwiejsze do wpisania), aby przełączać się między oknami. Istnieją inne polecenia zmieniające rozmiar i układ okien.
Lub mniej zaawansowane użycie
screen
to po prostu otwieranie wielu okien pełnoekranowych i przełączanie się między nimi. Tak zwykle robię, od czasu do czasu używam funkcji podziału ekranu.GNU ekranu Survival Guide pytanie ma kilka dobrych rad, jeśli jesteś zaznajomiony z jego stosowania.
źródło
Nieaktualny od sierpnia 2011 r
Sprawdź Conque Shell (także na GitHub ). Umożliwia uruchamianie dowolnego programu interaktywnego w vimie, nie tylko powłoki.
źródło
:ConqueTerm bash <CR>
,vim <CR>
,:ConqueTerm bash
.... rekurencyjne horror !!Nie jestem pewien, co dokładnie chcesz osiągnąć (nigdy nie korzystałem z Emacsa), ale możesz uruchamiać polecenia w Vimie, pisząc:
A jeśli chcesz wpisać kilka poleceń lub pobawić się przez chwilę w powłoce, zawsze możesz użyć:
Po zakończeniu polecenia lub powłoki pojawi się opcja naciśnięcia, Enteraby wrócić do okna edytora
Vim jest celowo lekki i nie ma możliwości robienia rzeczy nieedytorskich, podobnie jak uruchamianie pełnowymiarowej powłoki w panelu / karcie Vima, ale jak wspomniano powyżej, istnieją dodatki innych firm, takie jak vim-shell, które pozwalają ci robić takie rzeczy.
Zazwyczaj, jeśli chcę przełączać się między Vimem a moją powłoką (Bash), po prostu naciśnij CTRL+, Zaby wstrzymać proces Vima, bawić się w mojej powłoce, a następnie wpisać „fg”, gdy chcę wrócić do Vima - zachowując mój edytor i mój muszla ładna i osobna.
źródło
:r! command [ENTER]
wspomniane w komentarzach.Sposób na obejście tego jest:
fg
.źródło
:!bash
jest lepszym sposobem na zrobienie tego:!bash
ładniejszy niżCtrl+z
? (Zastanawiam się)Ctrl+Z
na przykład możesz przejść do innego folderu, als
następniegit status
itd.Ctrl+Z
Oznacza „pauzę”, którą możesz „wznowić”fg
. Ale dzięki:! Bash, jak dotychczas wiem, możesz uruchomić tylko jedno polecenie na raz, a nawet jeśli możesz uruchomić więcej niż jedno polecenie na raz, nadal nie jest to wygodne. Ogólnie więc „Ctrl + Z” jest znacznie lepszyJeśli jest włączony w twojej wersji Vima, terminal można uruchomić
:term
poleceniem.Obsługa okna terminala została dodana do Vima 8. Jest to opcjonalna funkcja, którą można włączyć podczas kompilacji Vima z funkcją terminalu +. Jeśli twoja wersja Vima ma obsługę terminalu,
:echo has('terminal')
wyświetli „1”.Wpisanie
:term
spowoduje przejście do trybu Terminal-Job , w którym możesz używać terminala zgodnie z oczekiwaniami.W trybie Terminal-Job naciśnięcie
Ctrl-W N
lubCtrl-\ Ctrl-N
przełączenie trybu na Terminal-Normal pozwala na przesuwanie kursora i uruchamianie poleceń podobnie jak w trybie normalnym Vima . Aby wrócić do trybu pracy terminalowej , naciśniji
.Inne odpowiedzi wspominają o podobnej funkcjonalności w Neovim.
źródło
i
po przełączeniu z trybu przeglądania ctrl-wN. Jest to funkcja zabójcza nawet dla tmux i działa również w systemie Windows.:term
?brew install vim --override-system-vi
i:term
działa idealnie. Dzięki za udostępnienie!:vertical :term
podzieli się pionowo z terminalem w lewym oknie.:vertical :botright :term
podzieli się pionowo z terminalem w prawym oknie. Alternatywnie możesz ręcznie rozmieścić okna, a następnie użyć,:term ++curwin
aby otworzyć terminal w aktywnym oknie.:sh
potemctrl+d
wracać (bash)Aktualizacja :
Możesz odwzorować
ctrl+d
w vimie, aby uruchomić:sh
, co pozwala szybko przełączać się między bash i vim.noremap <C-d> :sh<cr>
źródło
ctrl+z
ifg
są nieco szybsze, biorąc pod uwagę, że nie musisz pisać:sh
w tym przypadku.:sh
jeśli wykonujesz mapę. Ponoremap
, możesz po prostuCtrl+D
od vima dosh
, a ponieważ^D
jest EOF, który kończysh
, więc powrócisz do vima. Jeden klawisz może przełączać się międzysh
i vim.Główną nową funkcją Vima 8.1 jest obsługa uruchamiania terminala w oknie Vima.
:term
otworzy terminal w innym oknie w Vimie.źródło
exit
wyjdzie z terminala, a następnie użyj,:q
aby zamknąć oknoOstatecznie natywna
:terminal
komenda została dodana do vima w 2017 roku.Oto fragment pliku : terminal readme:
źródło
:bn
jak zwykle. Nie trzeba zabijać terminalu i nie ma sensu wracać :)To pytanie jest dość stare, ale dla tych, którzy je znajdą, istnieje nowe możliwe rozwiązanie: Neovim zawiera pełnoprawny, pierwszej klasy emulator terminala, który robi dokładnie to, co próbował ConqueTerm. Po prostu biegnij
:term <your command here>
.<C-\><C-n>
wyjdzie z trybu termicznego z powrotem do trybu normalnego. Jeśli jesteś podobny do mnie i wolisz, aby tryb ucieczki nadal wychodził, możesz dodać to do swojego nvimrc:A następnie dwukrotne naciśnięcie ESC spowoduje wyjście z trybu terminalowego z powrotem do trybu normalnego, dzięki czemu można manipulować buforem, w którym nadal działa polecenie.
Chociaż należy pamiętać, ponieważ w chwili, gdy publikuję tę odpowiedź, nvim jest w fazie intensywnego rozwoju, można dodać inny sposób na wyjście z trybu terminalowego. Ponieważ Ctrl+\Ctrl+nprzełączam się w tryb normalny z prawie dowolnego trybu, nie oczekuję, że ta odpowiedź będzie błędna, ale pamiętaj, że jeśli nie zadziała, ta odpowiedź może być nieaktualna.
https://github.com/neovim/neovim
źródło
:term
Ta funkcja została jednak niedawno dodana w Vimie 8.1, która od tego momentu została niedawno wydana, więc może być konieczna aktualizacja, aby z niej skorzystać.
źródło
Wiem, że nie odpowiadam bezpośrednio na pytanie, ale myślę, że to dobre podejście. Nikt nie wspomniał o tmuxie (a przynajmniej nie jako samodzielnej odpowiedzi). Tmux jest terminalem przypominającym ekran multipleksera. Większość rzeczy można wykonać w obu multipleksatorach, ale łatwiej jest je skonfigurować. Również tmux jest obecnie aktywniej rozwijany niż ekran, a wokół niego znajduje się dość duży ekosystem, na przykład narzędzia pomagające w konfiguracji, ecc.
Również dla vima istnieje inna wtyczka: ViMUX , która bardzo pomaga w interakcji między oboma narzędziami. Możesz wywoływać polecenia za pomocą:
:call VimuxRunCommand("ls")
To polecenie tworzy mały poziomy podział poniżej obecnego vima panelu.
Może także umożliwiać uruchamianie z wiersza poleceń na wypadek, gdyby nie chcesz uruchamiać całego polecenia:
<Leader>vp :VimuxPromptCommand<CR>
Ponieważ to nie wystarczyło, istnieje co najmniej 6 „wtyczek specyficznych dla platformy”:
g:vroom_use_vimux
Oto ładny „przypadek użycia”: Testy na żądanie przy użyciu Vimux i Turbux z Spork i Guard
źródło
Ktoś już zasugerował https://github.com/Shougo/vimshell.vim , ale nie wspomniał dlaczego. W związku z tym, kiedy odeszłam od tego pytania, traciłam wiele czasu na wypróbowywanie innych (znacznie wyżej ocenianych) opcji.
Shougo / vimshell jest odpowiedzią. Dlatego:
Oprócz bycia emulatorem terminala, VimShell umożliwia nawigację po wyjściu terminala w trybie normalnym i wizualnym. Tak więc, jeśli uruchomione polecenie daje wynik, który chcesz skopiować i wkleić tylko przy użyciu klawiatury ... VimShell obejmuje to.
Nie robi tego żadna z pozostałych wymienionych opcji, w tym polecenie: terminal w NeoVim. Neovim: terminal zbliża się do końca, ale nie spełnia przynajmniej następujących sposobów na dzień 18.02.2017:
Przesuwa kursor na koniec bufora, zamiast na końcu utrzymując go w tym samym miejscu, co robi VimShell. Ogromna strata czasu.
Nie obsługuje
modifiable = 1
zobaczyć dyskusję na ten temat na Github , więc pomocna wtyczek jak vim-easymotion nie może być używany.Nie obsługuje wyświetlania numerów linii, podobnie jak Vimshell.
Nie trać czasu na inne opcje, w tym terminal Neovim:. Idź z VimShell.
źródło
:terminal
może absolutnie zrobić to samo.:terminal
nie może robić tego samego, co:VimShell
w zakresie nawigacji i edycji oraz w zasadniczy sposób. Zobacz objaśnienie edycji powyżej.Możesz rzucić okiem na
:sh
polecenie (patrz:help sh
w Vim).Różne polecenia
źródło
set shell=/bin/sh
sprawi, że vim użyje cichszej powłoki do swoich poleceń.Nie, nie możesz:
http://vimdoc.sourceforge.net/htmldoc/tips.html#shell-window
źródło
splitvt
- zakłóca kody kontroli kolorów i czyni govim
całkowicie bezużytecznym.Znam tylko sposób używania vim-shell , łaty innej firmy.
źródło
Używam tego teraz, możesz spróbować. VimShell
źródło
Wypróbuj vterm , który jest całkiem pełną powłoką wewnątrz vima. Jest nieco wadliwy ze swoją historią i przejrzystymi funkcjami i wciąż się rozwija, ale nadal jest całkiem niezły
źródło
Zakładając, że twoja wersja vima obsługuje
+term
najpierw polecenie, ustaw powłokę, aby vim używał go w jednym poleceniu (np.set=/usr/bin/zsh
), A następnie uruchom polecenie+term
(tjbo 15vs +term
.). być może będziesz musiał wykonać dodatkowe manewry w swoich oknach (tj. usunąć jedno i obracać), ale będziesz mieć swój terminal.źródło
Potwierdzam, że nie odpowiadam ściśle na twoje pytanie, ale to, co działało dla mnie lepiej, gdy korzystam z Vima i terminali w tym samym oknie, to Tmux (który jest swego rodzaju „uruchomionym w tle oprogramowaniem”, podobnym do ekranu, chociaż to jeden działa lepiej z podziałami i tabulatorami).
Ten post pomoże ci zrozumieć, jak działają razem: „Tmux i Vim - jeszcze lepiej razem” .
W ten sposób możemy przekonwertować Vima na potężne IDE
źródło
Podziel ekran i uruchom polecenie,
term ++curwin
aby uruchomić terminal w buforze Vima. Następujące polecenie działa zarówno i działa dla mnie:źródło