2010-08-16 10 views
25

Me he dado cuenta de que las actuales entradas de auto-mode-alist todos terminan con una comilla simple, por ejemploAjuste de auto-mode-a-lista en emacs

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

Cuál es el propósito de la comilla simple. Me hubiera esperado ver

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

La razón que pido es que yo estoy tratando de conseguir los archivos con nombres que coincidan con regexp

^twiki\.corp.* 

para abrir en modo Org. He intentado el siguiente sin éxito:

las siguientes obras:

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

pero no es exactamente lo que yo quiero, ya se abrirán nombres de archivo con twiki.corp incrustado en ellos en org-mode .

Respuesta

27

\\' concuerda con la cadena vacía al final de la cadena/tampón:

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

$ coincidirá con el final de la línea: Si usted tiene nuevas líneas en el nombre del archivo (muy raro) $ coincidirá con la línea nueva y no al final de la cadena.

la expresión regular se compara con el nombre del archivo entero , por lo que necesita incluir "/" para que coincida con el separador de directorio:

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

Thx! ¿Cuál es el propósito de hacer coincidir una cadena vacía al final de la cadena en este caso? ¿Es para garantizar que no haya espacios después de ".java"? ¿Cómo es mejor que usar $? – chris

+3

Es para asegurarse de no tener nada después del '.java'. De lo contrario, algo así como 'somefile.java.not.really' también coincidiría. Es mejor que '$' si tiene una nueva línea en su nombre de archivo que es inusual pero posible. Por ejemplo, un nombre de archivo como 'bob.java \ nsomething else' podría ser el vector de algún ataque malicioso (aunque no tengo idea de cuál sería el ataque). –

+5

Usaría el encantador formulario 'rx', que le ahorra tener que recordar esa espantosa sintaxis regexp. (En su lugar, debe recordar la sintaxis de rx, pero es mucho más legible.) '(rx" /twiki.corp "eos)' – offby1