2012-04-30 76 views
7

我使用vim在文件保存後做了一些緩慢的操作,這些操作讓我的vim卡住了,所以我想知道是否有一些異步方法使這些操作在後臺運行?異步vim腳本?

演示:

autocmd BufWritePost *.js call DoSomeTing() 

function! DoSomeThing() 
    " some operations really slow 
endfunction 
+0

我不認爲有一個通用的異步方法。但是,如果你想要啓動一個外部進程(例如ftp來上傳那個.js文件),你可能會以異步的方式啓動它。 – Benj

+0

AFAIK Vim是單線程的。你可以運行(仔細)外部後臺進程,比如'標記代「而不是Vim函數。 – romainl

+0

@Benj @romainl外部流程幾乎沒有調用像'一些VIM命令:lcd' –

回答

5

可以使用更強大的語言綁定之一(如Python)來啓動一個新線程,做你的工作在那裏。然而,這通常是一項非常困難的工作。你也不能試圖修改任何vim結構或者從這些其他線程調用任何vim函數 - vim核心中沒有任何線程是安全的。

+0

這會工作嗎?我同意你可以用一種支持的語言很容易地創建一個新的線程,但是vim仍然會等到python/perl/ruby​​進程完成之後才返回。因此,爲了實現這個目標,你實際上必須創建一個與vim並行運行併爲異步請求提供服務的獨立進程。 – Benj

+1

我不確定vim等待這個過程完成的意思 - 沒有新的過程,我正在討論如何使用vim中嵌入的語言創建一個線程,例如vim是用+ python編譯的。 –

+0

如果vim是用+ python編譯的,這意味着當Python腳本嵌入到vim函數中時,當該函數需要運行時會啓動一個python子進程。這個子進程將(我認爲)在vim函數的生命週期中生存,這意味着無論你在python中創建了多少個線程,vim函數仍然不能返回。 – Benj