iT邦幫忙

DAY 13
1

EMACS 新思維系列 第 13

[EMACS新思維 第十六天] Elisp 與其他 S-expression 語言編輯的技巧

幾個實用的 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,有一個特別的刮號提示能力,能告訴你鄰近的刮號在哪裏,如下圖所示,注意刮號的顏色!


上一篇
[EMACS新思維 第十五天] Elisp 入門(五): add-hook 與 set-key
下一篇
[EMACS新思維 第十七天] Tramp-mode:編輯遠端文件
系列文
EMACS 新思維27

尚未有邦友留言

立即登入留言