Как сделать emacs правильно, отступ if-then-else создает в elisp

Когда я еще располагаю конструкцию if-then-else с отступом в шепелявости emacs, блок не делает отступ правильно. То, что я получаю:

(defun swank-clojure-decygwinify (path)
  "Convert path from CYGWIN UNIX style to Windows style"
  (if (swank-clojure-cygwin)
      (replace-regexp-in-string "\n" "" (shell-command-to-string (concat "cygpath -w " path)))
    (path)))

где еще форма не располагается с отступом на том же уровне как тогдашняя форма. Существует ли очевидный способ зафиксировать это?

11
задан Alex Miller 22 July 2016 в 21:47
поделиться

2 ответа

Это правильный отступ. Цитата из руководства:

Слово «else» не написано в коде Lisp; часть else в выражении if идет после части then. В написанном Лиспе else-part обычно пишется так, чтобы начинаться с отдельной строки, и с отступом меньше, чем then-part:

 (if TRUE-OR-FALSE-TEST
     ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-TRUE
   ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-FALSE)

Например, следующее if выражение выводит сообщение 4 is не больше 5! , когда вы оцениваете это обычным способом:

 (if (> 4 5)                               ; if-part
     (message "4 falsely greater than 5!") ; then-part
   (message "4 is not greater than 5!"))   ; else-part

Обратите внимание, что различные уровни отступа позволяют легко отличить тогда-часть от другой-части. (В GNU Emacs есть несколько команд , которые автоматически делают отступ , если выражения правильно. * Примечание GNU Emacs помогает вам вводить списки: списки ввода.)

Это функция, не ошибка: -)

17
ответ дан 3 December 2019 в 02:52
поделиться

У меня нет под рукой соответствующей документации, но похоже, что это делает то, что вы хотите:

(put 'if 'lisp-indent-function nil)

Кроме того, вы неправильно использовали слово «правильно»; по определению, однако отступы emacs являются "правильными" :)

8
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: