Nota : questa risposta sembra funzionare solo con le shell tcsh
e fish
. Ho anche provato bash
, dash
, mksh
, e zsh
, e non ci lavoro; Io non so perché, perché se faccio le stesse azioni di questi gusci senza Vim, si fa il lavoro come previsto ... ( :!
comandi vengono eseguiti anche se il guscio).
Mi capita di usare tcsh
, quindi funziona per me ...
Puoi usare :set shell=/bin/tcsh
per impostare la tua shell; questo è globale, però. Quindi usalo solo se pensi che questa sia una funzione molto importante :-)
^Z
inviare un SIGTSTP
segnale, è possibile inviare questo segnale con kill
, quindi utilizzare SIGCONT
per continuare (riprendere) il processo. Questo distaccerà il processo da Vim.
Poiché è difficile mostrarlo con questo sleep
(come fai a sapere che ha continuato l'esecuzione?), Userò gitk
come esempio (ma qualsiasi programma GUI lo farà):
Ad esempio in Vim:
:!gitk %
E poi in un altro terminale:
$ 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
Ovviamente puoi anche usare killall
, oppure pkill
; per esempio:
$ killall -TSTP wish
$ killall -CONST wish
È necessario aprire un altro terminale per questo, che non è l'ideale, ma ti consentirà di continuare a utilizzare sia il tuo Vim che il tuo processo esterno.
&
ogni volta::nnoremap :! :!&<Left>
... Ma ovviamente, a volte non vorrai il&
, e dovrai premere <Del> per rimuoverlo.