我想調用一個函數,它在被調用後的固定時間執行某些操作(比如30秒)。該功能可以在初始化過程中或在使用過程中的某個時間調用。 當我等待時,我會像往常一樣繼續使用vim。這可能嗎?啓動vim後的固定時間調用函數
如果它有幫助我使用vim編譯perl和python和我並有插件vimproc。
我想調用一個函數,它在被調用後的固定時間執行某些操作(比如30秒)。該功能可以在初始化過程中或在使用過程中的某個時間調用。 當我等待時,我會像往常一樣繼續使用vim。這可能嗎?啓動vim後的固定時間調用函數
如果它有幫助我使用vim編譯perl和python和我並有插件vimproc。
你最好的候選人是CursorHold,CursorHoldI
事件。它們在用戶暫停4秒時觸發,因此頻繁發生,但也可能他不會注意到當時觸發的緩慢操作。
你不能避免Vim塊;尤其不適合加載緩慢的插件。 Vim(腳本)是單線程的;沒有後臺處理是可能的。儘管您可以使用(仔細地)集成(Perl,Python,...)解釋器的多線程支持(用於後臺任務),但當您需要「回調」到您需要的Vim核心時,這沒有任何幫助用Vimscript編寫的插件。
我想出了以下內容:
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。
你需要什麼?爲什麼要延期?你對延遲的數量有多靈活? –
好吧,我想這樣做的原因如下:我按需加載一些插件,因爲我運行的東西有時非常慢。我使用函數commmand':ActivateAddons'來加載特定的插件。但是如果我能夠在比賽開始後的5到10秒內做到這一點,那將會很好。時間會很靈活,但我不想使用自動命令。 –
skeept
剛剛啓動Vim 30秒前:-) –