Verfügt emacs über eine Funktion oder Bibliothek, mit der der Benutzer zur Funktionsdeklaration wechseln kann, auch wenn diese in einer anderen Datei definiert wurde?
Wenn ja, für welche Sprachen gibt es Unterstützung?
Die Inspiration für diese Frage stammt aus dem folgenden Artikel, in dem einige der Gründe genannt werden, warum Emacs niemals in der Lage sein werden, mit IDEs zu konkurrieren.
http://henrikwarne.com/2012/06/17/programmer-productivity-emacs-versus-intellij-idea/
irony-clang
zu diesem Zweck. Hast du die Kommentare zum Artikel gelesen?Antworten:
Sie können zu jeder Definition / Referenz des gesamten Projekts springen, die so groß wie der Linux-Kernel-Quellbaum (mehr als 36 KB) ist. Weitere Informationen finden Sie in meinem C / C ++ - Handbuch . Für C / C ++ empfehle ich die Verwendung von GNU Global , das C, C ++, Yacc, Java, PHP4 und Assembly unterstützt.
Der Schlüssel ist, wenn Sie IDE-Funktionen einer Sprache haben möchten, müssen Sie das Plugin dieser Sprache installieren. Hier sind einige Pakete für dynamische Sprachen, die ich kenne:
js2-mode
tun, siehe die Beschreibung ; Aber im Wesentlichenjs2-mode
handelt es sich um einen vollständigen Javascript-Parser, der einen AST generiert, um die richtigen IDE-Funktionen auszuführen. Wenn Sie installieren,skewer-mode
als Siejs2-mode
standardmäßig haben,skewer-mode
hängt da davon ab.Sie können auch verwenden
ctags
, um sehr viele Sprachen wie Shell-Skript oder Tcl zu unterstützen ...quelle
j2-mode
ich habe es in meiner Antwort bearbeitet.anaconda
möglicherweise eine spezifischere Lösung für das Definitionsspringen in Python ist.Ich bin auf ein ähnliches Problem mit Emacs gestoßen und habe Dumb Jump gemacht . Ich habe viele der in der akzeptierten Antwort genannten Lösungen ausprobiert, bin jedoch immer auf eines oder mehrere der folgenden Probleme gestoßen:
Ich wollte unbedingt eine Lösung, die "gerade funktioniert" und keine Anpassung oder Einrichtung erfordert. Das heißt, ich wollte ein zufälliges Repo auf Github klonen und wie jedes andere meiner eigenen Projekte darin navigieren.
Im Moment hat Dumb Jump grundlegende Unterstützung für:
Es ist über MELPA und GitHub erhältlich und PRs sind mehr als willkommen.
quelle
Die primäre Lösung hierfür in emacs ist die Verwendung von TAGS-Dateien, die von Programmen wie etags oder gtags erstellt werden. Ich selbst verwende (und empfehle) üppige ctags und etags-select.el, um Ziele einzugrenzen, wenn das Suchsymbol in mehreren Zielen liegt. Die unterstützten Sprachen sind sehr zahlreich, siehe die Handbücher der einzelnen Tools. Es gibt sogar Unterstützung für das Hinzufügen Ihrer eigenen Sprache, wobei Sie einen regulären Ausdruck bereitstellen können, der ctags anweist, wie die Tags, an denen Sie interessiert sind, zu isolieren sind.
quelle
ctags -e -R *
aus dem Stammverzeichnis wird es für Sie eingerichtet.