V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
colorfulshark
V2EX  ›  Vim

Vim 下有没有包含头文件之后就可以补全函数声明的插件

  •  
  •   colorfulshark · 2019-01-06 00:32:41 +08:00 · 2403 次点击
    这是一个创建于 1930 天前的主题,其中的信息可能已经有所发展或是发生改变。
    工作中会做一些 Linux 内核的驱动开发,跟正常的应用开发有些不同。
    1. 需要使用内核中的函数,而内核中的函数与内核版本密切相关
    2. 内核代码量很大,即使只把头文件生成 tags,也非常大,影响 vim 响应速度
    3. 一个项目中不会包含大量源文件,一般就只有一两个

    我的需求其实非常简单,C 语言包含头文件之后,通过设置头文件路径,然后自动补全头文件中的函数声明,如果能提示参数就更好了。尝试了很多插件,要么是基于 tags,要么是基于 clang,但是 clang 几乎不能用来编译内核模块,看到有作者说 YCM 集成的 omnicppcomplete 可以做到,但是它似乎也是基于 tags 的。

    目前,我知道的两款轻量级 IDE,qt creator 和 vscode 都可以轻松实现这个功能,但是它们的 vim 输入模式都是残缺的,所以用起来还是有很多限制。
    4 条回复    2019-01-18 23:55:55 +08:00
    quinoa42
        1
    quinoa42  
       2019-01-06 05:25:42 +08:00
    cquery 不行吗?
    chemzqm
        2
    chemzqm  
       2019-01-17 17:30:16 +08:00
    ccls 可以支持,但是需要 WorkpspaceFolders 功能,暂时还没有 vim 的 LSP client 支持这个功能。
    pony279
        3
    pony279  
       2019-01-18 23:53:02 +08:00
    https://github.com/Rip-Rip/clang_complete - 支持参数展开,我没体验过
    https://github.com/zchee/deoplete-clang - 没研究过,应该不支持参数展开
    https://github.com/tweekmonster/deoplete-clang2 - 没研究过,因该也不支持
    https://github.com/ncm2/ncm2-pyclang - 这个是我开发的插件,支持参数展开
    pony279
        4
    pony279  
       2019-01-18 23:55:55 +08:00
    > 要么是基于 clang,但是 clang 几乎不能用来编译内核模块

    不太理解,基于 clang 不能编译没关系,只用代码补全,并不冲突。我在用 armcc 开发嵌入式项目,各种 clang 没有的 pragma,__attribute,并不影响 libclang 的补全功能。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4727 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:10 · PVG 09:10 · LAX 18:10 · JFK 21:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.