Допустим, у меня есть функция, которая выглядит следующим образом (как это часто бывает при печати вывода elisp).
(defun my-example-function () (let ((a (do-something)) (b (do-something))) (setq someone me) (with-current-buffer b (do-that (or this (and that those))) (format "%s" a))))
Я хотел бы команду, которая может превратить это в нечто, что написал бы человек, например, следующее.
(defun my-example-function ()
(let ((a (do-something))
(b (do-something)))
(setq someone me)
(with-current-buffer b
(do-that (or this (and that those)))
(format "%s" a))))
Я понимаю, что существует несколько способов форматирования фрагмента кода elisp , и разные люди делают это по-разному. Кроме того, я понимаю, что это несколько субъективно. Но должно быть довольно легко придумать набор правил, который приводит к коду, который по крайней мере приличный.
Я действительно пытался сделать это сам некоторое время назад, но решил, что лучше спросить, прежде чем изобретать велосипед.
Обратите внимание, я знаю о функции pp , но она не доходит до цели:
(defun my-example-function nil
(let
((a
(do-something))
(b
(do-something)))
(setq someone me)
(with-current-buffer b
(do-that
(or this
(and that those)))
(format "%s" a))))
elisp
formatting
Malabarba
источник
источник
pp
.Ответы:
Вот как lispy переформатировал его для меня (нажав Mна любом конце выражения):
Чтобы перейти к указанному форматированию, нажмите qk C-m [.
источник
(local-set-key (kbd "s-8") #'lispy-multiline) (local-set-key (kbd "s-*") #'lispy-oneline)
Как другие предлагали в комментариях, «форматирование» может означать разные вещи.
Для отступов, которые довольно обычны, попробуйте использовать
C-M-q
(командаindent-pp-sexp
в режимах Lisp) с курсором где-нибудь внутри sexp верхнего уровня, который вы хотите повторно сделать отступом (например,defun
sexp).Нет, это не «автоматический» отступ, но может стать привычкой его использовать. ;-)
Для других вещей, кроме отступов, вам нужно будет либо сделать это вручную, либо выполнить свою собственную команду (команды) форматирования, либо найти некоторые существующие.
Смотрите также руководство по Emacs, узел Многострочный отступ и руководство по Elisp, узел
Mode-Specific Indent
.источник
M-q
(fill-paragraph
) иногда может быть полезен для разрыва строки в режиме Emacs-Lisp, в зависимости от контекста. Но вы, вероятно, также ищете выравнивание ...