gpt4 book ai didi

vim - clang_complete 的异步代码完成

转载 作者:行者123 更新时间:2023-12-04 16:12:30 24 4
gpt4 key购买 nike

最近在用clang_complete做C++代码补全。它对小程序来说既好又快,但对我来说太慢了(我正在处理大型代码库,通常一个文件需要几秒钟来编译),即使我使用了 libclang,它可以缓存一些解析结果以加速以后的解析,如果我理解正确。

当前 clang_complete将阻塞在 ClangComplete直到 libclang解析完毕。即使它启动了一个工作线程,主线程仍会反复检查用户是否按下了 CTRLC 或工作线程是否成功完成。在此期间,vim 变得无响应,从而使该插件难以使用。

我想对这种行为做一些改进,例如,ClangComplete不会阻塞,但如果超过 0.2 秒,而线程仍在运行,则返回空结果。当 libclang 完成解析时,它检测到我仍在输入相同的完成词,它会弹出一个完成菜单。

这样做的困难在于:

  • 那个时候怎么弹出一个菜单,又不会在不同线程之间造成一些微妙的竞争条件,
  • 它怎么知道我是否还在输入相同的完成词?我认为 vim 本身会跟踪这一点,因为当我输入错误时,例如,std::strang而不是 std::string ,然后我输入退格键删除错误 ang ,完成菜单将再次出现。那么如何访问这个内部标志呢?
  • 最佳答案

  • Vimscript 是单线程的;你将不必担心种族。
  • Vim 会将基数(即已经输入/完成的完成词部分)传递到您的函数中。退房 :help complete-functions有关详细信息和示例。

  • 一般来说,您的方法(假设您使用 Python 或 Perl 等嵌入式语言进行多线程)应该是可行的;但是,我还没有看到类似的尝试。

    关于vim - clang_complete 的异步代码完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9053054/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com