Katakanlah saya memiliki fungsi yang terlihat seperti berikut (seperti yang sering terjadi saat mencetak keluaran 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))))
Saya ingin perintah yang dapat mengubah itu menjadi sesuatu yang manusia akan tulis, seperti berikut ini.
(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))))
Saya mengerti bahwa ada lebih dari satu cara untuk memformat sepotong kode elisp , dan manusia yang berbeda melakukannya secara berbeda. Selanjutnya, saya mengerti itu agak subjektif. Tetapi harus cukup mudah untuk membuat seperangkat aturan yang menghasilkan kode yang setidaknya layak.
Saya sebenarnya sulit melakukan ini sendiri beberapa waktu lalu, tetapi saya pikir lebih baik untuk bertanya sebelum saya menemukan kembali kemudi.
Catatan, saya mengetahui fungsi pp , tetapi tidak cukup sampai di sana:
(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
sumber
sumber
pp
.Jawaban:
Inilah cara lispy memformat ulang untuk saya (dengan menekan Mdi kedua ujung ekspresi):
Untuk beralih dari ini ke format yang Anda tentukan, tekan qk C-m [.
sumber
(local-set-key (kbd "s-8") #'lispy-multiline) (local-set-key (kbd "s-*") #'lispy-oneline)
Seperti yang disarankan orang lain dalam komentar, "memformat" dapat berarti hal yang berbeda.
Untuk indentasi yang cukup konvensional, coba gunakan
C-M-q
(perintahindent-pp-sexp
dalam mode Lisp) dengan kursor di suatu tempat di dalam sexp tingkat atas yang ingin Anda indentasi ulang (misalnyadefun
sexp).Tidak, ini bukan lekukan "otomatis", tetapi ini bisa menjadi kebiasaan untuk menggunakannya. ;-)
Untuk hal-hal selain lekukan, Anda harus melakukannya secara manual atau menggulung perintah "pemformatan" Anda sendiri atau menemukan beberapa yang sudah ada.
Lihat juga manual Emacs, simpul Indentasi Multi-line dan manual Elisp, simpul
Mode-Specific Indent
.sumber
M-q
(fill-paragraph
) terkadang dapat berguna untuk pemecahan garis dalam mode Emacs-Lisp, tergantung pada konteksnya. Tetapi Anda mungkin juga mencari keberpihakan ...