调整缩进与第 2、3、4 …个参数对齐?

@cireu 写了一个可定制性很强的包 ( 用sly-el-indent获得更好的Elisp缩进 ), 不知能否支持方括号的缩进。

我也写过一个比较丑的缩进包 ( Emacs Lisp 模式下 If 缩进出问题 - #30,来自 twlz0ne ),支持 :& 对齐,也支持简单的定制,但是我刚刚试过了方括号不行。


UPDATE:

我那个包改一个函数就可以支持方括号缩进了,原因是 [ 刚好是个特殊字符,直接拿来拼接正则会出错😅,转义一下就行了:

diff --git a/lisp-keyword-indent.el b/lisp-keyword-indent.el
index af42402..9abfe50 100644
--- a/lisp-keyword-indent.el
+++ b/lisp-keyword-indent.el
@@ -79,7 +79,7 @@ strip text properties from the return value. "
                (string-match-p
                 (concat
                  "\\`\\(?:"
-                 (mapconcat 'identity prefixes "\\|")
+                 (mapconcat 'regexp-quote prefixes "\\|")
                  "\\)")
                 sexp))
       sexp)))

添加自定义规则:

(add-to-list 'lisp-keyword-indent-rules
             '("[" . (:multiple-value nil :value-offset 0)))

测试:

(insert
 (with-temp-buffer
   (insert "\
(new frame% [label \"opengl test\"]
[width 400]
[height 400])")
   (emacs-lisp-mode)
   (goto-char (point-min))
   (dotimes (_ 2)
     (forward-line) (call-interactively 'indent-for-tab-command))
   (concat "\n" (buffer-string))))
;; =>
;; (new frame% [label "opengl test"]
;;             [width 400]
;;             [height 400])

Repo (已更新): GitHub - twlz0ne/lisp-keyword-indent.el: Rectify the indent of keyword for Emacs Lisp

3 个赞