Hinweis : Diese Antwort scheint nur mit den Shells tcsh
und zu funktionieren fish
. Ich habe auch versucht bash
, dash
, mksh
, und zsh
, und es nicht dort arbeiten; Ich bin mir nicht sicher , warum, denn wenn wir die gleichen Aktionen aus diesen Schalen ohne Vim tun, es tut wie erwartet ... ( :!
Befehle obwohl die Shell ausgeführt werden).
Ich benutze zufällig tcsh
, also funktioniert es für mich ...
Sie können verwenden :set shell=/bin/tcsh
, um Ihre Shell festzulegen; Dies ist jedoch global. Verwenden Sie es also nur, wenn Sie der Meinung sind, dass dies eine sehr wichtige Funktion ist :-)
^Z
Senden Sie ein SIGTSTP
Signal, Sie können dieses Signal mit senden kill
und dann verwenden SIGCONT
, um den Vorgang fortzusetzen (fortzusetzen). Dadurch wird der Prozess von Vim getrennt.
Da es schwierig ist, dies zu zeigen sleep
(woher wissen Sie, dass die Ausführung fortgesetzt wurde?), Werde ich gitk
als Beispiel verwenden (aber jedes GUI-Programm wird dies tun):
Zum Beispiel in Vim:
:!gitk %
Und dann in einem anderen 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
Sie können natürlich auch verwenden killall
, oder pkill
; zum Beispiel:
$ killall -TSTP wish
$ killall -CONST wish
Sie müssen hierfür ein anderes Terminal öffnen, was nicht ideal ist, aber es ermöglicht Ihnen, sowohl Ihr Vim als auch Ihren externen Prozess weiter zu verwenden.
&
jedes Mal zum Anhängen auffordern ::nnoremap :! :!&<Left>
... Aber manchmal möchten Sie das natürlich nicht&
und müssen <Del> drücken, um es zu entfernen.