Насколько я могу судить, индентор Emacs не понимает, что происходит, если вы запускаете совершенно новый sexp в той же строке, что и отступ с отступом, что и делает ваш let
выше.Вы видите похожую проблему с
(if (< 1 (- 3
1) 3
4))
Конечно, писать, что для начала это не очень хороший стиль, поэтому, возможно, Emacs может быть извинен.Как вы заметили, код, подобный этому, с большей вероятностью будет отображаться в let
или cond
в Clojure, и это не плохой стиль - но индентор Emacs был разработан для других строк, которые требуют, чтобы каждая пара заключалась в скобки:
(let [([x
y
z] (foo))
([a
b
c] (bar))]
...)
И, как вы видите, эти отступы в порядке.Поэтому я думаю, что в какой-то момент кому-то придется выяснить, как обновить индентор Emacs для этого случая, и что это будет намного проще, чем получить какой-либо другой редактор до уровня Emacs.Возможно, этот человек должен быть вами, если вас это беспокоит - я полагаю, магия и бремя открытого исходного кода.