2013-08-03 15 views
10

Czuję, że mam niesamowitą konfigurację programowania w C++ przy użyciu Vima, ale nie mogę znaleźć sposobu, aby powiedzieć Vimowi, YCM i Syntasticowi, gdzie szukać nagłówków. Naprawdę denerwujące byłoby ręczne ustawianie zmiennych ścieżki dołączania dla Vim, YCM i Syntastic za każdym razem, gdy chcę pracować nad projektem, gdy te informacje istnieją w pliku Makefile. Czy istnieją zautomatyzowane rozwiązania do ustawiania globalnej ścieżki dołączania?Vim, C++, YCM i Syntastic obejmują problemy z ścieżkami

Edycja: Nie znajdzie nagłówków, jeśli ustawię taką ścieżkę ": set path =".,/Usr/include, include, ../include,/home/steven/ovgl/include, , ""

+0

Wyobrażam sobie, że mógłbyś stworzyć cel makefile, który wygenerowałby konfigurację YCM ze zmiennych makefile ... nigdy tego nie testowałeś, ale prosty skrypt mógłby załatwić sprawę. Następnie dla każdego nowego projektu uwzględnisz ten cel w pliku makefile, uruchom 'make ycm_setup' i będziesz gotowy do kodu. –

+2

Byłoby miło, gdybyś zamieścił linki do wtyczek lub przynajmniej pełne imiona ([YouCompleteMe zamiast YCM] (https://github.com/Valloric/YouCompleteMe)). – mMontu

Odpowiedz

3

Twoje nagłówki powinny pojawić się w twoich plikach znaczników (zobacz :h tags, jeśli nie wiesz o tym).

Następnie YouCompleteMe jest w stanie odczytać informacje o swoich nagłówkach z pliku znacznika, jak wyjaśniono w plugin faq:

YCM nie odczytuje identyfikatory z moich tagów plików

First , umieść let g:ycm_collect_identifiers_from_tags_files = 1 w swoim vimrc.

Upewnij się, że korzystasz z rozbudowanych plików Ctags do tworzenia plików znaczników od jedynym obsługiwanym formatem znaczników jest format Exuberant Ctags. Format z "zwykłych" ctags NIE jest obsługiwany. Dane wyjściowe z ctags --version powinny zawierać listę "Exuberant Ctags".

Ctags musi być wywoływana z --fields=+l (to małe litery L, a nie jeden) rozwiązaniem, ponieważ YCM potrzebuje pole language:<lang> w znacznikach wyjściu.

UWAGA: Mac OS X ma domyślnie zainstalowane "zwykłe" ctagi. napisz zainstalować ctags dostaniesz wersję Exuberant Ctags.

Upewnij się również, że opcja tagów Vima jest ustawiona poprawnie. Szczegółowe informacje można znaleźć w części: :h 'tags' . Jeśli chcesz zobaczyć, które pliki znaczników YCM odczyta dla danego bufora , uruchom :echo tagfiles() z odpowiednim buforem aktywnym. Zauważ, że ta funkcja będzie wyświetlać tylko te pliki znaczników, które już istnieją.

+0

Dodałem zmienną do mojego vimrc, a następnie wypróbowałem oba "ctags -R * --fields = + l" i "etags -R * --fields = + l", ale YCM wydaje się nie robić nic z tagami. – SteveDeFacto

+0

Upewnij się, że korzystasz z ekstrawaganckich Ctags. Możesz także sprawdzić ustawienie opcji "znaczników", jak zaznaczono w ostatnim akapicie odpowiedzi. YCM powinien wziąć pod uwagę zawartość "tagów", jak podano w FAQ; jeśli uważasz, że tak nie jest, powinieneś [otworzyć problem na wtyczce] (https://github.com/Valloric/YouCompleteMe/issues) – mMontu

+1

Nie rozumiem, dlaczego to nie działa, więc nie będę być w stanie wyjaśnić problem, jeśli go otworzę. Od tygodni staram się, aby YCM działał prawidłowo, więc wróciłem do clang_complete i supertab. westchnienie ... – SteveDeFacto

1

Miałem do czynienia z podobnym problemem. Potrzebowałem tego do użycia przy programowaniu przy użyciu llvm. Rozwiązałem go, wykonując poniższe czynności:

  1. Ctags -R --fields=+l * w swojej bazie projektu/kodu.
  2. W pliku .vimrc użytkownika, dodać let g:ycm_collect_identifiers_from_tags_files = 1
  3. cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/
  4. Dodaj kolejny wiersz w terminalu .vimrc let g:ycm_global_ycm_extra_conf = '/home/<user>/ycm_extra_conf.py'
  5. resetu lub uderzyć bash

Uwaga: Należy zacząć Vima w katalogu z obecne w nim znaczniki. Lub może być konieczne jawne określenie katalogu, w którym znajdują się znaczniki.

+1

Instrukcja YCM wyraźnie stwierdza, że ​​powinieneś zmienić plik konfiguracyjny, a nie tylko użyć podanego przykładu. –

0

Szukałeś YCM-Generator. Jest to skrypt, który generuje ycm_extra_conf.py, uruchamiając make i szukając wszystkich użytych flag. Uruchomiłeś go raz dla projektu i uruchomiłeś ponownie tylko po zmianie pliku make.

Powiązane problemy