Digamos que eu tenha uma função que se parece com a seguinte (como geralmente ocorre ao imprimir a saída 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))))
Eu gostaria de um comando que possa transformar isso em algo que um humano escreveria, como o seguinte.
(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))))
Entendo que há mais de uma maneira de formatar um pedaço de código elisp , e diferentes seres humanos o fazem de maneira diferente. Além disso, eu entendo que é um pouco subjetivo. Mas deve ser bastante fácil criar um conjunto de regras que resultem em código que seja pelo menos decente.
Na verdade, eu pensei em fazer isso sozinho há um tempo, mas achei melhor perguntar antes de reinventar a roda.
Observe que estou ciente da função pp , mas ela não chega lá:
(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
fonte
fonte
pp
.Respostas:
Veja como o lispy o formatou para mim (pressionando Mem cada extremidade da expressão):
Para passar disso para a formatação especificada, pressione qk C-m [.
fonte
(local-set-key (kbd "s-8") #'lispy-multiline) (local-set-key (kbd "s-*") #'lispy-oneline)
Como outros sugeriram nos comentários, "formatação" pode significar coisas diferentes.
Para um recuo bastante convencional, tente usar
C-M-q
(comandoindent-pp-sexp
nos modos Lisp) com o cursor em algum lugar dentro do sexp de nível superior que você deseja recuar (por exemplo,defun
sexp).Não, isso não é um recuo "automático", mas pode se tornar um hábito usá-lo. ;-)
Para outras coisas além do recuo, você precisará fazer isso manualmente ou rolar seus próprios comandos de "formatação" ou encontrar alguns existentes.
Veja também o manual do Emacs, nó Multi-line Indent e o manual Elisp, nó
Mode-Specific Indent
.fonte
M-q
(fill-paragraph
) às vezes pode ser útil para quebra de linha no modo Emacs-Lisp, dependendo do contexto. Mas provavelmente você está à procura de alinhamento, bem ...