2010-08-16 5 views
7

Emacs hat schlechte Auto-Einrückung in Flex und Bison. Tatsächlich scheint es keine Unterstützung für den Flex-Modus zu geben. Also, wie geht ein Emacs Benutzer damit um? Ich mag VIm, aber ich würde lieber nicht wechseln, weil ich viel schneller und bequemer in Emacs bin.Emacs Modi für Flex und Bison, oder Entfernen von automatischen Einzug für diese Modi?

Ich hatte ein Elisp-Modul von Drittanbietern für Bison vor ein paar Monaten, aber wenn sein Einzug brach, würde es nie repariert werden. Kurz gesagt, es war ein schlechter Hack.

Oder gibt es eine Möglichkeit, die automatische Einrückung für .l- und .y-Dateien zu deaktivieren (drücken würde also einen Einzug)? Wie würde ich diese Einstellung auch für Emacs ändern?

Eine nette und prägnante Anleitung für elisp wäre auch sehr hilfreich. Es würde mir nichts ausmachen, ein paar Tage zu verbringen, um meine eigenen Flex- und Bison-Modi zu schreiben, wenn ich die richtige Dokumentation hätte.

+0

Ich bin mir nicht sicher, was Sie mit "automatische Einrückung für .l und .y Dateien deaktivieren" meinen. In welchem ​​Modus behauptet die Modeline? Sie können dies anpassen, indem Sie den Auto-Modus-Alist ändern. – zwol

+0

Es scheint für Bison im C-Modus zu sein. Für Flex ist es im Lisp-Modus. C-Modus für Bison ist tolerierbar, aber es gibt keine Lex oder Flex-Modi für Emacs scheint es. – Kizaru

+0

Sie haben das vielleicht schon gesehen, aber wenn nicht, lassen Sie mich auf die folgende Frage verweisen: http://stackoverflow.com/questions/2166680/is-there-a-good-emacs-mode-or-method-for- lex-flex-yacc-bison-files –

Antwort

3

Emacs wählt den Hauptmodus hauptsächlich basierend auf der Dateinamenerweiterung. .l ist eine strittige Erweiterung: einige Leute benutzen es für Lex, andere für Lisp (und es gibt ein paar andere seltenere Anwendungen). Emacs assoziiert .l mit Lisp und .lex mit lex (für die es C-Modus verwendet).

Wenn die .l Dateien, die Sie mit arbeiten, sind häufiger lex als Lisp, können Sie ändern, was .l Dateien mit der folgenden Zeile in Ihrem .emacs verbunden sind:

(add-to-list 'auto-mode-alist '("\\.l\\'" . c-mode)) 

können Sie auch in einer Datei deklarieren welchem ​​Modus Sie möchten, dass Emacs beim Öffnen der Datei verwendet wird. Setzen Sie den folgenden Ausschnitt in der ersten Zeile der Datei (in der Regel in einem Kommentar):

-*-mode: c-mode-*- 

Dies ist ein allgemeines Merkmal, andere Schreibweisen und andere Möglichkeiten bieten; Weitere Informationen finden Sie unter "Dateivariablen" im Emacs-Handbuch.


Wenn Sie mit Emacs Lisp beginnen möchten, lesen Sie die Emacs Lisp intro (die in Ihrem Emacs oder OS-Distribution enthalten sein kann). Nachdem Sie sich mit den Grundlagen der Sprache vertraut gemacht haben, können Sie im Emacs Lisp Referenzhandbuch auf das Kapitel über die Modi zurückgreifen.

+0

Ich werde das auf meinem Emacs-Setup zu Hause versuchen ... Ich bin mir nicht ganz sicher, aber ich dachte, Flex/Lex hatte Probleme mit dem C-Modus (besonders in den Regeln).Wenn das erste Zeichen einer Zeile beispielsweise kein Leerzeichen ist, interpretiert Flex es als ein passendes Muster. Wenn ich im C-Modus Code schreiben möchte, der einer Regel entspricht, kann ich ihn nicht nach rechts verschieben, es sei denn, ich erzwinge einen Einzug, was mühsam ist. Irgendwelche einfachen Lösungen oder Ideen für was hier zu tun? – Kizaru

+0

@PlaZmaZ: Ich denke nicht, dass Sie das lösen können, ohne ein bisschen Code zu schreiben. Ein Lex- oder Yacc-Modus wird vom C-Modus abgeleitet (siehe "Abgeleitete Modi" im Emacs Lisp-Handbuch). Der CC-Modus hat eine komplexe Einrückungs-Engine, die ich nie untersucht habe. Ich denke, der Abschnitt "Erweiterte Anpassungen" wird Sie interessieren. Suchen Sie für Syntaxfärbung "Font Lock mode". – Gilles

1

Zusätzlicher Tipp: Sie könnten entscheiden, was Sie wollen, ist das generische Verhalten von Emacs - was es verwendet, wenn es keinen speziellen Modus für ein Dateiformat hat. Das ist Fundamental-Modus in Emacs-Jargon genannt: so können Sie es on the fly mit M-x fundamental-mode anfordern, oder setzt -*- mode: fundamental -*- auf der ersten Zeile der Datei, oder anpassen auto-mode-alist wie so:

(add-to-list 'auto-mode-alist '("\\.l\\'" . fundamental-mode)) 

Eine andere Sache zu Versuchen Sie möglicherweise indented-text-mode (wahrscheinlich mit Auto-Füllung deaktiviert).

Verwandte Themen