Czy emacs ma funkcję lub bibliotekę, która pozwala użytkownikowi przejść do deklaracji funkcji, nawet jeśli została zdefiniowana w innym pliku?
Jeśli tak, jakie języki są obsługiwane?
Inspiracja do tego pytania pochodzi z poniższego artykułu, który mówi o niektórych przyczynach, dla których emacs nigdy nie będzie w stanie konkurować z IDE.
http://henrikwarne.com/2012/06/17/programmer-productivity-emacs-versus-intellij-idea/
irony-clang
tym celu. Czy czytałeś komentarze do artykułu?Odpowiedzi:
Możesz przejść do dowolnej definicji / referencji całego projektu tak dużej jak drzewo źródeł jądra Linux (ponad 36k) w jednej chwili. Szczegółowe informacje można znaleźć w moim przewodniku C / C ++ . W przypadku C / C ++ sugeruję użycie GNU Global, który obsługuje C, C ++, Yacc, Java, PHP4 i asembler.
Kluczem jest to, że jeśli chcesz mieć funkcje IDE języka, musisz zainstalować wtyczkę tego języka. Oto kilka pakietów dla dynamicznych języków, które znam:
js2-mode
, zobacz opis ; ale w gruncie rzeczyjs2-mode
jest to kompletny parser JavaScript, który generuje AST w celu wykonania odpowiednich funkcji IDE. Jeśli zainstalujeszskewer-mode
, będziesz miałjs2-mode
domyślnie, ponieważskewer-mode
zależy od tego.Możesz także użyć
ctags
do obsługi wielu języków, takich jak skrypt powłoki lub Tcl ...źródło
j2-mode
ja zredagowałem w mojej odpowiedzi.anaconda
może to być bardziej szczegółowe rozwiązanie do przeskakiwania definicji w Pythonie.Miałem podobny problem z emacsem, więc zrobiłem Dumb Jump . Wypróbowałem wiele rozwiązań wymienionych w zaakceptowanej odpowiedzi, ale zawsze napotkałem jeden lub więcej z następujących problemów:
Bardzo chciałem rozwiązania, które „po prostu działało” i nie wymagało dostosowywania ani konfiguracji. To znaczy, chciałem sklonować losowe repozytorium na Github i poruszać się po nim jak w przypadku innych moich własnych projektów.
W tej chwili Dumb Jump ma podstawowe wsparcie dla:
Jest dostępny za pośrednictwem MELPA i GitHub, a PR są mile widziane.
źródło
Podstawowym rozwiązaniem tego problemu w emacs jest użycie plików TAGS, które są tworzone przez programy takie jak etags lub gtags. Sam używam (i polecam) bujnych tagów i etags-select.el, aby pomóc ci zawęzić cele, gdy symbol wyszukiwania znajduje się w wielu miejscach docelowych. Obsługiwane języki są dość liczne, patrz instrukcje poszczególnych narzędzi. Istnieje nawet obsługa dodawania własnego języka, dzięki czemu możesz podać wyrażenie regularne, które instruuje ctags, jak izolować interesujące Cię tagi.
źródło
ctags -e -R *
z katalogu głównego skonfiguruję go dla Ciebie.