Горячая клавиша Emacs для выравнивания знаков равенства - PullRequest
12 голосов
/ 03 сентября 2010

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

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

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

Что означает эта ошибка и как получить искомый эффект?

Ответы [ 3 ]

16 голосов
/ 03 сентября 2010

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

(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-*\\)"

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

2 голосов
/ 03 сентября 2010

"thunk" из #emacs решил это:

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

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

0 голосов
/ 03 сентября 2010

Я выбрал источник 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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...