Disons que j'ai une fonction qui ressemble à ce qui suit (comme c'est souvent le cas lors de l'impression d'une sortie 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))))
Je voudrais une commande qui puisse transformer cela en quelque chose qu'un humain écrirait, comme ce qui suit.
(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))))
Je comprends qu'il existe plus d'une façon de formater un morceau de code elisp , et différents êtres humains le font différemment. De plus, je comprends que c'est quelque peu subjectif. Mais il devrait être assez facile de trouver un ensemble de règles qui aboutisse à un code au moins décent.
J'ai pensé à le faire moi-même il y a quelque temps, mais j'ai pensé qu'il valait mieux demander avant de réinventer la roue.
Remarque, je connais la fonction pp , mais elle n'y arrive pas vraiment:
(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
la source
la source
pp
.Réponses:
Voici comment lispy l'a reformaté pour moi (en appuyant Msur l'une des extrémités de l'expression):
Pour passer de cela au formatage que vous avez spécifié, appuyez sur qk C-m [.
la source
(local-set-key (kbd "s-8") #'lispy-multiline) (local-set-key (kbd "s-*") #'lispy-oneline)
Comme d'autres l'ont suggéré dans les commentaires, le «formatage» peut signifier différentes choses.
Pour une indentation assez conventionnelle, essayez d'utiliser
C-M-q
(commandeindent-pp-sexp
en modes Lisp) avec le curseur quelque part à l'intérieur du sexp de niveau supérieur que vous souhaitezdefun
réindenter (par exemple, le sexp).Non, ce n'est pas une indentation "automatique", mais cela peut devenir une habitude de l'utiliser. ;-)
Pour les choses autres que l'indentation, vous devrez soit le faire manuellement, soit lancer vos propres commandes de «formatage», soit en trouver de telles.
Voir également le manuel Emacs, nœud Retrait multiligne et le manuel Elisp, nœud
Mode-Specific Indent
.la source
M-q
(fill-paragraph
) peut parfois être utile pour les sauts de ligne en mode Emacs-Lisp, selon le contexte. Mais vous cherchez probablement aussi l'alignement ...