Lưu ý : Câu trả lời này dường như chỉ hoạt động với tcsh
và fish
shell. Tôi cũng đã cố gắng bash
, dash
, mksh
, và zsh
, và nó không làm việc ở đó; Tôi không chắc chắn lý do tại sao, vì nếu tôi làm những hành động tương tự từ những vỏ mà không Vim, nó không làm việc như mong đợi ... ( :!
lệnh được thực hiện mặc dù vỏ).
Tôi tình cờ sử dụng tcsh
, vì vậy nó hoạt động với tôi ...
Bạn có thể sử dụng :set shell=/bin/tcsh
để thiết lập vỏ của bạn; đây là toàn cầu, mặc dù. Vì vậy, chỉ sử dụng nó nếu bạn nghĩ rằng đây là một tính năng rất quan trọng :-)
^Z
gửi SIGTSTP
tín hiệu, bạn có thể gửi tín hiệu này với kill
, sau đó sử dụng SIGCONT
để tiếp tục (tiếp tục) quá trình. Điều này sẽ tách quá trình từ Vim.
Vì khó hiển thị với điều này sleep
(làm sao bạn biết nó vẫn tiếp tục thực thi?), Tôi sẽ sử dụng gitk
làm ví dụ (nhưng bất kỳ chương trình GUI nào cũng sẽ làm):
Ví dụ trong Vim:
:!gitk %
Và sau đó trong một thiết bị đầu cuối khác:
$ 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
Tất nhiên bạn cũng có thể sử dụng killall
, hoặc pkill
; ví dụ:
$ killall -TSTP wish
$ killall -CONST wish
Bạn cần phải mở một thiết bị đầu cuối khác, điều này không lý tưởng, nhưng nó sẽ cho phép bạn tiếp tục sử dụng cả Vim và quy trình bên ngoài của bạn.
&
mỗi lần::nnoremap :! :!&<Left>
... Nhưng tất nhiên, đôi khi bạn sẽ không muốn&
và sẽ phải nhấn <Del> để xóa nó.