我使用vim在文件保存後做了一些緩慢的操作,這些操作讓我的vim卡住了,所以我想知道是否有一些異步方法使這些操作在後臺運行?異步vim腳本?
演示:
autocmd BufWritePost *.js call DoSomeTing()
function! DoSomeThing()
" some operations really slow
endfunction
我使用vim在文件保存後做了一些緩慢的操作,這些操作讓我的vim卡住了,所以我想知道是否有一些異步方法使這些操作在後臺運行?異步vim腳本?
演示:
autocmd BufWritePost *.js call DoSomeTing()
function! DoSomeThing()
" some operations really slow
endfunction
可以使用更強大的語言綁定之一(如Python)來啓動一個新線程,做你的工作在那裏。然而,這通常是一項非常困難的工作。你也不能試圖修改任何vim結構或者從這些其他線程調用任何vim函數 - vim核心中沒有任何線程是安全的。
這會工作嗎?我同意你可以用一種支持的語言很容易地創建一個新的線程,但是vim仍然會等到python/perl/ruby進程完成之後才返回。因此,爲了實現這個目標,你實際上必須創建一個與vim並行運行併爲異步請求提供服務的獨立進程。 – Benj
我不確定vim等待這個過程完成的意思 - 沒有新的過程,我正在討論如何使用vim中嵌入的語言創建一個線程,例如vim是用+ python編譯的。 –
如果vim是用+ python編譯的,這意味着當Python腳本嵌入到vim函數中時,當該函數需要運行時會啓動一個python子進程。這個子進程將(我認爲)在vim函數的生命週期中生存,這意味着無論你在python中創建了多少個線程,vim函數仍然不能返回。 – Benj
我不認爲有一個通用的異步方法。但是,如果你想要啓動一個外部進程(例如ftp來上傳那個.js文件),你可能會以異步的方式啓動它。 – Benj
AFAIK Vim是單線程的。你可以運行(仔細)外部後臺進程,比如'標記代「而不是Vim函數。 – romainl
@Benj @romainl外部流程幾乎沒有調用像'一些VIM命令:lcd' –