colorfulshark
V2EX  ›  Vim

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

  •  
  •   colorfulshark · Jan 6, 2019 · 3201 views
    This topic created in 2704 days ago, the information mentioned may be changed or developed.
    工作中会做一些 Linux 内核的驱动开发,跟正常的应用开发有些不同。
    1. 需要使用内核中的函数,而内核中的函数与内核版本密切相关
    2. 内核代码量很大,即使只把头文件生成 tags,也非常大,影响 vim 响应速度
    3. 一个项目中不会包含大量源文件,一般就只有一两个

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

    目前,我知道的两款轻量级 IDE,qt creator 和 vscode 都可以轻松实现这个功能,但是它们的 vim 输入模式都是残缺的,所以用起来还是有很多限制。
    4 replies    2019-01-18 23:55:55 +08:00
    quinoa42
        1
    quinoa42  
       Jan 6, 2019
    cquery 不行吗?
    chemzqm
        2
    chemzqm  
       Jan 17, 2019
    ccls 可以支持,但是需要 WorkpspaceFolders 功能,暂时还没有 vim 的 LSP client 支持这个功能。
    pony279
        3
    pony279  
       Jan 18, 2019
    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  
       Jan 18, 2019
    > 要么是基于 clang,但是 clang 几乎不能用来编译内核模块

    不太理解,基于 clang 不能编译没关系,只用代码补全,并不冲突。我在用 armcc 开发嵌入式项目,各种 clang 没有的 pragma,__attribute,并不影响 libclang 的补全功能。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3425 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 12:06 · PVG 20:06 · LAX 05:06 · JFK 08:06
    ♥ Do have faith in what you're doing.