最近我使用clang_complete
来完成C ++代码。这对于小程序来说是好的和快速的,但对于我的情况来说太慢了(我正在处理大型代码库,通常一个文件需要几秒钟来编译),即使我使用了libclang,它可以缓存一些已解析的结果以加速以后的解析,如果我理解正确的话。
目前clang_complete
将在ClangComplete
中阻止,直到libclang
完成解析。即使它启动了一个工作线程,主线程仍然会反复检查用户是否按下 CTRL C 或工作线程成功完成。在此期间,vim变得反应迟钝,从而使这个插件难以使用。
我想对此行为做一些改进,例如,ClangComplete
不会阻塞,但如果花费的时间超过0.2秒,则返回空结果,而线程仍在运行。当libclang完成其解析,并且它检测到我仍在键入相同的完成字时,它将弹出一个完成菜单。
这方面的困难是:
std::strang
而不是std::string
,然后我输入退格键删除错误的ang
,完成菜单将会再次出现。那么我该如何访问这个内部标志?答案 0 :(得分:0)
Vimscript是单线程的;你不必担心比赛。
Vim会将 base (即已经输入/完成的完成单词的一部分)传递到您的函数中。查看:help complete-functions
了解详情和示例。
通常,您的方法(假设您使用Python或Perl等嵌入式语言进行多线程处理)应该是可行的;但是,我还没有看到过类似的尝试。