Supongamos que tengo una función similar a la siguiente (como suele ser el caso al imprimir resultados de 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))))
Me gustaría un comando que pueda convertir eso en algo que un humano escribiría, como el siguiente.
(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))))
Entiendo que hay más de una forma de formatear un código de Elisp , y que diferentes seres humanos lo hacen de manera diferente. Además, entiendo que es algo subjetivo. Pero debería ser bastante fácil crear un conjunto de reglas que dé como resultado un código que sea al menos decente.
De hecho, pensé en hacer esto hace un tiempo, pero pensé que era mejor preguntar antes de reinventar la rueda.
Tenga en cuenta que conozco la función pp , pero no llega allí:
(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
fuente
fuente
pp
.Respuestas:
Así es como lispy lo volvió a formatear (presionando Men cualquier extremo de la expresión):
Para pasar de esto al formato que especificó, presione qk C-m [.
fuente
(local-set-key (kbd "s-8") #'lispy-multiline) (local-set-key (kbd "s-*") #'lispy-oneline)
Como otros han sugerido en los comentarios, "formatear" puede significar cosas diferentes.
Para la sangría que es bastante convencional, intente usar
C-M-q
(comandoindent-pp-sexp
en modos Lisp) con el cursor en algún lugar dentro del sexp de nivel superior que desea volver a sangrar (por ejemplo, eldefun
sexp).No, esto no es una sangría "automática", pero puede convertirse en un hábito usarla. ;-)
Para otras cosas que no sean sangría, deberá hacerlo manualmente o rodar sus propios comandos de "formateo" o buscar algunos de ellos.
Consulte también el manual de Emacs, nodo Sangría multilínea y el manual de Elisp, nodo
Mode-Specific Indent
.fuente
M-q
(fill-paragraph
) a veces puede ser útil para el salto de línea en el modo Emacs-Lisp, según el contexto. Pero probablemente también estés buscando la alineación ...