Emacs热键对齐等号

Emacs热键对齐等号,emacs,Emacs,我想在我的.emacs中添加类似的内容: (local-set-key (kbd "C-c a =") (lambda () (interactive) (align-regexp (region-beginning) (region-end) "="))) 但每当我运行它时,就会出现一个错误“错误类型参数:numberp,nil” 这个错误意味着什么?我如何获得我想要的效果?我分析了align regexp(在debian上安装emacs23 el)的源代码,并得出以下结论:

我想在我的.emacs中添加类似的内容:

(local-set-key (kbd "C-c a =") 
  (lambda () (interactive) 
    (align-regexp (region-beginning) (region-end) "=")))
但每当我运行它时,就会出现一个错误“错误类型参数:numberp,nil”


这个错误意味着什么?我如何获得我想要的效果?

我分析了
align regexp
(在debian上安装
emacs23 el
)的源代码,并得出以下结论:

(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)))
来自#emacs的“thunk”解决了这个问题:

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

有人想解释一下“=”这个奇怪的前缀吗?

给你,我亲爱的朋友

(defun align-to-equals (begin end)
  "Align region to equal signs"
   (interactive "r")
   (align-regexp begin end "\\(\\s-*\\)=" 1 1 ))
align regexp在内部使用
(\s-*)
前缀

align.el

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

John Wiegley只是忽略了记录它,我想大多数人只是以交互方式使用align regexp,或者只是记录并保存一个宏

但是,在不挖掘align命令的内部结构的情况下执行此任务肯定是可能的?我本来会这样认为,但我不太理解
align.el
。请注意,最后一个nil是可选的,而1不是。align.el的文档需要整理一下。不过我还是会给你一个+1:)。。。那个\s-*前缀很奇怪。像往常一样,我请求你们都使用“rx”,这样读你们代码的人就不会发疯或失明:(rx(组(零或更多(语法空白))“=”)完全等同于“\(\\s-*\)=”@offby1,这很奇怪。我可以摸索(\\s-*),但那个rx组。。。零或更多等等等等的东西。。。。我不知道那是什么。我想我已经是一个“被感动”的人了。@slomojo-回答得很好,但你在解释中遗漏了一件事-为什么我们需要为组和间距指定数字?它们被记录为可选的。OP报告错误的真正原因(“错误类型参数:numberp,nil”)是他没有指定组和间距。您为这些指定了1和1,从而避免了错误。看起来这些“可选”参数实际上并不是可选的。@所以,是的,这是由使用任意值所暗示的,你说得很对。。。它们不是可选的,这是
align.el
库中的错误文档。