Câu trả lời:
Các biểu tượng cho các hàm và macro có một thuộc lisp-indent-function
tính mà bạn có thể đặt declare
hoặc trong trường hợp của bạn, vì if
đã được xác định, bạn chỉ có thể sử dụng put
.
Bạn có thể đọc về các giá trị tài sản có thể ở đây:
M-: (info "(elisp) Indenting Macros")
return
if
Cài đặt mặc định là 2
nghĩa là hình thức thứ hai được đối xử đặc biệt và được bù đắp.
Bạn có thể thay đổi giá trị tài sản thành 'defun
và tất cả các hình thức cơ thể sẽ xếp hàng.
(put 'if 'lisp-indent-function 'defun)
Thực hành tốt nhất:
Điều quan trọng cần lưu ý là có một lý do cho phong cách thụt đầu dòng. if
trong Elisp KHÔNG giống như if
trong Lisp thông thường.
Lưu ý các chữ ký khác nhau:
Lisp thường gặp: (if TEST THEN &OPTIONAL ELSE)
Emacs Lisp: (if COND THEN ELSE...)
Trong Emacs lisp, bạn có thể có bao nhiêu biểu mẫu sau điều kiện bạn muốn nhưng chỉ có hình thức đầu tiên là mệnh đề THEN, tất cả các hình thức khác là một phần của mệnh đề ELSE.
Đây là if
biểu mẫu Elisp hợp lệ không hợp lệ trong CL:
(if something
(message "THEN")
(message "all")
(message "these")
(message "run")
(message "on")
(message "ELSE"))
Điều này cho thấy tại sao điều quan trọng là mệnh đề THEN được thụt lề nhiều hơn, đó là làm cho nó nổi bật so với tất cả các mẫu ELSE.
Ngoài việc thụt lề rất quan trọng đối với khả năng phân tích mã của người dùng, nó cũng sẽ đi ngược lại các kiểu dáng được chấp nhận của elisp. 99.99999% (được tính toán kỹ lưỡng) của mã elisp mà bạn gặp sẽ sử dụng chính xác lược đồ thụt lề mặc định. Thay đổi thụt lề if
cho việc sử dụng của riêng bạn sẽ khiến bạn khó có thể làm việc trên những người khác và làm cho người khác khó làm việc với bạn.
if
như được thực hiện bởilisp-indent-function
.