2010-01-25 3 views
15

Ich möchte Punkt schnell auf eine Funktion in meinem Emacs-Puffer verschieben. Ich würde gerne eine Funktion ausführen und eine Abfrage erhalten, die mich nach dem Funktionsnamen fragt, wobei die Vervollständigung für jede im aktuellen Puffer definierte Funktion bereitgestellt wird.Wie kann ich in Emacs zwischen Funktionen in der aktuellen Datei springen?

Ich verwende normalerweise Etags zum Navigieren, aber manchmal suche ich nach einer Framework-Methode, die in mehreren Dateien überschrieben wurde. In diesen Fällen kann ich die Datei finden, die ich brauche, aber dann möchte ich schnell zur Funktion springen. Es gibt eine ähnliche Funktion in TextMate, wo Sie eine Definition aus einer Liste unten rechts im Editor auswählen können.

Antwort

32

Nur um Funktionen in der aktuellen Datei zu springen? Verwenden Sie imenu. Es ist die einfachste und leichteste aller bisher aufgeführten Alternativen und könnte für das, was Sie wollen, ausreichen. Es ist auch in Emacs eingebaut und hat minimale Setup-Probleme. Es verfügt über grafische und textuelle Schnittstellen. Alles extra und Sie werden besser mit einem der anderen ausgezeichneten Vorschläge hier gemacht werden.

+0

Welche Sprachen werden unterstützt? C-Familie und Elisp, was noch? –

+1

Ich denke, die meisten integrierten Modi funktionieren gut mit Imenu. Es ist ziemlich einfach, einem Modus auch Imenu-Unterstützung hinzuzufügen. Es funktioniert für Python und im Cperl-Modus. Ich habe diese benutzt. –

+1

C# funktioniert, aber siehe http://stackoverflow.com/questions/2240320 – Cheeso

0

versuchen CEDET. Es ist ein bisschen schwierig, das erste einzurichten, aber hier ist ein hervorragendes Tutorial: by Alex ott

Und wenn er installiert wird, können Sie semantic-complete-jump verwenden. paar Mal gedrückt Tab, und es ist auch Symboldefinitionen angezeigt.

+0

Semantic hat auch eine gute Integration mit Anything, und die 'anything-c-source-semantic' Quelle gibt eine Liste von allem, was durch Semantik gefunden wird. – haxney

1

speedbar ist Standard, und bietet Ihnen ein komprimierbares Menü für jede Datei im aktuellen Verzeichnis, standardmäßig wird mit der mittleren Maustaste auf einen Eintrag für eine Funktionsdefinition auf dieses def gesprungen. Mit emacs23 wurde dies zum normaleren Linksklick geändert.

0

Wenn M-. bringt die falsche Methode, Sie können C-u M- eingeben. um den nächsten mit dem gleichen Namen zu finden.

2

Sie können etags-select verwenden, um mehrere übereinstimmende Tags auszuwählen. Aber die Antwort auf das, was Sie gefragt haben, ist imenu.

0

globaler gtags ist sehr gut

0

innerhalb der aktuellen Datei oder eine Reihe von Dateien zu navigieren, die Sie auswählen, was Sie tun nicht eine TAGS-Datei benötigen. Sie können Imenu verwenden. Aber es ist besser, Icicles imenu Befehle zu verwenden.

Warum? Weil sie Sie Abschluss verwenden können. Substring, Regexp, Präfix oder Fuzzy-Vervollständigung. Kombiniere einfache Muster, um sie zu vergleichen oder zu subtrahieren.

icicle-imenu Befehl wird in Icicle Modus C-C = gebunden. Aber Sie können auch nur einen Befehl oder nur eine nicht-Befehl Funktion (nicht interaktiv) mit Befehl icicle-imenu-command oder icicle-imenu-non-interactive-function nachschlagen.

Diese Befehle sind Multi-Befehle, was bedeutet, dass sie tatsächlich Browser: Sie unter Funktionsdefinitionen auslösen können Tasten C-RET oder C-Maus-2 (direkte Sprünge) und C-down mit (Zyklus). Hit RET oder klicken Sie auf Maus-2, um an einem endgültigen Ziel zu beruhigen.

Verwandte Themen