2010-09-03 25 views
11

que me gustaría poner algo como esto en mi .emacs:Emacs tecla de acceso directo para alinear los signos igual

(local-set-key (kbd "C-c a =") 
    (lambda() (interactive) 
    (align-regexp (region-beginning) (region-end) "="))) 

Pero cada vez que lo ejecuto, me sale un error "argumento de tipo incorrecto: numberp, nula".

¿Qué significa este error y cómo obtengo el efecto que estoy buscando?

Respuesta

15

Aquí eres mi querido amigo.

(defun align-to-equals (begin end) 
    "Align region to equal signs" 
    (interactive "r") 
    (align-regexp begin end "\\(\\s-*\\)=" 1 1)) 

El prefijo (\s-*) es utilizado internamente por align-regexp

Desde el align.el

(list (concat "\\(\\s-*\\)" 

John Wiegley simplemente se olvidó de documentarla, y supongo que la mayoría de la gente sólo tiene que utilizar align-expresión regular de forma interactiva ¡o simplemente graba y guarda una macro!

+0

Ah golpeado al golpe ... – ocodo

+0

¡Pero mejor explicación! – qrest

+0

Aún así te daré un +1 :) ... ese prefijo \ s- * es muy extraño. – ocodo

0

me destrozó a la fuente de align-regexp (emacs23-el instale en debian) y se le ocurrió esto:

(local-set-key (kbd "C-c a =") 
    (lambda() (interactive) 
    (align-region (region-beginning) 
        (region-end) 
        'entire 
        (list (list nil 
           (cons 'regexp "\\(\\s-*\\)=") 
           (cons 'group 1) 
           (cons 'bogus nil) 
           (cons 'spacing 1))) 
        nil 
        nil))) 
+0

Pero seguramente es posible hacer esta tarea sin excavar las entrañas del comando alinear? – qrest

+0

Lo habría pensado, pero no entiendo 'align.el' muy bien. –

2

"thunk" de #emacs resolvieron:

(local-set-key (kbd "C-c a =") 
    (lambda() (interactive) 
    (align-regexp (region-beginning) (region-end) "\\(\\s-*\\)=" 1 1 nil))) 

cuidado de alguien para explicar el extraño prefijo a "="?

+0

Tenga en cuenta que el último nulo es opcional y el 1 1 no. La documentación de align.el necesita una limpieza. – ocodo

Cuestiones relacionadas