Emacs nie może konkurować z innym IDE, jeśli nie ma funkcji automatycznego uzupełniania. Automatyczne uzupełnianie sprawia, że jestem bardziej wydajnym programistą. Wiem o rozszerzeniu Auto Complete Mode , ale nie działa z C ++.
Jak mogę osiągnąć inteligentne i wydajne autouzupełnianie w C ++?
To pytanie zostało pierwotnie zadane przez Malabarbę w sprawie propozycji Area 51: Jak uzyskać inteligentne autouzupełnianie w C ++?
c++
completion
Łukasz
źródło
źródło
Odpowiedzi:
Uwaga: Jestem autorem trybu ironii
Jeśli chcesz tylko inteligentnego automatycznego uzupełniania, mogę polecić tryb ironii z ironią firmy .
Kolejnym narzędziem, które nie było jeszcze cytowane, jest emacs-ycmd .
źródło
irony-mode
clang_codeCompleteAt
z przeanalizowaną JT (ale niezapisane zmiany) trwają 3-5 sekund. Czy jestirony-mode
szybszy?Sprawdź mój przewodnik . Wymienia kilka metod automatycznego uzupełniania w C / C ++.
Te opcje to:
Korzystanie z ironii . Zdecydowanie zalecane, ponieważ wykorzystuje Clang i jest łatwy w konfiguracji w porównaniu z innymi rozwiązaniami.
Korzystanie z wbudowanego parsera Emacsa. Jest to najlepsze automatyczne uzupełnianie, jakie można uzyskać z poziomu parsera Emacsa, Semantic, ale byłoby to powolne w przypadku dużych projektów, takich jak jądro Linuksa.
Używanie
company-mode
pakietu zcompany-clang
. Zapewnia dobre uzupełnianie kodu dla ścieżek dołączania do systemu, ponieważ może on automatycznie pobierać ścieżki z Clanga, ale musi dokonać pewnej konfiguracji lokalnego projektuKorzystanie
company-mode
zcompany-gtags
. Jako uzupełnienie wykorzystuje bazę danych znaczników wygenerowaną z GNU Global. Możesz użyć tego, aby dostarczyć kod kompletny lokalnie do twojego projektu. Nie jest do końca inteligentny, ponieważ rzuca ci wszystko w wygenerowanej bazie danych.rtags
idzie dalej, zapewniając serwer do analizy na żywo. Ale konfiguracja jest skomplikowana w porównaniu z czystym rozwiązaniem Elisp.źródło
Odniosłem wielki sukces w firmie RTags + Company .
RTags potrzebuje osobnego
rdm
działającego demona, który używa clang do uzupełniania kodu, nawigacji kodu i refaktoryzacji.rdm
działa również jako baza danych symboli, co oznacza, że autouzupełnianie jest znacznie szybsze niż jakiekolwiek rozwiązanie wywołujące bezpośrednioclang_codeCompleteAt
.RDM potrzebuje informacji z flagami kompilacji dla projektów, które mogą być uciążliwe, ale jeśli się porady od RTags strony i podlinkowujemy
gcc-rtags-wrapper.sh
dogcc
,g++
,cc
ic++
RDM automatycznie aktualizowany o nowe flagi kompilacja na ponownej kompilacji.źródło
Rozwiązanie 1: tryb firmowy + brzęk
Jedynym problemem jest to, że musisz powiedzieć trybowi firmy, gdzie szukać plików nagłówkowych c / c ++ projektu.
Jeśli używasz cmake, możesz pozwolić https://github.com/redguardtoo/cpputils-cmake wykonać konfigurację dla Ciebie (WSKAZÓWKA: jestem autorem cpputils-cmake).
LUB
Rozwiązanie 2: tryb firmowy + globalny GNU
Nic więcej do powiedzenia: musisz budować tagi za pomocą globalnego narzędzia GNU, jak wspomnieli inni.
źródło
Używam cmake-ide do konfigurowania tagów rtag, flycheck, ironii i clang firmy.
Teraz możesz jednocześnie skonfigurować system kompilacji i ulubione wtyczki emacs do analizy statycznej!
EDYCJA: Zauważ, że klang firmowy zapewnia automatyczne uzupełnianie, którego szukałeś. cmake-ide może również skonfigurować flycheck i rtags, co dodaje kilka dodatkowych funkcji podobnych do IDE.
źródło
Tryb semantyczny MX
www.gnu.org/software/emacs/manual/html_node/semantic/Using-Semantic.html#Using-Semantic
I &
Tagi Tabele
odnaleźć . -nazwa „*. [chCH]” -print | etags -
www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html
etags , ctags - generuj plik znaczników dla Emacsa, vi
manpages.debian.org/cgi-bin/man.cgi?query=etags&apropos=0&sektion=0&manpath=Debian+8+jessie&format=html&locale=en
Zakończenie CMi (lub M-TAB) w punkcie. Jeśli włączony jest tryb semantyczny, próbuje użyć danych parsera semantycznego. Jeśli tryb semantyczny jest wyłączony lub kończy się niepowodzeniem, próbuje zakończyć przy użyciu tabeli wybranych tagów (patrz Tagi)
http://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-C_002dM_002di
M- (find-tag) monituje o nazwę tagu i przejście do definicji
http://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Tag.html#index-M_002d_002e
źródło