Nota : Esta resposta parece funcionar apenas com as conchas tcsh
e fish
. Eu também tentei bash
, dash
, mksh
, e zsh
, e não trabalhar lá; Eu não sei por que, porque se eu faço as mesmas ações dessas conchas sem Vim, que faz trabalho como esperado ... ( :!
comandos são executados embora o shell).
Eu uso tcsh
, por isso funciona para mim ...
Você pode usar :set shell=/bin/tcsh
para definir seu shell; isso é global, no entanto. Portanto, use-o somente se você acha que esse é um recurso muito importante :-)
^Z
envie um SIGTSTP
sinal, você pode enviar esse sinal com kill
e, em seguida, use-o SIGCONT
para continuar (retomar) o processo. Isso irá desanexar o processo do Vim.
Como é difícil mostrar com isso sleep
(como você sabe que a execução continuou?), Usarei gitk
como exemplo (mas qualquer programa GUI o fará):
Por exemplo, no Vim:
:!gitk %
E então em outro 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
Obviamente, você também pode usar killall
, ou pkill
; por exemplo:
$ killall -TSTP wish
$ killall -CONST wish
Você precisa abrir outro terminal para isso, o que não é o ideal, mas permitirá que você continue usando o Vim e o processo externo.
&
todas as vezes::nnoremap :! :!&<Left>
... Mas é claro, às vezes você não deseja o&
e precisa pressionar <Del> para removê-lo.