Comment puis-je ouvrir un Shell dans une fenêtre Vim?


112

Je peux ouvrir un shell en utilisant la commande: shell dans Vim, mais je ne peux pas éditer un fichier et en même temps utiliser le shell.

Existe-t-il un moyen de diviser Vim dans de nombreuses fenêtres (ou onglets) et d'ouvrir un shell dans l'un d'entre eux?


1
Il y avait un patch shell pour vim mais il ne compile plus afaik. Le plus proche d'un vrai shell est d'utiliser screen ou tmux. C'est la plus grande chose qui me manque dans vim.
Randy Morris

Réponses:


85

Neovim et Vim le 8.2supportent nativement via la :ter[minal]commande.

Voir terminal-windowdans la documentation pour plus de détails.


5
Cela devrait être la solution acceptée pour vim> = 8.0.
amath

3
Comment diviser le terminal verticalement?
Kiran Kumar Kotari

2
@KiranKumarKotari essayez vsplit term://bashsi vous utilisez Neovim.
prater

4
avec vim 8.0 ou version ultérieure, la terminalcommande divise la fenêtre et donne un shell de commande avec une couleur spéciale sur la barre d'état de la fenêtre. Nappe.
NoelProf

@KiranKumarKotari vert [ical] ter [minal]
MPA95

46

Eh bien, cela dépend de votre système d'exploitation - en fait, je ne l'ai pas testé sur MS Windows - mais Conque est l'un des meilleurs plugins du marché.

En fait, ça peut être mieux, mais ça marche.


4
Si vous utilisez Vundle pour gérer les plugins, vous pouvez ajouter Bundle 'jewes / Conque-Shell' à votre fichier .vimrc et exécuter: BundleInstall pour l'installer.
Mingjiang Shi

Une chose à surveiller: l'exigence + python ou + python3 pour vi peut être un tueur dans certains environnements de travail.
cfi

Voici l'URL mise à jour (avec captures d'écran): github.com/wkentaro/conque.vim
Walty Yeung

18

:vspou :sp- divise vim en deux instances mais vous ne pouvez pas utiliser: shell dans une seule d'entre elles.

Pourquoi ne pas afficher un autre onglet du terminal pas un autre onglet de vim. Si vous aimez l'idée, vous pouvez l'essayer: Ctrl-shift-t.et passez de l'une à l'autre avec Ctrl - pageupetCtrl - pagedown

Si vous voulez juste quelques commandes shell, vous pouvez créer n'importe quelle commande shell dans vim en utilisant !

Par exemple :!./a.out.


1
Et pour exécuter un exécutable actuellement ouvert, vous pouvez utiliser la vimmagie des chemins comme ceci::!./%
cprn

Pourquoi ne pas afficher un autre onglet du terminal - tout le monde n'utilise pas vim dans un émulateur de terminal au-dessus d'une interface graphique… De Ctrl-que je suppose que votre réponse suppose gnome-terminal ou un émulateur similaire.
törzsmókus

8

Vous pouvez utiliser tmuxou screen(le second ne peut faire que des fractionnements horizontaux sans patch) pour fractionner votre terminal. Mais je ne sais pas comment avoir une instance de Vim dans les deux volets.


4
screen peut faire des divisions verticales si vous le construisez à partir de git.
Randy Morris

8

Si vous ne l'avez pas encore découvert, vous pouvez utiliser le plugin d'écran incroyable .

Conque est aussi exceptionnel mais je trouve l'écran beaucoup plus pratique (il ne "jettera pas" votre buffer par exemple et vous pouvez juste envoyer les commandes que vous voulez vraiment après les avoir éditées dans votre buffer)


6

Je suppose que c'est une question assez ancienne, mais maintenant en 2017. Nous avons neovim, qui est un fork de vim qui ajoute le support des terminaux.

Ainsi, l'invocation :termouvrirait une fenêtre de terminal. La beauté de cette solution par opposition à l'utilisation de tmux (un multiplexeur de terminal) est que vous aurez les mêmes liaisons de fenêtre que votre vimconfiguration. neovim est compatible avec vim, vous pouvez donc copier et coller votre fichier .vimrcet cela fonctionnera.

Plus d'avantages sont que vous pouvez passer en mode normal sur le terminal ouvert et que vous pouvez effectuer une copie et une édition de base. C'est aussi très utile pour les commits git, je suppose, car tout ce qui se trouve dans votre tampon peut être utilisé en saisie semi-automatique.

Je vais mettre à jour cette réponse car vim prévoit également de publier le support du terminal, probablement dans vim 8.1. Vous pouvez suivre la progression ici: https://groups.google.com/forum/#!topic/vim_dev/Q9gUWGCeTXM

Une fois qu'il est publié, je pense que c'est une configuration plus supérieure que l'utilisation de tmux.


6
Il est sorti dans Vim 8.0 je pense
LangeHaare

3

VimShell de Shougo , qui peut compléter automatiquement les noms de fichiers s'il est utilisé avec neocomplcache


1

Pas absolument ce que vous demandez, mais vous pourriez être intéressé par mon plugin vim-notebook qui permet à l'utilisateur de maintenir un processus d'arrière-plan vivant et de le faire évaluer une partie du document courant (et d'écrire la sortie dans le document). Il est destiné à être utilisé sur des documents de type bloc-notes contenant des morceaux de code à évaluer.


0

Vous voudrez peut-être ouvrir un programme "écran", un écran partagé, ouvrir le shell sur l'un et vim sur un autre. Travaille pour moi.


Annulé le -1 car il n'y avait aucune explication. D'ailleurs, j'ai testé la solution de plugin d'écran vim et ce n'est pas si différent de la solution de mrcybul. @mrcybul: des chars pour avoir essayé d'aider. Pour éviter d'être critiqué, lisez attentivement les autres réponses et ajoutez les vôtres uniquement si vous pensez que cela apporte quelque chose de nouveau. Indiquez également pourquoi votre solution peut être meilleure dans certains cas.
Titou

0

J'utilise actuellement tmux.

Installation: sudo apt-get install tmux Exécutez-le: tmux

Ctrl + b suivi de Ctr +%: il divise votre fenêtre de terminal en deux moitiés verticales.

Ctrl + "flèche gauche | flèche droite": se déplace entre les terminaux.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.