2010-08-16 2 views
25

Ich stelle fest, dass die aktuelle Auto-mode-alist Einträge enden alle mit einem einfachen Anführungszeichen, zum BeispielEinstellung auto-mode-alist in Emacs

("\\.java\\'" . java-mode) 

Was ist der Zweck der Apostroph ist. Ich hätte zu sehen erwartet

("\\.java$" . java-mode) 

Der Grund, warum ich frage ist, dass ich versuche, Dateien zu erhalten mit Namen regexp

^twiki\.corp.* 

passend zu öffnen in org-Modus. Ich habe folgendes ohne Erfolg versucht:

Die folgenden Werke:

(add-to-list 'auto-mode-alist '("twiki\\.corp" . org-mode)) 

aber ist nicht ganz das, was ich will, da die Dateinamen mit twiki.corp in ihnen eingebettet wird in org-Modus geöffnet werden .

Antwort

27

\\‘den leeren String am Ende des Strings/Puffer:

http://www.gnu.org/software/emacs/manual/html_node/emacs/Regexp-Backslash.html el

$ wird das Ende der Zeile übereinstimmen: Wenn Sie Zeilenumbrüche in Ihrem Dateinamen (sehr selten) haben $ entspricht der Newline und nicht dem Ende der Zeichenfolge.

Die Regex wird gegen den Dateinamen ganze abgestimmt, so müssen Sie "/" passen Sie das Verzeichnis seperator umfassen:

(add-to-list 'auto-mode-alist '("/twiki\\.corp" . org-mode)) 
+0

Thx! Was ist der Zweck, in diesem Fall eine leere Zeichenfolge am Ende der Zeichenfolge abzugleichen? Soll sichergestellt werden, dass nach ".java" keine Leerzeichen mehr vorhanden sind? Wie ist es besser als mit $? – chris

+3

Es ist sicherzustellen, dass Sie nichts nach dem '.java' haben. Sonst würde auch etwas wie 'somefile.java.not.really' passen. Es ist besser als '$', wenn Sie eine neue Zeile in Ihrem Dateinamen haben, die ungewöhnlich aber möglich ist. Zum Beispiel könnte ein Dateiname wie 'bob.java \ netwas anderes' der Vektor für eine bösartige Attacke sein (obwohl ich keine Ahnung habe, was der Angriff wäre). –

+5

Ich würde die schöne 'rx' Form verwenden, die Sie davor bewahrt, sich diese schreckliche Regexp-Syntax merken zu müssen. (Sie müssen sich stattdessen die eigene Syntax von rx merken, aber sie ist viel besser lesbar.) '(rx" /twiki.corp "eos)' – offby1