2013-04-12 43 views
0

我想調用一個函數,它在被調用後的固定時間執行某些操作(比如30秒)。該功能可以在初始化過程中或在使用過程中的某個時間調用。 當我等待時,我會像往常一樣繼續使用vim。這可能嗎?啓動vim後的固定時間調用函數

如果它有幫助我使用vim編譯perl和python和我並有插件vimproc。

+1

你需要什麼?爲什麼要延期?你對延遲的數量有多靈活? –

+0

好吧,我想這樣做的原因如下:我按需加載一些插件,因爲我運行的東西有時非常慢。我使用函數commmand':ActivateAddons '來加載特定的插件。但是如果我能夠在比賽開始後的5到10秒內做到這一點,那將會很好。時間會很靈活,但我不想使用自動命令。 – skeept

+1

剛剛啓動Vim 30秒前:-) –

回答

0

你最好的候選人是CursorHold,CursorHoldI事件。它們在用戶暫停4秒時觸發,因此頻繁發生,但也可能他不會注意到當時觸發的緩慢操作。

你不能避免Vim塊;尤其不適合加載緩慢的插件。 Vim(腳本)是單線程的;沒有後臺處理是可能的。儘管您可以使用(仔細地)集成(Perl,Python,...)解釋器的多線程支持(用於後臺任務),但當您需要「回調」到您需要的Vim核心時,這沒有任何幫助用Vimscript編寫的插件。

0

我想出了以下內容:

if has('python') "{{{ LoadPythonDelayed 
function! LoadPythonDelayed() 

python << ENDP 
import time 
from threading import Thread 
import vim 

def LoadAddonPy(): 
    time.sleep(2) 
    vim.command('call LoadAddon()') 

Thread(target=LoadAddonPy).start() 

ENDP 
return '' 
endfunction 

call LoadPythonDelayed() 
endif 

似乎工作至今,也許它可能會引發錯誤(如果這樣做,我會放在這裏)。 到目前爲止,我注意到的一件事是通過使用這個我不能在線程存在之前退出vim。

相關問題