对齐plist中的符号

时间:2018-03-11 16:42:52

标签: emacs indentation

如何在plist中对齐符号?请使用以下默认'emacs-lisp-mode缩进

的示例
'(:a 1
     :b 2
     :c 3)

(defhydra h (:color amaranth
                    :pre some-pre
                    :post some-post)
  nil)

如何实现以下缩进?

(defhydra h (:color amaranth
             :pre some-pre
             :post some-post)
  nil)

另一方面,像c-show-syntactic-information这样的lisp有类似的功能,这对这类事物非常有用。 apropos找不到任何内容。

2 个答案:

答案 0 :(得分:2)

您希望Emacs缩进defhydra的方式与缩进Common的方式相同 Lisp defun,所以你把

(autoload 'common-lisp-indent-function "cl-indent" "Common Lisp indent.")
(custom-set-variables
 '(lisp-indent-function 'common-lisp-indent-function))
(put 'defhydra 'common-lisp-indent-function 'defun)

进入.emacs并在lisp-mode中编辑您的九头蛇文件。

答案 1 :(得分:0)

在前一个答案的基础上,common-lisp-indent-function将根据需要缩进plist。但是,我不想全局更改缩进函数,所以这只是用common-lisp-indent-function缩进区域并使用前缀打开/关闭它的包装器。

(defun my-cl-indent (&optional start end switch)
  "Indent region with `common-lisp-indent-function'. With prefix
toggle buffer-local value to be `common-lisp-indent-function'."
  (interactive "r\nP")
  (when switch
    (setq-local lisp-indent-function
                (if (eq lisp-indent-function 'lisp-indent-function)
                    'common-lisp-indent-function
                  'lisp-indent-function)))
  (let ((lisp-indent-function 'common-lisp-indent-function))
    (put 'cl-flet 'common-lisp-indent-function
         (get 'flet 'common-lisp-indent-function))
    (indent-region start end)))