寻找 Lisp 代码美化工具

在 Lisp 的世界里有没有类似 JS-beautifer 的工具呢?

虽然 Emacs 开了自动缩进代码格式还不错,但是有时候手写的代码可能还有样式不整齐的情况。有没有这样的工具可以进行格式规整呢?

这个工具是之前同学给推荐的

还有,就是 Google Lisp Style 有没有自动美化器呀?

https://google.github.io/styleguide/lispguide.xml

推荐列表

@tumashu 推荐使用 aggressive-indent-mode 可以在下面找到

1 个赞

之前我的视频当中有提到用 indent-region-or-buffer 来处理缩进呀,快捷键是 C-M-\

1 个赞

但是这样的美化并不是符合开发规则的呀,我想最好是能美化成一样的,或者可以批量做的工具,继续寻找中。

我一般用 aggressive-indent

1 个赞

搜到了一些自动格式化 Emacs Lisp 的工具,这里的格式化涉及到断行,Emacs 本身已经能够正确的缩进,semantic-refactorlispyelisp-format.el,三个都没用过,不清楚能聪明到什么程度。

写代码的时候,只要注意什么时候应该换行(RET)了,Emacs 会自动缩进(因为 electric-indent-mode 默认是开启的),只做到这一点,我觉得 Emacs Lisp 代码就不会出现不整齐的问题。另外这两个命令也很有用:移动至缩进处用 M-m、取消缩进用 M-^,。

2 个赞

自带的 C-M-q 就有一定的“美化”的功能:(粗体是我加的)

C-M-q runs the command indent-pp-sexp (found in lisp-interaction-mode-map), which is an interactive compiled Lisp function in `lisp-mode.el’.

It is bound to C-M-q, .

(indent-pp-sexp &optional ARG)

Indent each line of the list starting just after point, or prettyprint it. A prefix argument specifies pretty-printing.

比如:C-u C-M-q 会把

(defun foo (a b) (let     ((a b)    (b a))   (list a b)))

转化成:

(defun foo
    (a b)
  (let
      ((a b)
       (b a))
    (list a b)))
6 个赞

自带的 pp.el 就能做出美化效果了。

用函数 pp-buffer

3 个赞