V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
YUCOAT
V2EX  ›  Linux

我安装的Vim插件YouCompleteMe为何不能给C++自动补全?

  •  
  •   YUCOAT · 2013-05-22 17:49:03 +08:00 · 31471 次点击
    这是一个创建于 4228 天前的主题,其中的信息可能已经有所发展或是发生改变。
    照着教程重新编译了Vim,并安装了YouCompleteMe插件。

    然后我随便编辑一个cpp文件的时候出问题了。

    在自动补全方面,它只能补全我以前输入过的单词。
    也就是说,只有在我先前输入过include的前提下,下次我输入include的时候它才能自动补全。

    而像这种:

    vector<int>S;
    S.

    当我输入“.”的时候,根本不会列出任何成员函数。


    是因为我安装的方式不正确吗?
    ---------------------------------------------
    我是这样安装的:
    在安装好Vundle之后,在vimrc中添加:

    Bundle 'Valloric/YouCompleteMe'

    然后启动vim就,执行“:BundleInstall”
    进过一段时间之后,安装完毕,退出vim。进入

    ~/.vim/bundle/YouCompleteMe

    执行:

    ./install.sh --clang-complete

    ---------------------------------------------
    以上是我的安装步骤,平台是Ubuntu 12.04(准确地说是Mint)。我有确认过我的Vim的版本。安装的过程中没见到错误提示。

    我的GCC的版本是4.8
    20 条回复    2018-05-10 16:00:19 +08:00
    YUCOAT
        1
    YUCOAT  
    OP
       2013-05-22 17:56:06 +08:00
    Vim这么多插件,有没有一款好一点的代码补全插件,能够像codeblocks那样,我不要求它支持多少语言,只要C或者C++就好了。

    我用vim的时间不短了,大概也有两年了吧,我都没怎么用过vim插件。因为那些我用得着的插件配置起来往往有点麻烦,而且用起来也有有各种各样的瑕疵,所以我才没有去用插件。

    我之前用过c.vim这款插件,没用多久我就把它删除了,因为这款插件提供的模板与我的编程风格相差太远了,一个又一个地去改他们的模板又有点麻烦。
    laskuma
        2
    laskuma  
       2013-05-22 18:27:09 +08:00 via iPhone
    没什么好办法吧 以前用过neocomplete(貌似是叫这个?) 也不好用 vim的补全确实是个问题 希望楼下能给个好的解法!
    jjgod
        3
    jjgod  
       2013-05-22 18:37:42 +08:00
    YouCompleteMe 在 Vim 启动的时候如果无法载入 clang 是会提示错误的。
    YUCOAT
        4
    YUCOAT  
    OP
       2013-05-22 20:10:51 +08:00
    @jjgod 没有错误提示哦!
    ooscrewyou
        5
    ooscrewyou  
       2013-05-22 22:34:55 +08:00 via Android
    youcompleteme 補全C家族的語言需要在項目目錄裡建一個配置文件的 寫入你編譯項目用到的編譯參數 具體我也不清楚 我不寫C 你去github項目頁面看吧 有個C++的範例的
    beakey
        6
    beakey  
       2013-05-22 23:42:36 +08:00
    我用python也是同样的问题。。
    mr_pppoe
        7
    mr_pppoe  
       2013-05-23 01:16:47 +08:00
    我觉得目前YouCompleteMe是最好用的带语义补全的插件了。vim --version看看里面rubyinterp/pythoninterp之类的功能有没有?
    你补全不成功的时候用:messages看看报什么错?确保你的代码在没有敲S.的之前是可以编译通过的。
    Ricepig
        8
    Ricepig  
       2013-05-23 01:23:06 +08:00
    别折腾了,迟早转xcode/vs吧,vim是编辑器,就别硬当ide使了
    cassyfar
        9
    cassyfar  
       2013-05-23 08:36:21 +08:00
    @YUCOAT 你指定了ycm_extra_conf.py了没有
    let g:ycm_global_ycm_extra_conf='directory/to/ycm_extra_conf.py'

    可以参照ycm自带的或者这个-> https://gist.github.com/locojay/4950253
    alexrezit
        10
    alexrezit  
       2013-05-23 08:45:47 +08:00
    @Ricepig
    表示赞同...
    vim 还是适合写前端, 一个 zen-coding 搞定一切.
    写 C 神马的什么都要用插件太麻烦了, 不同环境还要重新配置.
    zuyf
        11
    zuyf  
       2013-05-23 10:33:36 +08:00   ❤️ 1
    @YUCOAT 有两种可能性:
    1. libclang 版本太旧, 最好卸载系统自带的libclang, 然后编译youcompleteme, 它会自动下载一个最新版。
    2. 没有设置好ycm_extra_conf.py, 关键是include路径要正确。 打开c++文件的时候, ycm会提示你将加载这个文件, 如果没有提示, 说明没有找到, 或者ycm编译不正确。 加载成功的话, 可以在vim中运行:YcmDiags看一下报什么错, 如果YcmDiags很快返回而且没报错, 可能是ycm_extra_conf.py中有错误, 可能是python的语法错误。
    zuyf
        12
    zuyf  
       2013-05-23 10:44:07 +08:00
    @laskuma @YUCOAT @mr_pppoe
    对C/C++来说youcompleteme现在应该是最好选择, 借助libclang的强大功能, 补全效率和准确性极高。 不管你的C++代码用什么怪异的写法, 只要能编译通过, 都能补全, 即使是C++11的lambda和auto都没有障碍, 比codeblock这些根据tag index的补全强大多了。
    YUCOAT
        13
    YUCOAT  
    OP
       2013-05-23 21:09:27 +08:00
    @cassyfar 这个我还真没有。
    YUCOAT
        14
    YUCOAT  
    OP
       2013-05-23 21:23:25 +08:00
    在vimrc文件中加入

    let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py'

    嘿嘿!
    就OK了!
    beakey
        15
    beakey  
       2013-05-23 23:03:13 +08:00
    @zuyf
    @YUCOAT
    python 如何解决?谢啦~~
    YUCOAT
        16
    YUCOAT  
    OP
       2013-05-24 13:03:08 +08:00
    @beakey 照着我的说法做啊。。Python还是可以正常补全的!
    zuyf
        17
    zuyf  
       2013-05-24 15:20:20 +08:00   ❤️ 1
    beakey
        18
    beakey  
       2013-05-24 15:23:52 +08:00
    @YUCOAT 不行啊,我要的是新建一个.py文件进去之后第一次输入import就能补全。 照着做之后还是不行,难道是我自己的配置问题?
    karottc
        19
    karottc  
       2016-03-31 01:42:28 +08:00
    mac 下面, python 可以补全, C++的不行,不知道怎么回事啊
    itgoyo
        20
    itgoyo  
       2018-05-10 16:00:19 +08:00
    我这边配置了`let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py' `
    也不可以给 C++,和 Python 补全啊,还有可能是什么原因吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5751 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:23 · PVG 11:23 · LAX 19:23 · JFK 22:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.