我想调用一个在调用后的固定时间内执行某些操作的函数(比如说30秒)。可以在初始化期间或在使用期间的某个时间调用该函数。 在我等待的时候,我会像往常一样继续使用vim。这有可能吗?
如果有帮助我使用的是用perl和python编译的vim而且我有addon vimproc。
答案 0 :(得分:0)
您最好的候选人是CursorHold,CursorHoldI
事件。当用户暂停4秒时,它们会触发,因此频繁发生,但也可能不会注意到当时触发的慢速操作。
你无法避免Vim阻挡;特别是不能加载慢插件。 Vim(脚本)是单线程的;没有后台处理是可能的。虽然您可以使用(小心!)集成(Perl,Python,...)解释器(用于后台任务)的多线程支持,但当您需要“回调”到Vim核心时,这是没有用的,这是您需要的用Vimscript编写的插件。
答案 1 :(得分: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。