Подтвердить что ты не робот

Горячая клавиша Emacs для выравнивания знаков

Я хотел бы добавить что-то вроде этого в моем .emacs:

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

Но всякий раз, когда я запускаю его, я получаю сообщение об ошибке "Неверный аргумент типа: numberp, nil".

Что означает эта ошибка и как я могу получить эффект, который я ищу?

4b9b3361

Ответ 1

Вот ты мой дорогой друг.

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

Префикс (\s-*) используется внутренне с помощью align-regexp

Из align.el

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

John Wiegley просто пренебрег документом, и я думаю, что большинство людей просто используют align-regexp в интерактивном режиме или просто записывают и сохраняют макрос!

Ответ 2

"thunk" из #emacs решил:

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

Кто-то хочет объяснить странный префикс "="?

Ответ 3

Я выбрал источник align-regexp (установите emacs23-el на debian) и придумал следующее:

(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)))