【问题标题】:Emacs calling align regexpEmacs 调用对齐正则表达式
【发布时间】:2012-10-14 19:50:24
【问题描述】:

我正在尝试将参数传递给 Emacs (Lisp) 中的 align-regexp 函数:

(defun align-on-comment-char ()
  (interactive)
  (align-regexp (region-beginning) (region-end) "#")
)

我实际上想专门为我的所有模式执行此操作,对于每个模式我想绑定一个“对齐到注释字符”(; 用于 emacs lisp,% 用于 Latex,# 用于 R) ”。

我错过了什么?

【问题讨论】:

    标签: regex function emacs alignment


    【解决方案1】:

    comment-startcomment-end 是获取当前模式的注释字符串的常用变量。

    你还需要附加一些魔法来正确匹配 调用对齐正则表达式。像奥列格一样,我必须以艰难的方式解决这个问题 通过查看源。这里的错误信息并不是真的 描述性的,我真的认为这值得一个错误报告或 至少一个文档修复。

    (defun align-comment (beg end)
      (interactive "r")
      (align-regexp beg end (concat "\\(\\s-*\\)" comment-start))
    )
    

    【讨论】:

    • 请详细说明。我的目标是在该模式的注释字符上对齐一个区域(选定的文本)。我对每种模式都有专门的功能很好。让我们先试试这个带#字符的?
    • @Dualinity 好的,这确实比我预期的要棘手。我已经发布了一个完整的工作示例。
    • 太棒了!道具给你。有点给了我希望,因为作为 Emacs Lisp 新手,我真的尽了最大努力。
    • @Dualinity 这个函数看起来很合理。如果您使用它,请拥有它。没有教条。我通常只是在需要时即时定义类似的东西。对于手册:elisp 手册本身确实不好(功能文档(C-h f))通常是。拿起一本 lisp 书以获得更一般的介绍,或者从 Xah Lee 的一些教程开始。 ergoemacs.org/emacs/elisp.html
    • @Dualinity elisp 手册是一本参考书,而不是教程。当您已经有了大致的想法时,它对细节非常有用。对于新手,gnu.org/software/emacs/emacs-lisp-intro 是一个很好的介绍,可以从 Emacs 信息系统获得。然后看这里:stackoverflow.com/questions/41522/tips-for-learning-elisp
    【解决方案2】:

    您应该稍微更改一下您的代码。

    例如这样:

    (defun align-on-comment-char (beg end)
      (interactive "r")
      (align-regexp beg end "\\(\\s-*\\)#")
    )
    

    魔术字符串"\\(\\s-*\\)"取自align-regexp的来源。

    如果您想为所有模式使用一个函数,请使用@pmr 指出的comment-start 变量。

    (align-regexp beg end (concat "\\(\\s-*\\)" comment-start))
    

    【讨论】:

    • 我在您发布的时间看到了大约相同的字符串。这确实需要更好的文档。
    • 嗯,这不是“魔术字符串”;它只是在对齐过程中要修改的指定正则表达式组。碰巧的是,您大部分时间都想使用零个或多个空格组。我同意对齐系统可以对文档进行一些改进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    相关资源
    最近更新 更多