Emacs热键对齐等号
我想在我的.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)的源代码,并得出以下结论:
(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
库中的错误文档。