emacs - 如何在emacs中为特定的正则表达式包装对齐正则表达式

标签 emacs elisp

我经常在一个区域上使用 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-*\\)"到您的正则表达式
  • 它设置 1 和 align-default-spacing到可选参数
  • 关于emacs - 如何在emacs中为特定的正则表达式包装对齐正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9282506/

    相关文章:

    emacs - 如何交互运行setq

    python - 我想要一个 elisp 脚本在光标下执行 Python 单行代码

    regex - emacs 正则表达式问题

    *first* require 语句上的 emacs 字节编译错误

    emacs - Merlin 提示同一个项目中缺少一个模块

    emacs - 如何在 Emacs 中为自定义次要模式创建键绑定(bind)

    emacs - C-x 在 CUA 模式下的标准行为

    emacs - 如何仅对 *.el 文件启用 Show-Paren 模式

    emacs - 是否有直接的 elisp 方法来检查进程是否在 emacs 术语缓冲区中运行?

    emacs - Lisp 源代码文件本身是列表吗?