幾個實用的 elisp 編輯相關設定。若有在寫 clojure、scheme、common lisp 也可以參考哦!
先上原始碼
;; Elisp
(defun byte-compile-init-dir ()
(interactive)
(byte-recompile-directory user-emacs-directory 0))
(defun remove-elc-on-save ()
(add-hook 'after-save-hook
(lambda ()
(if (file-exists-p (concat buffer-file-name "c"))
(delete-file (concat buffer-file-name "c"))))
nil t))
(add-hook 'emacs-lisp-mode-hook
(lambda ()
(highlight-parentheses-mode t)
(paredit-mode t)
(remove-elc-on-save)))
函數 byte-compile-init-dir 的功能在於把目標資料夾內的檔案編譯爲 .elc。Emacs 若發現資料夾內有 elc 和 el 檔案並存,則總是會優先載入 elc 檔案。也因爲它已經編譯爲 byte-code,執行速度會有所提升。
但是我們編輯完 elisp 檔案,並不會自動幫我們編譯,並取代舊的。所以在 elisp-mode 的存檔功能上,掛鉤了一個 lambda 函數,專門把舊的 elc 清除(不過不會自動編譯)另外,package.el / el-get 安裝或更新的檔案,均會自動更新,所以這個功能只用在自己寫的設定檔上。
最後,兩個套件。
一個是 paredit,結構化編輯任何以 S-expression 形式書寫的語言(clojure、scheme、common lisp、emacs lisp)。因爲在 S-expression 下,刮號一定是成對的,一些刪減表達式的操作很容易導致程式的 bug。
Emacswiki: paredit
另一個是 highlight-parentheses-mode,有一個特別的刮號提示能力,能告訴你鄰近的刮號在哪裏,如下圖所示,注意刮號的顏色!