2013-03-07 112 views
10

我剛剛根據Github上的介紹編譯並安裝了Vim,Vundle和YouCompleteMe插件。 但是,YouCompleteMe插件在我的Vim中無法正常工作。它可以自動完成變量的名稱,但不會自動完成STL對象(矢量,地圖)的操作。它甚至不能在課堂上自動完成「this->」。它總是告訴我「(^ U^N^P)模式未找到。」 你們有沒有看過這個? 我使用Ubuntu 12.04。 我該怎麼辦?My YouCompleteMe Vim插件不支持STL

+3

你能確認你已經安裝了所有的依賴關係?你究竟遵循了哪些步驟?你遵循什麼教程(「超級快」或「完整」)?你爲什麼要問這個非常通用的網站而不是YCM自己的問題追蹤器? – romainl 2013-03-07 08:31:52

+0

我也有一些麻煩讓YCM工作。我做了一個快速安裝。試圖挖掘它現在沒有工作,現在有點失去了如何解決YCM的問題。有很多部分我不明白。你能提出一些關於如何排除故障的建議@romaini! – Prospero 2013-03-20 08:54:15

+0

@romainl我編譯了很長的路,仍然有麻煩,然後看着ycm配置文件,並意識到這是我遇到的問題。我不知道我的標準庫在哪裏=。 – Prospero 2013-03-20 20:40:13

回答

2

我來到這裏尋找答案,我不知道python,從來沒有黑客攻擊過其他東西。所以這是我如何去做的。

  1. 找到錯誤信息。我去了〜/ .vim/bundle/YouCompleteMe,並且爲「內建包含」進行了grep。爲什麼?因爲這是錯誤信息的一部分

    • a。我沒有找到它,所以去了一個更高的水平(CD ..)並重復。
    • b。發現它看到下面 ./vundle/plugin/libclang.py:print「警告:NxD libclang無法找到內置包含。」
  2. 修改錯誤消息,以確保該文件正在運行(我的姓名縮寫NxD) - 工作。

  3. 該消息由initClangComplete
  4. 這個調用 builtinHeaderPath = getBuiltinHeaderPath(LIBRARY_PATH) 因此我們深入鑽研builtinHeaderPath
  5. getBuiltinHeaderPath之後打印的打印信息上運行公知的目錄的循環。我有2鐺裝置

    • a。 〜/下載目錄 - 世界上所有軟件都被轉儲的地方
    • b。在/ usr /地方,因爲我想我克隆,編譯和生成

    我加入這兩個路徑此陣的最新鐺:我注意的是「」是的分離knownPaths

    "/usr/local/include", 
        "/usr/local/lib/clang/3.3", 
        "/home/nxd/Downloads/clang+llvm-3.2-x86_64-linux-ubuntu-12.04/clang/3.2" 
    

    python中的數組元素。 我之前也注意到print - >在python中輸出消息,參數是c樣式%s,%d等工作 - (這就是「內置包含」消息如何在屏幕上顯示的原因)

  6. 我也將一些打印語句放入循環中,看看它看到了什麼以及它在做什麼。

    部分代碼修改功能「getBuiltinHeaderPath」

    print "active path from knownPaths is |%s|" %path 
        files = os.listdir(path) 
        print " files in path is |%s|" % files 
        print " len (files) is |%d|" % len(files) 
        if len(files) >= 1: 
        files = sorted(files) 
        subDir = files[-1] 
        else: 
        subDir = '.' 
        # nxd - 
        subDir = '.' 
        path = path + "/" + subDir + "/include/" 
        print " len (files) is |%d|" % len(files) 
        print " files[-1] is |%s|" % files[-1] 
        print "searching in path : |%s| " % path 
    
  7. 我意識到文件的預期行爲[-1]是作者的意圖不是和修改了它,如果條件後保持不變。

  8. 用一個新的cpp文件重新啓動vim,並看着:messages - 它工作。

    希望有所幫助。

6

該插件的github repo自述現在解決了該問題。

這是由libclang引起的問題。從clang編譯二進制使用正確的默認頭搜索路徑,但從libclang.so編譯不。這個問題似乎比其他操作系統更受影響。看來OS X Mavericks尤其有這方面的問題。

當前的解決方法是調用echo | clang -v -E -x C++ - 然後查看#include <下的路徑...>搜索從這裏開始:標題。您應該採用這些路徑,將-isystem前綴添加到每個單獨路徑,並將它們全部附加到您從.ycm_extra_conf.py文件中的FlagsForFile函數返回的標誌列表中。

你可能也想看看相應的issue