2010-08-16 10 views
25

ho notato che le attuali voci di auto-mode-alist tutto end con una sola offerta, per esempioImpostazione auto-mode-alist in emacs

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

qual è lo scopo della sola offerta. Mi sarei aspettato di vedere

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

Il motivo che mi chiedo è che io sto cercando di ottenere i file con nomi corrispondenti regexp

^twiki\.corp.* 

di aprire nel org-mode. Ho provato la seguente senza successo:

le seguenti opere:

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

, ma non è proprio quello che voglio in quanto i nomi di file con twiki.corp incorporati in essi saranno aperti in org-mode .

risposta

27

\\' corrisponde alla stringa vuota alla fine della stringa/buffer:

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

$ corrisponderà alla fine della linea: se avete a capo nel nome del file (molto raro) $ corrisponderà alla nuova riga e non alla fine della stringa.

L'espressione regolare viene confrontato con il nome del file tutta, quindi è necessario includere "/" per abbinare il separatore di directory:

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

Thx! In questo caso, qual è lo scopo di associare una stringa vuota alla fine della stringa? È per garantire che non ci siano spazi dopo ".java"? Com'è meglio che usare $? – chris

+3

È necessario assicurarsi di non avere nulla dopo ".java". Altrimenti, anche la cosa simile a "somefile.java.not.really" corrisponderebbe. È meglio di "$" se hai una nuova riga nel nome del file che è inusuale ma possibile. Ad esempio, un nome di file come "bob.java \ nsomething else" potrebbe essere il vettore di qualche attacco dannoso (anche se non ho idea di quale sarebbe l'attacco). –

+5

Vorrei usare il bellissimo modulo 'rx', che ti evita di dover ricordare quella terribile sintassi regexp. (Devi invece ricordare la sintassi di rx, ma è molto più leggibile.) '(rx" /twiki.corp "eos)' – offby1