我经常在一个区域上使用 align-regexp 和正则表达式“[^]+_”。所以我想我会为它定义一个函数,这样我就可以将它绑定(bind)到一个键:
(defun align-members ()
(interactive)
(align-regexp " [^ ]+_"))
但是 emacs 提示 align-regexp 需要三个参数。查看文档,我发现它需要 BEG 和 END。我不知道如何
(interactive)
东西在emacs中工作,但通过阅读我收集的文档,我应该这样做:(defun align-members (BEG END)
(interactive "r")
(align-regexp BEG END " [^ ]+_"))
但是 emacs 然后在 align-regexp 的调用堆栈深处提示它预期
integer-or-marker-p
反而得到了零。我究竟做错了什么?
最佳答案
你应该写如下
(defun align-members (BEG END)
(interactive "r")
(align-regexp BEG END (concat "\\(\\s-*\\)" " [^ ]+_") 1 1))
或者更简单一点
(defun align-members (BEG END)
(interactive "r")
(align-regexp BEG END "\\(\\s-*\\) [^ ]+_" 1 1))
要了解它,请查看
align-regexp
来源,这里有一部分。(interactive
(append
(list (region-beginning) (region-end))
(if current-prefix-arg
(list (read-string "Complex align using regexp: "
"\\(\\s-*\\)")
(string-to-number
(read-string
"Parenthesis group to modify (justify if negative): " "1"))
(string-to-number
(read-string "Amount of spacing (or column if negative): "
(number-to-string align-default-spacing)))
(y-or-n-p "Repeat throughout line? "))
(list (concat "\\(\\s-*\\)"
(read-string "Align regexp: "))
1 align-default-spacing nil))))
如你看到的:
"\\(\\s-*\\)"
到您的正则表达式 align-default-spacing
到可选参数关于emacs - 如何在emacs中为特定的正则表达式包装对齐正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9282506/