Je suis habitué à Emacs, mais j'essaie de voir Vim pour lequel je préfère.
Une des choses que j'aime chez Emacs est la possibilité de gérer un terminal dans Emacs. Est-ce possible à l'intérieur de Vim? Je sais que vous pouvez exécuter des commandes à partir de Vim, mais j'aimerais pouvoir exécuter un terminal à l'intérieur d'un onglet.
Je recommanderais certainement screen
pour quelque chose comme ceci. Vim est un éditeur de texte, pas un shell.
J'utiliserais Ctrl+AS pour scinder la fenêtre actuelle horizontalement, ou sur l'écran d'Ubuntu et d'autres versions corrigées, vous pouvez utiliser Ctrl+A|(pipe) à diviser verticalement. Puis utiliser Ctrl+ATab (ou équivalent sur certains systèmes, Ctrl+ACtrl+I qui peut être plus facile à taper) pour basculer entre les fenêtres. Il existe d'autres commandes permettant de modifier la taille et la disposition des fenêtres.
Ou une utilisation moins avancée de screen
consiste simplement à ouvrir plusieurs fenêtres en plein écran et à basculer entre elles. C’est ce que je fais normalement, j’utilise rarement la fonction d’écran divisé.
La question Guide de survie de l'écran GN contient un certain nombre de conseils utiles si vous n'êtes pas familier avec son utilisation.
périmé d'août 2011
Départ Conque Shell (aussi sur GitHub ). Vous permet d'exécuter n'importe quel programme interactif dans vim, pas seulement un shell.
Je ne sais pas exactement ce que vous essayez d'atteindre (je n'ai jamais utilisé Emacs), mais vous pouvez exécuter des commandes dans Vim en tapant:
:! somecommand [ENTER]
Et si vous voulez taper plusieurs commandes ou jouer dans un shell pendant un moment, vous pouvez toujours utiliser:
:! bash (or your favourite Shell) [ENTER]
Une fois la commande ou Shell terminée, vous aurez la possibilité d’appuyer sur Enter pour revenir à la fenêtre de votre éditeur
Vim est intentionnellement léger et n'a pas la capacité de faire des choses de type non-éditeur, tout comme exécuter un shell complet dans un panneau/onglet de Vim, mais comme mentionné ci-dessus, des additifs tiers, tels que vim-Shell, vous permettent faire ce genre de chose.
En règle générale, si je souhaite basculer entre Vim et mon shell (Bash), je frappe simplement CTRL+Z pour mettre en pause le processus Vim, jouez dans mon Shell, puis tapez 'fg' lorsque je veux revenir à Vim - garder mon éditeur et mon Shell Nice et les séparer.
La façon dont je contourne ceci est:
fg
.:sh
puis ctrl+d
pour revenir (bash)
Mise à jour:
Vous pouvez mapper ctrl+d
dans vim pour exécuter :sh
, ce qui vous permet de basculer rapidement entre bash et vim.
noremap <C-d> :sh<cr>
Si activé dans votre version de Vim, un terminal peut être démarré avec la commande :term
.
La prise en charge de la fenêtre de terminal a été ajoutée à Vim 8. Il s’agit d’une fonctionnalité facultative qui peut être activée lors de la compilation de Vim avec la fonctionnalité + terminal. Si votre version de Vim est compatible avec les terminaux, :echo has('terminal')
affichera "1".
Entrer :term
vous placera en mode Terminal-Job, où vous pourrez utiliser le terminal comme prévu.
En mode Terminal-Job, appuyez sur Ctrl-W N
ou Ctrl-\ Ctrl-N
pour passer en mode Terminal-Normal, ce qui permet de déplacer le curseur et les commandes à être exécuté de manière similaire au mode Normal de Vim. Pour revenir au mode Terminal-Job, appuyez sur i
.
D'autres réponses mentionnent des fonctionnalités similaires dans Neovim.
Cette question est assez ancienne, mais pour ceux qui la trouvent, il existe une nouvelle solution possible: Neovim contient un émulateur de terminal à part entière, de première classe, qui fait exactement ce que ConqueTerm a essayé de faire. Il suffit de lancer :term <your command here>
.
<C-\><C-n>
quittera le mode terme en mode normal. Si vous êtes comme moi et que vous préférez sortir du mode terme, vous pouvez ajouter ceci à votre nvimrc:
tnoremap <ESC><ESC> <C-\><C-N>
Ensuite, appuyez deux fois sur la touche ESC pour revenir au mode terminal, vous permettant ainsi de manipuler le tampon sur lequel la commande en cours d'exécution écrit.
N'oubliez pas cependant que nvim est en pleine phase de développement au moment où je publie cette réponse, un autre moyen de sortir du mode terminal peut être ajouté. Comme Ctrl+\Ctrl+n passe en mode normal à partir de presque tous les modes , je ne m'attends pas à ce que cette réponse devienne fausse, mais sachez que si cela ne fonctionne pas, cette réponse pourrait être obsolète.
Finalement, une commande native :terminal
a été ajoutée à vim en 2017.
Voici un extrait du : terminal readme:
Cette fonctionnalité permet d’exécuter un émulateur de terminal dans une fenêtre Vim. Un travail peut être démarré connecté à l'émulateur de terminal. Par exemple, pour exécuter un shell:
:term bash
Ou pour exécuter la commande de construction:
:term make myprogram
Le travail s'exécute de manière asynchrone à partir de Vim, la fenêtre sera mise à jour pour afficher la sortie du travail, également lors de l'édition dans une autre fenêtre.
:term
Cependant, cette fonctionnalité a été ajoutée récemment dans Vim 8.1. Cette publication a récemment été publiée. Vous devrez peut-être effectuer une mise à jour pour pouvoir l'utiliser.
Je sais que je ne réponds pas directement à la question, mais je pense que c'est une bonne approche. Personne n'a mentionné tmux (ou du moins pas comme réponse autonome). Tmux est un multiplexeur terminal comme un écran. La plupart des choses peuvent être faites dans les deux multiplexeurs, mais après tout, c'est plus facile à configurer. De plus, tmux est actuellement développé plus activement que screen et il est entouré d’un assez grand écosystème, comme des outils facilitant la configuration, ecc.
Aussi pour vim, il y a un autre plugin: ViMUX , qui aide beaucoup dans l'interaction entre les deux outils. Vous pouvez appeler des commandes avec:
:call VimuxRunCommand("ls")
Cette commande crée une petite division horizontale en dessous du volet actuel de vim.
Il peut également vous permettre de lancer une invite si vous ne souhaitez pas exécuter la commande complète:
<Leader>vp :VimuxPromptCommand<CR>
Comme ce n’était pas assez, il y a au moins 6 'plugins spécifiques à une plateforme':
g:vroom_use_vimux
Voici un "cas d'utilisation" de Nice: Tests à la demande avec Vimux et Turbux avec Spork et Guard
Quelqu'un a déjà suggéré https://github.com/Shougo/vimshell.vim , mais ils n'ont pas mentionné pourquoi. Par conséquent, lorsque je me suis éloigné de cette question, j'ai perdu beaucoup de temps à essayer les autres options (beaucoup mieux classées).
Shougo/vimshell est la réponse. Voici pourquoi:
En plus d’être un émulateur de terminal, VimShell vous permet de naviguer à travers les sorties du terminal en mode normal et visuel. Ainsi, si une commande que vous exécutez génère une sortie que vous souhaitez copier et coller à l'aide du clavier uniquement ... VimShell couvre ce problème.
Aucune des autres options mentionnées, y compris la commande: terminal de NeoVim, ne le fait. Neovim's: le terminal se rapproche, mais manque au moins des moyens suivants à partir du 18/02/2017:
Déplace le curseur à la fin du tampon, au lieu de le dernier, au même endroit que VimShell. Énorme perte de temps.
Ne supporte pas modifiable = 1
voir ne discussion à ce sujet chez Github , des plugins aussi utiles que vim-easymotion ne peuvent pas être utilisés.
Ne supporte pas l'affichage des numéros de ligne comme le fait Vimshell.
Ne perdez pas de temps sur les autres options, y compris Neovim: le terminal. Allez avec VimShell.
Vous voudrez peut-être jeter un coup d'œil à la commande :sh
(voir :help sh
dans Vim).
Non vous ne pouvez pas:
http://vimdoc.sourceforge.net/htmldoc/tips.html#Shell-window
La principale nouveauté de Vim 8.1 est la prise en charge de l’exécution d’un terminal dans une fenêtre Vim.
:term
ouvrira le terminal dans une autre fenêtre de Vim.
Le seul moyen que je connaisse consiste à utiliser vim-Shell , un correctif tiers.
Je l'utilise maintenant, vous pouvez essayer. VimShell
Essayez vterm , qui est un shell à peu près complet dans vim. Il est un peu buggé avec son historique et ses fonctions claires, et est toujours en développement, mais c'est quand même assez bon