關於大家都會的配置文件的架構
首先,Emacs 默認的配置文件,是位於電腦上 ~/.emacs.d/ 目錄下的一個叫做 init.el 的文件,".el" 這個後綴代表該文件使用的是 Emacs-Lisp 語言。新人常見的配置,無非就是設置一下啟動信息,編輯界面,自動縮進,顯示行號,括弧自動匹配,默認編碼等等。但是當用戶自定義的函數、宏、hook 和快捷鍵多起來了之後呢,為了便於管理和查看,就有必要把它們分散到若干個角色不同的文件里。對我而言,這些文件分別是:
init.el ——位於系統默認路徑下的配置文件,其內容只有一行
(load "d:/sync/emacs.d/load.el")n
然後通過 load.el 這個文件,重新定義 Emacs 里的用戶路徑和 load-path
;; buffern;; fontn;; framen;; languagen;; startupn;; windownn;; ~loadn(setq default-directory "d:/sync/")n(add-to-list load-path "d:/sync/emacs.d/")n(load "defun.el")n(load "kbd.el")n(load "hook.el")n
其中,buffer font frame language startup window 分別指相關的配置代碼,具體我就略過了,最後的這個 ~load 最重要,分別重新設置了 Emacs 的默認路徑,添加了新的 load-path,然後把我自定義的各種玩意兒,按照函數/宏,快捷鍵,hook 三個分類分別放到了 defun.el, kbd.el, hook.el 三個子文件中去。
之所以要設置這樣一個 load.el 而不是把它們的內容直接放到 init.el 里,是因為我需要在多個不同的電腦里同步 Emacs 的配置,但是呢,我又不希望在同步配置文件的時候,把其他插件的安裝包也給同步了(避免臃腫和衝突)。所以這裡我手動設置了 init.el ,然後只同步 load.el 及其之後的文件:
defun.el ——裡邊包含我所定義的各種函數/宏/命令,格式分別為
(defun f-come-function (args)n ... ...)n(defmacro m-some-macro (args)n ... ...)n(defun c-some-command (args)n (interactive)n ... ...)n
很多時候,人們自己寫函數,都是為了將它綁到某個快捷鍵上,一般都直接寫在一起,例如
(defun c-some-command (args)n (interactive)n ... ...)n(global-set-key (kbd "A") c-some-command)n
但是,如果你經常修改命令或者快捷鍵的話,你或許會覺得把它們分開存放更便於管理。所以我特地設置了一個用於存放快捷鍵命令的文件—— kbd.el,在裡邊我定義了兩個 Minor-Mode 和一系列快捷鍵
(define-minor-mode number-moden ... ...)n(define-minor-mode visual-moden ... ...)n(global-set-key ... ...)n(m-map-key ... ...)n
其中相當一部分快捷鍵設置所需要的命令,都提前在 defun.el 中定義好了。
最後一個是 hook.el ——用於存放各種語言或者插件(內置的以及下載的)的設置和 hook,以 python 為例
(defun f-python-mode ()n ... ...)n(add-hook python-mode-hook f-python-mode)n
還有一些 minor-mode-map 的設置例如
(define-key edmacro-mode-map (kbd "C-x C-k RET") kill-this-buffer)n
以及主題設置
(load-theme ample t)n
這裡需要注意的是,在設置各種 hook 之前,必須要對 package.el 進行初始化設置
(package-initialize)n
其他插件的設置才能正常執行。另外,如前文所說,由於我需要在多個電腦上同步配置,但是又不想同步所有下載的插件包,那當我換了一台新電腦之後,就得有一種機制去自動檢測我所需要的各種包是否正常安裝了——這件事情好像有很多辦法去做,這裡我自己寫了個函數
((lambda (&rest packages)n (dolist (pkg packages)n (unless (package-installed-p pkg)n (when (y-or-n-p (format "Package "%s" not found. Install it? " pkg))nt (package-install pkg)))))n ample-themen essn ghcn highlight-symboln magitn markdown-moden matlab-moden )n
放在 (package-initialize) 之後就好了。
以上就是這一期的無聊內容,寫完覺得鬱鬱寡歡好想睡覺。下一期我們再講一個非常好玩非常實用的主題:正則替換和宏操作。具體內容為——增量的正則替換(替換成等差數列),列表的正則替換 (替換為指定的列表),重複替換(每一種不同的替換都重複執行 n 次後再進行下一種),以及對原生 kmacro.el 的改造和優化,順帶的也把 cua-mode 里的 cua-sequence-rectangle 給升級了一下下。
(冷漠臉,不知道為什麼好想躺屍。。。。。。
推薦閱讀:
※Emacs常見鍵綁定方式匯總
※對於新手來說 如何用atom搭建python的ide?
※atom的active-power-mode插件能關掉窗口抖動嗎?
※VSCode、Atom和Sublime為什麼不支持代碼標籤成對摺疊呢?
※VScode如何根據不同文件類型設置諸如tab的長度、ruler位置等選項?