2013-03-07 2 views
10

Я только что скомпилировал и установил Vim, Vundle и YouCompleteMe плагин в соответствии с введением на Github. Но плагин YouCompleteMe не работает в моем Vim. Он может автоматически заполнять имя переменной, но не выполняет автоматическое завершение работы объектов STL (вектор, карта). Он не может даже автоматически завершить «this->» в классе. Он всегда говорит мне »(^ U^N^P) Шаблон не найден." Вы видели это раньше? Я использую Ubuntu 12.04. Что мне делать?My YouCompleteMe Vim плагин не поддерживает STL

+3

Можете ли вы подтвердить, что вы установили все зависимостей? Какие шаги * вы * точно следили? В каком учебнике вы следовали («сверхбыстрый» или «полный»)? Почему вы спрашиваете об этом самом универсальном сайте вместо собственного трекера YCM? – romainl

+0

У меня есть проблемы с работой YCM. Я быстро установил. Пытаясь копать в y, он не работает, теперь немного потерял, как бороться с YCM. Есть много частей, которые я не понимаю. Можете ли вы дать некоторые предложения @romaini о том, как бороться с стрельбой! – Prospero

+0

@romainl Я скомпилировал длинный путь и все еще имел проблемы, затем посмотрел файл конфигурации ycm и понял, что это была проблема, с которой я столкнулся. Я не знаю, где мои стандартные библиотеки =. – Prospero

ответ

2

Я пришел сюда, чтобы найти ответ, я не знаю питона и никогда не взломал что-то еще раньше. Итак, вот как я это сделал.

  1. Обнаружение сообщения об ошибке. Я пошел в ~/.vim/bundle/YouCompleteMe и grepped для "builtin includes". Зачем? поскольку это является частью сообщения об ошибке

    • a. Я не нашел его там, поэтому пошел на более высокий уровень (cd ..) и повторил.
    • b. Найденный ниже: ./vundle/plugin/libclang.py: print «ПРЕДУПРЕЖДЕНИЕ: NxD libclang не может найти встроенный компонент».
  2. Изменено сообщение об ошибке, чтобы убедиться, что этот файл был запущен (мои инициалы NxD).

  3. Сообщение печатается initClangComplete
  4. Сообщение печатается после этого вызова builtinHeaderPath = getBuiltinHeaderPath (library_path) поэтому мы вникать глубже в builtinHeaderPath
  5. getBuiltinHeaderPath запускает цикл на известных каталогов. У меня есть 2 clang установки

    • 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-style% 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. Перезапустите vim с новым файлом cpp и просмотрите: сообщения - это сработало.

    Надеюсь, что это поможет.

6

Readme на github repo для плагина теперь устраняет проблему.

Это связано с проблемой с libclang. Компиляция из clang двоичного файла использует правильные пути поиска по умолчанию, но компиляция из libclang.so этого не делает. Проблема, похоже, влияет на некоторые ОС больше, чем на других. Похоже, что OS X Mavericks, в частности, имеет проблемы с этим.

Текущее обходное решение для вызова эха | clang -v -E -x C++ - и посмотрите на пути под #include < ...> поиск начинается здесь: заголовок. Вы должны использовать эти пути, prepend -систему для каждого отдельного пути и добавить все их в список флагов, которые вы возвращаете из своей функции FlagsForFile в файле .ycm_extra_conf.py.

Вы также можете взглянуть на соответствующий issue

Смежные вопросы