Подтвердить что ты не робот

My YouCompleteMe Vim плагин не поддерживает STL

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

4b9b3361

Ответ 1

Теперь читается сообщение о github repo для плагина.

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

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

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

Ответ 2

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

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

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

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

    • а. ~/Каталог загрузок - где все программное обеспечение в мире сбрасывается
    • б. /usr/local, потому что мне нужен последний clang, который я клонировал, скомпилировал и построил.

    Я добавил оба пути к этому массиву: 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 etc work - (то, что сообщение "builtin include" появилось на экране в первую очередь)

  • Я также выкинул в цикл некоторые операторы печати, чтобы посмотреть, что он видит и что делает.

    измененная функция части кода "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
    
  • Я понял, что ожидаемое поведение файлов [-1] не было тем, что автор намеревался и модифицировал после условия if, чтобы оставаться неизменным.

  • Перезапустите vim с новым файлом cpp и просмотрите: сообщения - он сработал.

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