3

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

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

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

我错过了什么?

4

2 回答 2

4

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

在调用 align-regexp 时,您还需要附加一些魔法来获得正确的匹配。像奥列格一样,我不得不通过查看源代码来解决这个问题。这里的错误消息并不是真正的描述性,我真的认为这值得一个错误报告或至少一个文档修复。

(defun align-comment (beg end)
  (interactive "r")
  (align-regexp beg end (concat "\\(\\s-*\\)" comment-start))
)
于 2012-10-14T20:00:33.507 回答
4

你应该稍微改变你的代码。

例如像这样:

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

魔术字符串"\\(\\s-*\\)"取自align-regexp.

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

(align-regexp beg end (concat "\\(\\s-*\\)" comment-start))
于 2012-10-14T20:16:04.423 回答