Wiem, że emacs obsługuje uzupełnianie kodu. Ale szczerze mówiąc, nigdy nie byłem dobrym czytelnikiem FAQ, przynajmniej jeśli chodzi o coś, czym jestem zupełnie nowy. Zastanawiam się więc, co muszę pobrać i jak to zrobić, aby emacs mógł wykonać dla mnie inteligentne uzupełnienie kodu w C ++ i Javie. A może jest jakiś pakiet uzupełniający kod dla wielu głównych języków?
20
complete.el
wypróbować standardową bibliotekę . Jest bardzo stary i mało znany, ale rodzaj uzupełniania w buforze może być użyteczny.M-x find-library complete
, a następnie przeczytaj komentarz w pliku.Odpowiedź @ Douga jest trochę nieaktualna, a jego celem jest ekspansja kodu za pomocą wstępnie zdefiniowanych fragmentów.
Myślę, że pytanie OP dotyczy inteligencji (na przykład nazwa autouzupełniania metody klasy).
Kiedyś popularny był hipis , analizator składni to tagi emacs . Obsługuje więc wszystkie języki, które obsługuje ctags (w tym C ++, Java). Ale wynik nie jest doskonały, ponieważ ctags używa tylko wyrażenia regularnego do analizy kodu. Zobacz mój init-hippie-expand.el, aby uzyskać szczegółowe informacje. Możesz zacząć od sprawdzenia wartości
hippie-expand-try-functions-list
auto-complete to nowoczesny z fantazyjnym interfejsem użytkownika (menu rozwijane, nawet w oknie konsoli). Jeśli używasz clang jako backendu. Intellisense jest znacznie lepszy. Aby uruchomić clang, musisz zainstalować auto-complete-clang, który jest wtyczką auto-complete. Obsługuje tylko obsługę języka clang (C / C ++ / Obj-C). Jak zauważył Sylvain Benner , możesz używać emacs-eclim jako zaplecza parsowania java, które faktycznie wywołuje plik wykonywalny eclipse. Tak więc autouzupełnianie może obsługiwać java. Zobacz mój init-auto-complete.el, aby uzyskać szczegółowe informacje.
semantic zapewnia zarówno interfejs użytkownika, jak i silnik analizujący zaplecza. Jest wolny Rozwijany interfejs użytkownika jest OK, ale wymaga okna X. Wynik Intellisense jest lepszy niż ctags. A dokumentacja jest dla mnie zbyt maniakalna. Zobacz init-semantic.el, aby uzyskać szczegółowe informacje.
tryb firmowy jest podobny do autouzupełniania, z tą różnicą, że pakuje wszystko w jeden pakiet. Na przykład programiści C ++ potrzebują tylko zainstalować tryb firmowy (automatyczne uzupełnianie wymaga wtyczki innej firmy). Kolejną różnicą UI jest firma pokaże kandydata automatycznie . Więc naciskasz mniej klawiszy w towarzystwie. To samo można zrobić w autouzupełnianiu po dostosowaniu.
Podsumowując, auto-uzupełnianie, firma są najpopularniejszymi dwoma opcjami. Mile widziane są również semantyczne i hippie-rozwijane, ale rzadziej używane. Inne są zbyt trywialne, aby je wymienić, a ich funkcje są już uwzględnione w wielkiej czwórce. Na przykład funkcja autouzupełniania może używać yasnippet jako źródła danych wejściowych (autouzupełnianie zapewnia interfejs użytkownika, ale faktyczni kandydaci są wytwarzani przez zaplecze yasnippet).
Sugeruję użycie albo autouzupełniania, albo firmy jako głównej wtyczki do uzupełniania kodu oraz semantycznej lub hipisowskiej jako dodatkowej wtyczki .
Używam trybu firmowego i rozwijania hipisów, ponieważ,
Teraz (rok 2017) tryb firmowy jest aktywniej utrzymywany niż autouzupełnianie i ma więcej wtyczek innych firm (na przykład wtyczki lateksowej)
hippie-expand nie jest bardzo aktywny, ale nie zajmuje
TAB
klucza, którego używa tryb firmowy / semantyczny / auto-uzupełnianieJeśli używasz trybu firmowego dla C ++ / Java, możesz chcieć zmodyfikować
company-backends
.Kilka dodatkowych wskazówek na temat trybu firmowego,
Może być konieczne dostosowanie wartości
company-backends
. Załóżmy na przykład, że jego wartość to(company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords))
. Wtedy, jeślicompany-eclim
można uzyskać niezerowe kandydaci,company
myśli , że piszesz java, więc NIE będzie później działałcompany-eclim
.Teraz spójrzmy
(company-dabbrev-code company-gtags company-etags company-keywords)
. Wszystkie te cztery backendy będą używane razem. Na przykład, nawet pocompany-dabbrev-code
pomyślnym pobraniu niezerowych kandydatów, pozostałe trzy backendy są nadal wykonywane.W prawdziwym świecie często konieczne jest ponowne dostosowanie kolejności backendów lub dodanie nowego backendu (
company-rtags
na przykład).źródło
Krótka odpowiedź: nie znam żadnego dla emacsa, który byłby użyteczny w Javie. Dynamiczne rozwijanie nie dba o biblioteki na ścieżce klasy, nie wie nic o kodzie, który wpisujesz, może rozwinąć tylko do tekstu, który już istnieje w jednym z buforów. JDE i emacs-eclim starają się zapewnić tę funkcjonalność, ale osobiście nie byłem pod wrażeniem.
źródło
Krótka odpowiedź:
M-/
Długa odpowiedź: RTFM :-)
źródło
C-h r
)C-h k M-/
?