我的代码在这种语言中很多很长,如下所示
(defn check-if-installed[x] (:exit(sh "sh" "-c" (str "command -v " x " >/dev/null 2>&1 || { echo >&2 \"\"; exit 1; }"))))
或
(def Open-Action (action :handler (fn [e] (choose-file :type :open :selection-mode :files-only :dir ListDir :success-fn (fn [fc file](setup-list file)))) :name "Open" :key "menu O" :tip "Open spelling list"))
太可怕了。我想格式化它
(if (= a something)
(if (= b otherthing)
(foo)))
如何以更好的方式美化源代码?
答案 0 :(得分:5)
真正的答案取决于您是否愿意自己插入换行符。很多系统 一旦你把它分成几行,你就可以用惯用的方式缩进这些行。
如果您不想想要手动插入它们,那么Racket会提供一个"漂亮的打印"做了你想要的一些事情:
#lang racket
(require racket/pretty)
(parameterize ([pretty-print-columns 20])
(pretty-print '(b aosentuh onethunoteh (nte huna) oehnatoe unathoe)))
==>
'(b
aosentuh
onethunoteh
(nte huna)
oehnatoe
unathoe)
...但我是第一个承认在正确位置插入换行很难的人,因为 换行符的选择与您希望人们阅读代码的方式有很大关系。
答案 1 :(得分:3)
我经常使用Clojure.pprint使生成的代码更适合人类。 它适用于报告认为它的目标是生成文本。如果你把新行放在自己的身上,那么clojure-mode emacs包中内置的格式会产生格式很好的Clojure。
答案 2 :(得分:2)
现在您可以使用Srefactor package。
一些演示:
可用命令:
srefactor-lisp-format-buffer
:格式化整个缓冲区srefactor-lisp-format-defun
:格式当前的defun游标位于srefactor-lisp-format-sexp
:格式化当前的性别光标。srefactor-lisp-one-line
:将同一级别的当前性别变为一行;使用前缀参数,递归地将所有内部性别变为一行。Scheme变体不像Emacs Lisp和Common Lisp那样精致,但适用于简单和小型的sexp。如果有任何问题,请提交问题报告,我很乐意解决。