Warum gibt es in Emacs keine Code-Faltung?
Frage
Auf SO gibt es mehrere Fragen dazu, wie man Code in Emacs faltet, ohne beispielsweise Sonderzeichen wie „Markierungen“ in den Kommentaren hinzufügen zu müssen.Jemand sagte, dass es „keine perfekte Lösung“ gebe.
Es scheint, dass dies durch Parsen der Quelle des zu schreibenden Programms und Suchen nach passenden Klammern oder Klammern oder durch Einrücken erfolgen könnte.Sie können auch eine Kombination von Skripten verwenden, die unterschiedliche Methoden verwenden.
Warum wird allgemein angenommen, dass es keinen „perfekten“ und unkomplizierten Weg gibt, Code in Emac zu falten?Gibt es etwas in Emacs oder seiner Architektur, das das Programmieren erschwert?Wenn es einfach wäre, würde man nach so vielen Jahren, in denen kluge Leute Emacs verwenden, denken, dass jemand es geschrieben hätte.
Lösung
Sie sollten mit Hideshow spielen (hs-minor-mode
) kombiniert mit fold-dwim.el
. Es tut genau das, was Sie vorgeschlagen haben - sucht nach passenden Zahnspangen/Parens und kann auf die Eindrücke zurückgreifen.
Es gibt eine robuste Faltungslösung für die meisten gängigen Sprachen, und wenn es nicht gibt, sind alle Faltpakete sehr anpassbar. Tatsächlich ist der einzige Nachteil die Verbreitung von Faltmethoden (fold-dwim
hilft ziemlich viel damit); Früher dachte ich, weil mich niemand auf eine endgültige Lösung verweisen konnte, war die Faltung schwer oder unmöglich - tatsächlich ist das Gegenteil wahr. Sie müssen nur ein wenig experimentieren, um zu sehen, was für Sie am besten funktioniert.
Ich habe benutzt folding.el
(zB, um Sachen in meinem zu gruppieren .emacs
), outline-minor-mode
, und jetzt Hideshow. Es besteht die Möglichkeit, dass keiner von ihnen genau so funktioniert, wie Sie es möchten (z. folding.el
), aber es stellt sich als einfach heraus. Die Standard -Schlüsselbindungen können etwas barocken sein, dies wird jedoch von behoben fold-dwim
und/oder hideshow-org
(Sehr empfohlen für Hideshow, vgl. hideshow-org
Das Verhalten für andere Faltmodi mit einem schnellen und schrägen ELISP und fold-dwim
). Sobald Sie Ihr bevorzugtes Setup herausgefunden haben, schalten Sie ihn einfach automatisch über Hooks oder Puffer-lokale Variablen ein und schauen Sie sich Ihr Code ab :) (Siehe unten, beachten Sie den Klickablen +
'S am Rand).
ALT Text http://img198.imageshack.us/img198/4029/screenshot1oc.png
Andere Tipps
Sie sollten sich in Cedet schauen. Es macht das Code-Falten und viele andere ausgefallene Funktionen, nach denen Sie wahrscheinlich suchen, wenn Sie von einer IDE zu EMACs wechseln.
Suchen Sie insbesondere nach "Global-Semantic-Tag-Folding-Modus"
Sie benötigen nichts mehr. Aktivieren Sie einfach den Umriss-Minor-Modus für Dateitypen, die Sie falten möchten.
Tatsächlich gibt es jedoch verschiedene Lösungen für EMACs; Ich habe einige von ihnen aufgelistet (denen, die ich zufällig begegnet bin) http://en.wikipedia.org/w/index.php?title=Code_Folding&oldid=375300945#cite_note-2.
Es fehlt mir jedoch Dinge: In einigen Fällen möchte ich mehrere Mechanismen kombinieren: Zum Beispiel möchte ich zum Markdown umrissbasierte Falten (für Abschnitte) und Einrückungsfaltungen (für Einrückungsbasierte Falten verwenden Angebote, Codeblöcke usw.) - Damit sich die Implementierung eines vollständigen Parsers für den Markdown nicht darum kümmern.
Hier sind sie:
Token-basierte Faltung in EMACs
Token-basierte Faltung in EMACs wird durch die impustert Falten Kleiner Modus.
Eindrückungsbasierte Faltung in EMACs
Man kann das verwenden set-selective-display
Funktionen in EMACs, um Linien basierend auf der Eindrückungsstufe zu verbergen, wie in der vorgeschlagen Universal Code Folding Hinweis.
Syntax-abhängige Faltung in EMACs
Die syntaxabhängige Faltung in EMACs wird unterstützt von:
das Gliederung und Lösung Modi für spezielle dedizierte "Gliederung" -Syntaxe;
bis zum verstecken anzeigen Kleiner Modus für einige Programmiersprachen;
Auch,
- bis zum Semantisches Falten kleiner Modus und der
senator-fold-tag
Befehl fürSyntaxe unterstützt von semantisch, - sowie durch Doc-Modus für Javadoc- oder Doxygen -Kommentare,
- durchTex-Fold-Modus
sgml-fold-element
Befehl,- nxml-outln Bibliothek in den entsprechenden sprachspezifischen Modi und möglicherweise in anderen Modi für bestimmte Syntaxe.
- bis zum Semantisches Falten kleiner Modus und der
Mehrere Faltungsmechanismen werden durch die vereintFold-Dwim Schnittstelle.
Siehe auch http://www.emacswiki.org/emacs/categoryHidestuff.
Faltung von benutzer ausgewählten Regionen in EMACs
Die Faltung von benutzer ausgewählten Regionen in EMACs wird von der implementiert Versteck Befehl.
Ich habe verwendet Faltmodus für einige Zeit.Mit der automatischen Einfügung von Vorlagen und Abkürzungen funktioniert es für mich recht gut, wenn es um einige schöne Codebausteine geht.
Es war schon immer ein Wunsch von mir, den Puffer gefaltet (zum Drucken/Versenden per E-Mail) herstellen zu können.Einige meiner Faltetiketten dienen der Sicherheit bzw. dem Verstecken von Passwörtern.
Ja, schließlich ist Code -Falten in EMACs da. Versuchen Sie es mit Yafolding, die auf der Melpa.org -Paketbibliothek anwesend sind.