2013-03-07 11 views
10

Właśnie skompilowałem i zainstalowałem wtyczkę Vim, Vundle i YouCompleteMe zgodnie ze wstępem na Github. Ale wtyczka YouCompleteMe nie działa dobrze w moim Vimie. Może automatycznie uzupełnić nazwę zmiennej, ale nie kończy automatycznie operacji obiektów STL (wektor, mapa). Nie może nawet automatycznie uzupełnić "this->" w klasie. Zawsze mi mówi "(^ U^N^P) Nie znaleziono wzoru." Czy już to widzieliście? Używam Ubuntu 12.04. Co mam zrobić?Wtyczka My YouCompleteMe Vim nie obsługuje STL

+3

można potwierdzić, że masz zainstalowane wszystkie dependancies? Jakie kroki * dokładnie * podążyłeś? W jakim poradniku podążałeś ("super szybki" lub "pełny")? Dlaczego pytasz o tę bardzo ogólną stronę zamiast własnego trackera problemów YCM? – romainl

+0

Mam problemy z uruchomieniem YCM. Zrobiłem szybką instalację. Próbując przekopywać się, że nie działa teraz trochę stracił na tym, jak rozwiązać problemy z YCM. Jest wiele części, których nie rozumiem. Czy możesz podać kilka sugestii @romaini o tym, jak rozwiązywać problemy! – Prospero

+0

@romainl Skompilowałem długą drogę i nadal miałem kłopoty, potem spojrzałem na plik konfiguracyjny ycm i zdałem sobie sprawę, że to był problem, który miałem. Nie wiem, gdzie są moje standardowe biblioteki =. – Prospero

Odpowiedz

2

Przyszedłem tu również szukając odpowiedzi, nie znam Pythona i nigdy wcześniej nie włamywałem się do czegoś innego. Oto jak do tego doszedłem.

  1. Znajdź komunikat o błędzie. Poszedłem do ~/.vim/bundle/YouCompleteMe i grepped na "wbudowane obejmuje". Czemu? ponieważ jest to część komunikatu o błędzie:

    • a. Nie znalazłem tego, więc przeszedłem na wyższy poziom (cd ..) i powtórzę.
    • b. Znalazłem go poniżej: ./vundle/plugin/libclang.py: print "OSTRZEŻENIE: biblioteka NxD libclang nie może znaleźć załączników wbudowanych."
  2. Zmodyfikowany komunikat o błędzie, aby upewnić się, że ten plik był uruchamiany (moje inicjały NxD) - działał.

  3. Komunikat jest drukowany initClangComplete
  4. komunikat jest wyświetlany po wywołaniem builtinHeaderPath = getBuiltinHeaderPath (library_path) Stąd zagłębić głębiej builtinHeaderPath
  5. getBuiltinHeaderPath prowadzi pętlę znanych katalogów. Mam 2 instalacje typu clang

    • a. ~/Katalog do pobrania - gdzie wszystkie oprogramowanie na świecie jest zrzucane
    • b./Usr/local, ponieważ chciałem najnowszą szczęk którego sklonowany, opracowany i zbudowany

    dodałam obie ścieżki do tej tablicy: 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" 
    

    I zauważył, że "" jest separator elementy tablicy w python. Też wcześniej zauważyłem, że print -> umieszcza komunikat w pythonie, a argumenty są w stylu c% s,% d itd. Pracy - (w ten sposób na ekranie pojawił się komunikat "wbudowany dodatek")

  6. Zrzuciłem także niektóre instrukcje drukowania do pętli, więc zobacz, co widział i co robi. Kod

    część funkcji zmodyfikowany „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. zdałem sobie sprawę, że oczekiwane zachowanie plików [-1] nie było, co autor ma i zmodyfikowała go po jeśli warunek pozostać niezmienione.

  8. Zrestartuj vima z nowym plikiem cpp i przyjrzyj się: wiadomościom - zadziałało.

    Nadzieję, że pomaga.

6

Plik readme na github repo dla wtyczki rozwiązuje teraz problem.

Jest to spowodowane problemem z libclang. Kompilacja z języka binarnego używa poprawnych domyślnych ścieżek wyszukiwania nagłówków, ale kompilacja z biblioteki libclang.so nie działa. Problem wydaje się mieć wpływ na niektóre systemy operacyjne bardziej niż na inne. Wygląda na to, że w szczególności OS X Mavericks ma z tym problemy.

Obecne obejście polega na wywołaniu echa | clang -v -E -x C++ - i spójrz na ścieżki pod #include < ...> tutaj zaczyna się wyszukiwanie: nagłówek. Powinieneś wziąć te ścieżki, poprzedzić -system do każdej ścieżki i dołączyć je wszystkie do listy flag, które zwrócisz z funkcji FlagsForFile w pliku .ycm_extra_conf.py.

Warto również spojrzeć na odpowiednim issue