Powiedzmy, że mam funkcję, która wygląda następująco (jak to często bywa przy drukowaniu wyników w 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))))
Chciałbym polecenia, które może zmienić to w coś, co napisałby człowiek, na przykład następujące.
(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))))
Rozumiem, że istnieje więcej niż jeden sposób sformatowania fragmentu kodu elisp , a różni ludzie robią to inaczej. Ponadto rozumiem, że jest to nieco subiektywne. Ale powinno być dość łatwo wymyślić zestaw reguł, które powodują, że kod jest co najmniej przyzwoity.
Właściwie to kiedyś próbowałem to zrobić, ale pomyślałem, że lepiej zapytać, zanim ponownie wymyślę koło.
Uwaga, znam funkcję pp , ale nie do końca się tam dostanie:
(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
źródło
źródło
pp
.Odpowiedzi:
Oto jak Lispy ponownie sformatował go dla mnie (naciskając Mpo obu stronach wyrażenia):
Aby przejść od tego do określonego formatowania, naciśnij qk C-m [.
źródło
(local-set-key (kbd "s-8") #'lispy-multiline) (local-set-key (kbd "s-*") #'lispy-oneline)
Jak sugerują inni w komentarzach, „formatowanie” może oznaczać różne rzeczy.
Jeśli wcięcie jest dość konwencjonalne, spróbuj użyć
C-M-q
(polecenieindent-pp-sexp
w trybach Lisp) z kursorem gdzieś wewnątrz seksu najwyższego poziomu, który chcesz ponownie wciąć (np.defun
Sexp).Nie, nie jest to „automatyczne” wcięcie, ale korzystanie z niego może stać się nawykiem. ;-)
W przypadku rzeczy innych niż wcięcie musisz albo zrobić to ręcznie, albo wykonać własne polecenie (polecenia) formatowania lub znaleźć jakieś takie.
Zobacz także podręcznik Emacsa, węzeł Wielowierszowe wcięcie i podręcznik Elisp, węzeł
Mode-Specific Indent
.źródło
M-q
(fill-paragraph
) może czasem być użyteczne do łamania linii w trybie Emacs-Lisp, w zależności od kontekstu. Ale zapewne też szukasz wyrównania ...