Dostęp do terminala, gdy jesteś na Vimie

40

Czy istnieje sposób na dostęp do terminala podczas korzystania z Vima ?

Nie lubię otwierać innego terminala ani zapisywać i wychodzić z bieżącego terminala.

Mohammad Reza Rezwani
źródło
Otwórz nową kartę? (Ctrl + Shift + T)
Wilf
2
Ile razy to robię :) Nie lubię tego robić D:
Mohammad Reza Rezwani
1
Czy próbowałeś użyć menedżera okien terminala, takiego jak tmux?
jrg

Odpowiedzi:

67

Możesz wysłać vimowi sygnał SIGTSTP. Robisz to, naciskając ctrl+ z. Vim zostanie zawieszony w tle i będziesz mógł korzystać z terminala. Wpisz fgterminal, aby wznowić pracę z vimem.

Dodatkowa wskazówka: Działa to na prawie wszystkich aplikacjach terminalowych. Użyj, bgaby umożliwić kontynuowanie działania aplikacji w tle.

noleti
źródło
21
Lub po prostu %zamiast fg. Albo %1, %2itp jeśli masz dużo pracy w tle. jobspolecenie wyświetli je. (Zakładając, bashże to skorupa.)
Ruslan
4
Głosuję na metodę ^ z (i później fg), ponieważ można jej użyć w prawie wszystkich procesach powłoki - to nie jest vim, to sztuczka jak używać powłoki, która jest niezwykle przydatna w innych kontekstach.
dman
35

W vimie po prostu wpisz:

:!sh

:!uruchamia proces zewnętrzny - w tym przypadku shkolejną powłokę. Kontrola powróci do vima po wyjściu z powłoki. Jeśli chcesz używać powłoki jednocześnie z vimem, dodaj &na końcu polecenia sh:

:!sh&
sbell
źródło
9
Lub po prostu użyj :shell.
wchargin
2
To najlepsza odpowiedź do większości celów.
Frank Conry,
To miło, ale co z tym, kiedy polecenie uruchamia serwer, na przykład http-serveri wypisuje dzienniki, które chcę wyświetlić? Chciałbym mieć możliwość przełączania się na moje pliki, dokonywania edycji, a następnie powrotu do dzienników.
Costa
21

Możesz użyć :shellpolecenia (lub skróconego formularza :sh). Od :help :shell:

To polecenie uruchamia powłokę. Kiedy powłoka wychodzi (po komendzie „exit”) powracasz do Vima. Nazwa polecenia powłoki pochodzi od opcji „shell”.

Domyślnie w Ubuntu daje ci to bash. wpisz, exitaby powrócić do vima, gdy skończysz.

zła
źródło
8

Od ostatniego vima możesz teraz:

:terminal

Zostało to początkowo dodane w Vimie 8.0.693 , ale z dużą ilością błędów. Zobacz :help terminal:

WARNING: THIS IS ONLY PARTLY IMPLEMENTED, ANYTHING CAN STILL CHANGE

The terminal feature is optional, use this to check if your Vim has it: 
        echo has('terminal')
If the result is "1" you have it.   

[...]

The terminal feature requires the +multi_byte, +job and +channel features.

==============================================================================
1. Basic use                                            terminal-use

This feature is for running a terminal emulator in a Vim window.  A job can be
started connected to the terminal emulator. For example, to run a shell: 
     :term bash

Or to run a debugger: 
     :term gdb vim

The job runs asynchronously from Vim, the window will be updated to show
output from the job, also  while editing in any other window.
gauteh
źródło
7

Jako dodatek do wszystkich odpowiedzi.

Możesz zainstalować wtyczkę ConqueTerm

Ta wtyczka zapewnia możliwość uruchamiania interaktywnych programów wewnątrz buforów vim.

Po instalacji możesz dodać 2 wiersze do .vimrc:

:nnoremap <S-w> :q!<CR>
:nnoremap <S-t> :ConqueTermSplit bash<CR>

Będziesz mógł uruchomić bash, naciskając Shift+ T, i zamknij bieżącą kartę Conque, naciskając Shift+W

Jest to idealne rozwiązanie, jeśli potrzebujesz szybkiego otwierania / zamykania bash.

Oto gif pokazujący, jak to wygląda

c0rp
źródło
czy możesz rozważyć aktualizację postów? Linki, o których wspomniałeś, wydają się nieaktualne
ggulgulia
4

Inną opcją z ekranem lub byobu jest otwarcie karty w tych programach. Programy te dość łatwo utrzymują otwartą powłokę cq sesji terminalowej i przełączają się między tymi ekranami za pomocą klawiatury.

immeëmosol
źródło
1

Dzięki nowej wersji vim 8.1 wszystko, co musisz zrobić, to just :terminaland voila! (to jest wbudowane)

neelabalan
źródło