【问题标题】:Emacs hotkey to align equal signsEmacs 热键对齐等号
【发布时间】:2011-04-07 16:22:00
【问题描述】:

我想在我的 .emacs 中加入这样的内容:

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

但是每当我运行它时,我都会收到一个错误“错误类型参数:numberp,nil”。

这个错误是什么意思,如何获得我想要的效果?

【问题讨论】:

    标签: emacs


    【解决方案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,或者只是记录并保存一个宏!

    【讨论】:

    • 我仍然会给你一个 +1 :) ... \s-* 前缀很奇怪。
    • 像往常一样,我请求大家使用“rx”,这样阅读你代码的人就不会发疯或失明:(rx (group (zero-or-more (syntax whitespace))) "=") 完全等同于 "\(\\s-*\)="
    • @offby1,这很奇怪。我可以摸索(\\s-*),但是那个 rx 组......零个或多个等等等等......我不知道那是什么。我想我已经是“感动”的人之一了。
    • @slomojo - 很好的答案,但你在解释中遗漏了一件事 - 为什么我们需要为 GROUP 和 SPACING 指定数字?它们被记录为可选。 OP报错的真正原因(“Wrong type argument: numberp, nil”)是他没有指定GROUP和SPACING。您为它们指定了 1 和 1,从而避免了错误。似乎这些“可选”参数实际上不是可选的。
    • @Cheeso,是的,这是通过使用任意值暗示的,你说得对……它们不是可选的,这是align.el 库中的错误文档的情况。
    【解决方案2】:

    #emacs 中的“thunk”解决了它:

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

    有人愿意解释一下“=”的奇怪前缀吗?

    【讨论】:

    • 注意最后一个 nil 是可选的,而 1 1 不是。 align.el 的文档需要整理一下。
    【解决方案3】:

    我挑选了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)))
    

    【讨论】:

    • 但肯定可以在不挖掘 align 命令的内部结构的情况下执行此任务吗?
    • 我是这么认为的,但我不太理解align.el
    猜你喜欢
    • 1970-01-01
    • 2020-07-13
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多