(declare (indent defun))中indent含义

请问(declare (indent defun))indent defun含义是什么? 这是文档描述链接Indenting Macros (GNU Emacs Lisp Reference Manual)

defun 一样缩进,前两个参数缩进 4, 之后的参数全部缩进 2

(defun
    foo
    ()
  bar
  baz)
1 个赞

谢谢回复。定义宏的时候引入indent defun的意义是什么呢?把这一行删除有什么影响呢?

对代码运行没任何影响,方便编辑罢了

1 个赞

谢谢回答。这个是怎样体现方便编辑的呢?是方便编辑宏,还是方便编辑宏生成的函数?

编辑宏

1 个赞

(declare (indent 4))改为 (declare (indent 8))对定义的宏中的代码缩进好像没影响,请问这是怎样体现方便编辑宏的呢

有效果,需要重新 eval 那个宏的定义然后重新缩进那些代码,比如

(defmacro progn-indent4 (&rest body)
  (declare (indent 4))
  `(progn ,@body))
(progn-indent4
    1
    2
    3
    4
  5
  6
  7
  8
  9)

indent 改成 8 并且用 M-x eval-defun 重新 eval 宏之后,再 indent 上面的代码

(progn-indent4
    1
    2
    3
    4
    5
    6
    7
    8
  9)
2 个赞

这个展示挺直观的,谢谢解答