Remarque : Cette réponse ne semble fonctionner qu'avec les coquilles tcshet fish. J'ai aussi essayé bash, dash, mkshet 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/tcshpour définir votre shell; c'est mondial, cependant. Donc, ne l'utilisez que si vous pensez que c'est une fonctionnalité très importante :-)
^Zenvoyer un SIGTSTPsignal, vous pouvez envoyer ce signal avec kill, puis utiliser SIGCONTpour 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 gitkcomme 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.