2010-11-10 5 views
5

Ich versuche, .emacs einzurichten, so dass jede Datei, die mit den Buchstaben makefile beginnt, es in Makefile-Modus setzt. Z.B. makefile-something sollte im Makefile-Modus sein.Warum funktioniert mein Emacs regulärer Ausdruck mit^nicht, um den Anfang einer Zeile anzupassen?

nicht funktioniert Dieses nicht:

(setq auto-mode-alist (cons '("^makefile" . makefile-mode) auto-mode-alist)) 

Aber dies tut:

(setq auto-mode-alist (cons '("makefile" . makefile-mode) auto-mode-alist)) 

Kann mir jemand erklären, warum?

Antwort

7

Es ist, weil es eine Pfadkomponente vor dem Dateinamen, versuchen:

"/makefile[^/]*$" 

siehe http://www.gnu.org/s/emacs/manual/html_node/elisp/Auto-Major-Mode.html (unten auf der Seite)

EDI: korrigiert regexp nach Sean Kommentar

+0

Danke, das hat funktioniert. –

+1

Diese Regex passt auch Dinge wie/foo/makefiles/bar. Ich denke du willst "/ makefile [^ /] * $". – Sean

+0

Glücklicherweise habe ich nichts wie/foo/makefiles/bar, aber danke Sean für die Korrektur. –

1

So dies nur eine Vermutung, aber ich merke, dass andere regexps in auto-mode-alist, die den Anfang des Dateinamens übereinstimmen soll nicht verwenden ^, verwenden sie /. Zum Beispiel:

("/\\.?\\(?:gnokiirc\\|kde.*rc\\|mime\\.types\\|wgetrc\\)\\'" . conf-mode) 

(von Emacs 23.2.1) auf dieser Grundlage, ich denke, vielleicht ist die regexp zum der Datei vollständigen Pfad angewandt, nicht die Basisnamen. Versuchen Sie also

(setq auto-mode-alist (cons '("/makefile" . makefile-mode) auto-mode-alist)) 

stattdessen.

0

Nur um der Einfachheit willen, versuchen Sie

(add-to-list 'auto-mode-alist ... 
+0

Danke für den Tipp. Mein Emacs-Wissen ist sehr schlecht. –