Accedi al terminale mentre sei su Vim


40

C'è un modo per accedere al terminale mentre si utilizza Vim ?

Non mi piace aprire un altro terminale o salvare ed uscire dal terminale corrente.


Apri una nuova scheda? (Ctrl + Maiusc + T)
Wilf

2
Quante volte lo faccio :) Non mi piace farlo D:
Mohammad Reza Rezwani,

1
Hai provato a utilizzare un gestore di finestre terminal come tmux?
jrg

Risposte:


67

È possibile inviare a Vim il segnale SIGTSTP. Puoi farlo premendo ctrl+ z. Vim verrà sospeso in background e puoi usare il terminale. Digita fgil terminale per riprendere con vim.

Suggerimento bonus: funziona su quasi tutte le applicazioni terminali. Utilizzare bgper abilitare l'applicazione a continuare l'esecuzione in background.


21
O semplicemente %invece di fg. Oppure %1, %2ecc. Se hai molti lavori in background. jobsil comando li elencherà. (Supponendo bashcome il guscio.)
Ruslan,

4
Io voto per il metodo ^ z (e poi fg), perché può essere usato in quasi tutti i processi di shell - non è una cosa vim, è un trucco di shell come usare che è incredibilmente utile in altri contesti.
Dman,

35

In vim, basta digitare:

:!sh

:!avvia un processo esterno - in questo caso sh, un'altra shell. Il controllo tornerà a VIM una volta usciti dalla shell. Se si desidera utilizzare la shell contemporaneamente a vim, aggiungere &alla fine del comando sh:

:!sh&

9
O semplicemente usa :shell.
wchargin,

2
Questa è la risposta migliore per la maggior parte degli scopi.
Frank Conry,

È bello ma che dire quando il comando esegue un server, come http-servere stampa i registri che voglio visualizzare? Mi piacerebbe essere in grado di passare ai miei file, apportare modifiche, quindi tornare ai registri.
Costa

21

È possibile utilizzare il :shellcomando (o la forma abbreviata :sh). Da :help :shell:

Questo comando avvia una shell. Quando la shell esce (dopo il comando "exit") si ritorna a Vim. Il nome per il comando shell deriva dall'opzione 'shell'.

Di default, su Ubuntu, questo ti darà bash. digitare exitper tornare a VIM quando hai finito.


8

Dalla recente vim ora puoi fare:

:terminal

Questo è stato inizialmente aggiunto in Vim 8.0.693 , ma con molti bug. Vedi :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.

7

Come aggiunta a tutte le risposte.

Puoi installare il plugin ConqueTerm

Questo plugin offre la possibilità di eseguire programmi interattivi all'interno di buffer vim.

Dopo l'installazione puoi aggiungere queste 2 righe al tuo .vimrc:

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

E sarai in grado di eseguire bashpremendo Shift+ Te chiudere la scheda Conque corrente premendo Shift+W

È perfetto se hai bisogno di aprire / chiudere velocemente bash.

Ecco GIF che mostra come è


puoi prendere in considerazione l'idea di aggiornare i post? I link che hai citato sembrano obsoleti
ggulgulia,

4

Un'altra opzione con schermo o byobu è quella di aprire una scheda all'interno di tali programmi. Questi programmi rendono abbastanza facile mantenere aperta una shell cq di sessione terminale e passare da una schermata all'altra con la tastiera.


1

Con la nuova versione di vim 8.1 tutto ciò che devi fare è solo :terminale voilà! (questo è incorporato)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.