@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