Горячая клавиша Emacs для выравнивания знаков
Я хотел бы добавить что-то вроде этого в моем .emacs:
(local-set-key (kbd "C-c a =")
(lambda () (interactive)
(align-regexp (region-beginning) (region-end) "=")))
Но всякий раз, когда я запускаю его, я получаю сообщение об ошибке "Неверный аргумент типа: numberp, nil".
Что означает эта ошибка и как я могу получить эффект, который я ищу?
Ответы
Ответ 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)))