星期六, 4月 14, 2007

[tip] Emacs 管理方法的一些零散小看法.

每個使用emacs的人emacs管理方法都各有不同,
未必我的經驗就是好的, 網路上也有不少先進有他們獨到的看法,
我也時常受益良多,
不過在這之前我得先說個悲慘的emacs小故事:

從前有一個喜愛使用emacs的人,
因為他慣用的.emacs被人弄丟了,
從此之後就使用了vi.

(註: 這個人的名字叫Tim O'reilly.)

這個被我渲染過的悲慘小故事告訴了我們,
如果想要好好使用emacs,
就不得不用點心思在管理emacs files上.
何況別人的.emacs對你而言經常是無用的,
而一旦你丟失了你的慣用.emacs,
想重新打造一個屬於自己的.emacs將耗盡你的青春,
甚至還不如去學一個別的editor.

我目前的一些管理方法是這樣的,當然我說過了,
我的作法未必正確,而且未來也可能會改變我的看法,
這篇將就將就參考看看吧:

1. 維持~/.emacs 簡單, 使用~/.emacs.d來管理emacs

我的.emacs目前只放了一些很簡單的事情,
如: Custom 跟我的initial .el"s" function.
好處就是.emacs很清爽, 如果有需要的話,
也只要將非常重要的設定放在這邊就好了 其他的利用.emacs.d來對設定分門別類.

2. Add functions to auto-compile every .el after you edit it.

編譯成.elc會加快你loading emacs的速度.

我寫了一個elisp function來自動作這件事情:
(.emacs可另外處理)


(defun auto-byte-compile-el-file ()
(let* ((filename (file-truename buffer-file-name)))
(cond ((string= (substring filename
(- (length filename) 3)) ".el")
(byte-compile-file filename)))))

(add-hook 'after-save-hook 'auto-byte-compile-el-file)


3. 使用版本控制軟體(SCM).

我使用的是bazaar, 一個分散式的SCM. 因為我覺得他對我來說很方便.
不過不論如何,我強烈建議採用任何一個你慣用的SCM(cvs/subversion/darcs/git)來控管你的.emacs/.emacs.d
別忘了,你的.emacs非常重要, 甚至比妳專案的程式碼都還來的重要,
程式碼丟了不過是個案子, .emacs丟了妳痛苦一輩子 :P

4. 善用M-x toggle-debug-on-error

這是debug emacs設定的最佳實務技巧.
相信我, 妳會用到他的.

5. 使用管理rc的方式來管理.emacs.d

將你的.emacs.d 分類, 並寫成像rc的方式.
類似如此:

000globalinit.el
010packageinit.el
020etags.el
...

600ecb.el
700lisp.el
710python.el
715django.el
720javascript.el
730cc.el
740ruby.el
750haskell.el
900testconfig.el

6. install site packages to your .emacs.d

將你安裝的emacs套件與你的設定檔分開管理. 但是都放在 .emacs.d裏面.

7. 將 bookmark, TAGS, auto-save, desktop_state, semantic.cache, backups, session 等檔案納入.emacs.d管理.

emacs有很多檔案預設會四散在各地, 最好也將他納入.emacs.d管理.

8. set $EDITOR to emacsclient.

emacs的啟動速度是個問題, 使用emacsclient是個好方法.

9. 替.emacs.d 作一個bookmark, 並安裝dired-single.el
我相信你會常常需要修改.emacs.d, 我的作法是作一個bookmark,
此外,dired-single.el可以讓你不要每次切換目錄都開一個dired出來.

10. 當然還有很多想法/技巧我無法一一列舉,
不過我覺得用emacs是一輩子的事, 值得用一輩子來學習.

****

It's your editor, not other's.

沒有任何兩個人心中的夢幻editor是一樣的,
像我重設了emacs的ctrl-k刪行行為,
但另外一個emacs user卻可能嗤之以鼻.
另外emacs user經常大幅度的改變了不少預設的keystroke,
故每個人都有一套自己順手的emacs操作方法,
所以自己的.emacs要自己管理, 沒有人能幫上你太多忙.

每個人都在打造屬於自己最適合自己的"editor神器",
但天下可沒有白吃的午餐, 別人的神器未必是你的神器,
而emacs的價值就在於emacs提供了一個機會讓你去打造屬於自己的editor,

"Think emacs as an environment."

如果你是programmer,
如果你一天花時間在editor上超過八小時,
請用你學習作業系統的想法去打造emacs,
既然肯花很多時間去打造屬於自己的windows/linux/*bsd/OSX,
為何不願意花時間打造editor?

Since you use emacs, you need to think different.
I believe emacs will reward you. At least, it rewards me a lot.

:-)

沒有留言: