Je sais que je peux :!
ou :r!
exécuter une commande externe et éventuellement insérer sa sortie dans le texte. Je peux même jouer :!sh
et je vais engendrer un shell qui vivra jusqu'à ce que je le quitte - mais tant que le shell est actif, Vim est «endormi» et inaccessible. Je dois quitter le shell et en générer un nouveau si je veux retourner à Vim pendant un moment - pas très utile.
Je peux accéder au shell à l'extrémité opposée, en suspendant Vim avec ^Zet gérer le travail Vim via bg
, fg
et jobs
. Cela a plus de sens mais est très lourd à long terme. Je peux utiliser Screen
s'il est disponible (ce n'est souvent pas le cas), ou ouvrir plusieurs fenêtres de mon gestionnaire de fenêtres (et ssh pour cibler l'hôte de chacune d'entre elles en séquence, pour avoir à la fois vim et shell sur l'hôte distant, encombrant à nouveau.)
Ce serait bien si Vim me permettait d'ouvrir une session shell et de la garder, disons, dans l'une de ses fenêtres (internes), ou de me permettre d'y basculer et vice versa. Est-ce que quelque chose comme ça est possible?
:split
, tout en conservant le fichier dans l'autre fenêtre? ... Cela ressemble à un travail pour tmux ou écran pour moi ...Réponses:
Il existe quelques plugins vim qui permettent cela. J'utilise Conque ( Github ).
Après l'avoir placé dans votre répertoire de plugins, il vous suffit de:
Et vous aurez un shell bash interactif dans vim. Vous pouvez ensuite utiliser vos gestes vim habituels pour faire tout ce que vous voudrez peut-être faire dans la fenêtre.
De plus, l'autre plugin est vimshell .
la source
:help shell-window
. (Réponse courte: non.)Avec VIM, je pense que les plugins qui sont là pour le faire ne sont pas si bons que ça, bien que le vimshell IMO soit le plus proche. Cependant, vous devez comprendre que c'est un problème en 2 parties.
À mon avis, il existe 2 approches qui fonctionnent beaucoup mieux à cet égard.
Je dois ajouter qu'il est fort probable que NeoVIM puisse entraîner un changement dans cet aspect, car l'un de ses principaux objectifs est de pouvoir exécuter des tâches de manière asynchrone. Mais jusque-là, c'est le meilleur que nous puissions obtenir à mon avis.
la source
Dans
:help shell-window
nous pouvons lire sur l'exécution de commandes shell dans une fenêtre:Cependant, il existe peu de solutions que vous pouvez utiliser:
une utilisation
screen
spécialement conçue pour ce genre de choses, par exemple:Voir plus sur: GNU Screen Survival Guide at stackoverflow SE
Ou: GNU Screen Splitting , écran Quick Reference pour plus de détails.
VIM-Shell - un patch tiers
vterm - Émulateur de terminal dans vim.
Vimux - interagissez facilement avec tmux de vim.
autre déjà mentionné: Conque
Connexe: Comment exécuter un terminal à l'intérieur de vim? à stackoverflow
la source