(declare (indent defun))中indent含义

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

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

(defun
    foo
    ()
  bar
  baz)
2 个赞

谢谢回复。定义宏的时候引入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)
3 个赞

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

光看官方的文档真是一脸的懵逼,好奇 大神 @cireu 是怎么弄透的,还有其它地方的参考资料吗?

:+1: mark 一下,原来如此。好奇怎么弄明白的?官方资料都不解释的.

多改一下 indent 然后自己试验,就好了