最近我正在使用clang_complete
C++ 代码完成。它对小程序来说很好而且很快,但对我来说太慢了(我正在处理大型代码库,通常一个文件需要几秒钟才能编译),即使我使用了 libclang,它可以缓存一些解析结果以加速以后的解析,如果我理解正确的话。
当前clang_complete
将阻塞ClangComplete
直到libclang
完成解析。即使它启动了一个工作线程,主线程仍然会反复检查用户是否按下CTRLC或工作线程是否成功完成。在此期间,vim 变得反应迟钝,从而使该插件难以使用。
我想对这种行为进行一些改进,例如,ClangComplete
不会阻塞,但如果花费超过 0.2 秒,而线程仍在运行,则返回空结果。当 libclang 完成解析后,它检测到我仍在输入相同的补全词,它会弹出一个补全菜单。
这样做的困难在于:
- 如何在那个时候弹出一个菜单,而不引起不同线程之间的一些微妙的竞争条件,
- 它如何知道我是否仍在输入相同的完成词?我认为 vim 本身会跟踪这一点,因为当我输入错误的东西时,例如,
std::strang
而不是std::string
,然后我输入退格键来删除错误ang
,完成菜单会再次出现。那么如何访问这个内部标志呢?