Je suis habitué à Emacs, mais j'essaye Vim pour voir lequel je préfère.
Une chose que j'aime chez Emacs est la possibilité d'exécuter un terminal dans Emacs. Est-ce possible à l'intérieur de Vim? Je sais que vous pouvez exécuter des commandes depuis Vim, mais j'aimerais pouvoir exécuter un terminal à l'intérieur d'un onglet.
:! <command>
ce que vous cherchez?:term
commande qui ouvre un nouveau terminal dans une nouvelle fenêtre fractionnée. Si cela ne fonctionne pas pour vous, vérifiezvim --version | grep -o .terminal
si cette fonctionnalité est disponible (+terminal
) ou indisponible (-terminal
).Réponses:
Je recommanderais certainement
screen
quelque chose comme ça. Vim est un éditeur de texte, pas un shell.J'utiliserais Ctrl+ASpour diviser la fenêtre actuelle horizontalement, ou dans l'écran d'Ubuntu et d'autres versions corrigées, vous pouvez utiliser Ctrl+A|(pipe) pour diviser verticalement. Ensuite, utilisez Ctrl+ATab(ou de manière équivalente sur certains systèmes, Ctrl+ACtrl+Iqui peuvent être plus faciles à taper) pour basculer entre les fenêtres. Il existe d'autres commandes pour modifier la taille et la disposition des fenêtres.
Ou une utilisation moins avancée
screen
consiste simplement à ouvrir plusieurs fenêtres en plein écran et à basculer entre elles. C'est ce que je fais normalement, je n'utilise la fonction d'écran partagé que de temps en temps.La question du guide de survie de l'écran GNU contient un certain nombre de bons conseils si vous n'êtes pas familier avec son utilisation.
la source
Périmé depuis août 2011
Découvrez Conque Shell (également sur GitHub ). Vous permet d'exécuter n'importe quel programme interactif dans vim, pas seulement un shell.
la source
:ConqueTerm bash <CR>
,vim <CR>
,:ConqueTerm bash
.... l'horreur récursive !!Je ne sais pas exactement ce que vous essayez de réaliser (je n'ai jamais utilisé Emacs), mais vous pouvez exécuter des commandes dans Vim en tapant:
Et si vous voulez taper plusieurs commandes, ou jouer dans un shell pendant un moment, vous pouvez toujours utiliser:
Une fois la commande ou le shell terminé, vous aurez la possibilité d'appuyer sur Enterpour 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 éditorial, tout comme l'exécution d'un shell à part entière dans un volet / onglet Vim, mais comme mentionné ci-dessus, il existe des addons tiers tels que vim-shell qui vous permettent de faire ce genre de chose.
En général, si je veux basculer entre Vim et mon shell (Bash), je tape simplement CTRL+ Zpour mettre le processus Vim en pause, jouer dans mon shell, puis taper 'fg' lorsque je veux revenir à Vim - garder mon éditeur et mon coquille agréable et séparée.
la source
:r! command [ENTER]
mentionné dans les commentaires.La façon dont je contourne cela est:
fg
.la source
:!bash
est une meilleure façon de le faire:!bash
plus agréable queCtrl+z
? (Je me demandais juste)Ctrl+Z
, par exemple, vous pouvez vous déplacer vers un autre dossier, puisls
alorsgit status
, etc.Ctrl+Z
est une "pause", vous pouvez "reprendre" avecfg
. Mais avec:! Bash, comme je le sais jusqu'à présent, vous ne pouvez exécuter qu'une seule commande à la fois, ou même si vous pouvez exécuter plus d'une commande à la fois, ce n'est toujours pas pratique. Donc, dans l'ensemble, «Ctrl + Z» est beaucoup mieuxS'il est activé dans votre version de Vim, un terminal peut être démarré avec la
:term
commande.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é de terminal +. Si votre version de Vim prend en charge les terminaux,
:echo has('terminal')
affichera "1".Entrer
:term
vous placera dans Terminal-Job mode , où vous pourrez utiliser le terminal comme prévu.En mode Terminal-Job , appuyez sur
Ctrl-W N
ouCtrl-\ Ctrl-N
bascule le mode sur Terminal-Normal , ce qui permet de déplacer le curseur et d'exécuter les commandes de la même manière que le mode Normal de Vim . Pour revenir au mode Terminal-Job , appuyez suri
.D'autres réponses mentionnent des fonctionnalités similaires dans Neovim.
la source
i
après avoir basculé du mode de navigation ctrl-wN. C'est une fonctionnalité qui tue même sur tmux et fonctionne également sur Windows.:term
?brew install vim --override-system-vi
et:term
fonctionne parfaitement. Merci d'avoir partagé!:vertical :term
se divisera verticalement avec le terminal dans la fenêtre de gauche.:vertical :botright :term
sera divisé verticalement avec le terminal dans la fenêtre de droite. Vous pouvez également mettre en page manuellement les fenêtres, puis utiliser:term ++curwin
pour ouvrir un terminal dans la fenêtre active.:sh
puisctrl+d
pour rentrer (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>
la source
ctrl+z
etfg
sont légèrement plus rapides, étant donné que vous n'avez pas à taper:sh
dans ce cas.:sh
si vous faites la carte. Aprèsnoremap
, vous pouvez simplementCtrl+D
passer de vim àsh
, et puisque^D
c'est EOF, qui termine lesh
, vous reviendrez donc à vim. La seule touche peut basculer entresh
et vim.La principale nouvelle fonctionnalité 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 à l'intérieur de Vim.la source
exit
quittera le terminal, puis utilisera:q
pour fermer la fenêtreFinalement, un natif
:terminal
commande été ajoutée à vim en 2017.Voici un extrait du : readme du terminal :
la source
:bn
comme d'habitude. Pas besoin de tuer le terminal et ce n'est pas un point de non retour :)Cette question est assez ancienne, mais pour ceux qui la trouvent, il existe une nouvelle solution possible: Neovim contient un émulateur de terminal de première classe à part entière, qui fait exactement ce que ConqueTerm a essayé de faire. Courez simplement
:term <your command here>
.<C-\><C-n>
quittera le mode terme pour revenir au mode normal. Si vous êtes comme moi et que vous préférez que escape quitte le mode term, vous pouvez l'ajouter à votre nvimrc:Et puis, appuyer deux fois sur ESC quittera le mode terminal en mode normal, vous pourrez donc manipuler le tampon dans lequel la commande en cours d'exécution écrit.
Cependant, gardez à l'esprit que nvim est en cours de développement au moment où je publie cette réponse, une autre façon de quitter le mode terminal peut être ajoutée. Comme Ctrl+\Ctrl+npasse en mode normal à partir de presque tous les modes, je ne m'attends pas à ce que cette réponse devienne incorrecte, mais sachez que si cela ne fonctionne pas, cette réponse pourrait être obsolète.
https://github.com/neovim/neovim
la source
:term
Cependant, cette fonctionnalité a été récemment ajoutée dans Vim 8.1, qui, à partir de cette publication, vient d'être publiée récemment, vous devrez donc peut-être la mettre à jour pour l'utiliser.
la source
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 écran de type multiplexeur terminal. La plupart des trucs peuvent être créés dans les deux multiplexeurs, mais afaik tmux, il est plus facile à configurer. En outre, tmux est actuellement plus activement développé que screen et il y a un assez grand écosystème autour de lui, comme des outils qui aident à la configuration, etc.
Aussi pour vim, il existe 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 un petit fractionnement horizontal sous le volet actuel de vim.
Il peut également vous permettre d'exécuter à partir d'une invite au cas où vous ne voudriez pas exécuter la commande entière:
<Leader>vp :VimuxPromptCommand<CR>
Comme cela n'était pas suffisant, il existe au moins 6 'plugins spécifiques à la plateforme':
g:vroom_use_vimux
Voici un joli "cas d'utilisation": Tests à la demande avec Vimux et Turbux avec Spork et Guard
la source
Quelqu'un a déjà suggéré https://github.com/Shougo/vimshell.vim , mais il n'a pas expliqué pourquoi. Par conséquent, lorsque je suis sorti de cette question, j'ai perdu beaucoup de temps à essayer les autres options (bien 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 la sortie du terminal en mode normal et visuel. Ainsi, si une commande que vous exécutez donne une sortie que vous souhaitez copier et coller à l'aide du clavier uniquement ... VimShell couvre cela.
Aucune des autres options mentionnées, y compris la commande: terminal dans NeoVim ne le fait. Neovim's: le terminal se rapproche, mais ne fonctionne pas au moins de la manière suivante au 18/02/2017:
Déplace le curseur à la fin du tampon, au lieu de le garder au dernier endroit comme le fait VimShell. Énorme perte de temps.
Ne supporte pas de
modifiable = 1
voir une discussion à ce sujet sur Github , donc les plugins utiles comme vim-easymotion ne peuvent pas être utilisés.Ne prend pas en charge l'affichage des numéros de ligne comme le fait Vimshell.
Ne perdez pas de temps sur les autres options, dont Neovim's: terminal. Allez avec VimShell.
la source
:terminal
peut absolument faire de même.:terminal
ne peut pas faire la même chose:VimShell
en termes de navigation et d'édition, et de manière fondamentale. Voir l'explication ci-dessus.Vous voudrez peut-être jeter un œil à la
:sh
commande (voir:help sh
dans Vim).Commandes diverses
la source
set shell=/bin/sh
fera en sorte que vim utilise un shell plus silencieux pour ses commandes.Non tu ne peux pas:
http://vimdoc.sourceforge.net/htmldoc/tips.html#shell-window
la source
splitvt
- il modifie les codes de contrôle des couleurs et rendvim
tout à fait inutilisable.La seule façon que je sache est d'utiliser vim-shell , un patch tiers.
la source
J'utilise cela maintenant, vous pouvez essayer. VimShell
la source
Essayez vterm , qui est un shell à peu près complet à l'intérieur de vim. Il est légèrement bogué avec son histoire et ses fonctions claires, et toujours en développement, mais il est toujours assez bon
la source
En supposant que votre version de vim prend en charge la
+term
commande en premier, définissez shell pour que vim l'utilise dans une seule commande (par exempleset=/usr/bin/zsh
), puis exécutez la commande+term
(par exemplebo 15vs +term
). vous devrez peut-être faire des manœuvres supplémentaires de vos fenêtres (c'est-à-dire en supprimer une et la faire pivoter), mais vous aurez votre terminal.la source
Je reconnais que je ne réponds pas strictement à votre question, mais ce qui a mieux fonctionné pour moi lorsque j'utilise Vim et Terminals dans la même fenêtre est Tmux (qui est une sorte de "exécuter dans le logiciel d'arrière-plan" comme, similaire à l'écran, bien que cela on fonctionne mieux avec les splits et les tabulations).
Ce billet vous aidera à comprendre comment ils fonctionnent ensemble: «Tmux et Vim - encore mieux ensemble» .
De cette façon, nous pouvons convertir Vim en un puissant IDE
la source
Divisez l'écran et exécutez la commande
term ++curwin
pour exécuter le terminal à l'intérieur du tampon Vim. La commande suivante fait les deux et a fonctionné pour moi:la source