Remarque : Cette réponse ne semble fonctionner qu'avec les coquilles tcsh
et fish
. J'ai aussi essayé bash
, dash
, mksh
et zsh
, et il ne pas y travailler; Je ne sais pas pourquoi, parce que si je fais les mêmes actions de ces coquilles sans Vim, il ne fonctionne comme prévu ... ( :!
commandes sont exécutées si le shell).
Il se trouve que j'utilise tcsh
, donc ça marche pour moi ...
Vous pouvez utiliser :set shell=/bin/tcsh
pour définir votre shell; c'est mondial, cependant. Donc, ne l'utilisez que si vous pensez que c'est une fonctionnalité très importante :-)
^Z
envoyer un SIGTSTP
signal, vous pouvez envoyer ce signal avec kill
, puis utiliser SIGCONT
pour continuer (reprendre) le processus. Cela détachera le processus de Vim.
Parce qu'il est difficile de montrer avec cela sleep
(comment savez-vous qu'il a continué son exécution?), Je vais utiliser gitk
comme exemple (mais tout programme GUI fera l'affaire):
Par exemple dans Vim:
:!gitk %
Et puis dans un autre terminal:
$ ps ax | grep gitk
30105 pts/10 S+ 0:00 -bin/tcsh -c gitk
30108 pts/10 Sl+ 0:00 wish /sbin/gitk --
$ kill -TSTP 30108
$ kill -CONT 30108
Vous pouvez bien sûr également utiliser killall
, ou pkill
; par exemple:
$ killall -TSTP wish
$ killall -CONST wish
Pour cela, vous devez ouvrir un autre terminal, ce qui n'est pas idéal, mais cela vous permettra de continuer à utiliser à la fois votre Vim et votre processus externe.
&
chaque fois::nnoremap :! :!&<Left>
... Mais bien sûr, parfois vous ne voudrez pas de&
, et devrez appuyer sur <Del> pour le supprimer.