Accès au terminal pendant que vous êtes sur Vim

40

Y at-il un moyen d'accéder au terminal tout en utilisant Vim ?

Je n'aime pas ouvrir un autre terminal ou enregistrer et quitter le terminal actuel.

Mohammad Reza Rezwani
la source
Ouvrir un nouvel onglet? (Ctrl + Maj + T)
Wilf
2
Combien de fois fais ça :) Je n'aime pas faire ça D:
Mohammad Reza Rezwani
1
Avez-vous essayé d'utiliser un gestionnaire de fenêtres de terminal comme tmux?
Jrg

Réponses:

67

Vous pouvez envoyer à vim le signal SIGTSTP. Vous faites cela en appuyant sur ctrl+ z. Vim sera suspendu en arrière-plan et vous pourrez utiliser le terminal. Tapez fgle terminal à reprendre avec vim.

Astuce bonus: cela fonctionne sur presque toutes les applications de terminaux. Utilisez cette option bgpour permettre à l'application de continuer à s'exécuter en arrière-plan.

Noleti
la source
21
Ou juste %au lieu de fg. Ou %1, %2etc. si vous avez plusieurs emplois en arrière-plan. jobscommande les listera. (En supposant bashque la coquille.)
Ruslan
4
Je vote pour la méthode ^ z (et plus tard fg), car elle peut être utilisée dans presque tous les processus shell - ce n'est pas un truc vim, c'est un truc d'utilisation pratique qui est incroyablement utile dans d'autres contextes.
dman
35

Dans vim, tapez simplement:

:!sh

:!lance un processus externe - dans ce cas sh, un autre shell. Le contrôle reviendra à vim une fois que vous aurez quitté le shell. Si vous voulez utiliser le shell simultanément avec vim, ajoutez &à la fin de la commande sh:

:!sh&
sbell
la source
9
Ou simplement utiliser :shell.
wchargin
2
C'est la meilleure réponse pour la plupart des objectifs.
Frank Conry
C'est bien, mais qu'en est-il lorsque la commande exécute un serveur, par exemple, http-serveret qu'elle imprime les journaux que je souhaite afficher? J'aimerais pouvoir basculer dans mes fichiers, apporter des modifications, puis revenir aux journaux.
Costa
21

Vous pouvez utiliser la :shellcommande (ou la forme abrégée :sh). De :help :shell:

Cette commande lance un shell. Lorsque le shell se ferme (après la commande "exit"), vous revenez à Vim. Le nom de la commande shell provient de l'option 'shell'.

Par défaut, sur Ubuntu, cela vous donnera bash. tapez exitpour revenir à vim lorsque vous avez terminé.

vilsoup
la source
8

Depuis récemment vim vous pouvez maintenant faire:

:terminal

Cela a été initialement ajouté dans Vim 8.0.693 , mais avec beaucoup de bugs. Voir :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
la source
7

En plus de toutes les réponses.

Vous pouvez installer le plugin ConqueTerm

Ce plugin offre la possibilité d’exécuter des programmes interactifs dans les tampons vim.

Après l'installation, vous pouvez ajouter ces 2 lignes à votre .vimrc:

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

Et vous pourrez courir bashen appuyant sur Shift+ Tet fermer l'onglet actuel de Conque en appuyant sur Shift+W

C'est perferct si vous avez besoin d'une ouverture / fermeture rapide bash.

Voici un gif qui montre à quoi ça ressemble

c0rp
la source
Pouvez-vous s'il vous plaît envisager de mettre à jour les messages? Les liens que vous avez mentionnés semblent obsolètes
ggulgulia
4

Une autre option avec screen ou byobu est d'ouvrir un onglet dans ces programmes. Ces programmes rendent assez facile de garder un shell cq de session-terminal ouvert et de basculer entre ces écrans avec le clavier.

immeëmosol
la source
1

Avec la nouvelle version de vim 8.1, tout ce que vous avez à faire est juste :terminalet le tour est joué! (ceci est construit dans)

Neelabalan
la source