我的Emacs折騰經驗談(一) 一些給新人的建議


這幾天都沒有動力寫mongodb的東西,我果然還是太懶了么~ 主要是沒有一個系統的東西整理出來,加上我令人拙計的語言表達能力,這個坑只能慢慢再補了.

最近在折騰emacs這個東西,首先說我曾經算是個極為堅定的VIM黨,我在各種IDE里面基本都會要裝VIM化的插件,而且我的瀏覽器Firefox一直有Vimperator這個插件,現在上網如果不能用d關網頁/用t開tab就會覺得難受.那么我為啥還要搞emacs呢?而且眼看着sublime一天天變得流行起來,而emacs基本沒什么新人在用,我為啥又在這個時候折騰emacs呢?

理由其實也不是很充分,但是對我而言已經夠了:

  1. Emacs是用Lisp的最經典的程序了,作為試圖成為Lisper的人,emacs最起碼應該使用過.君不見github上最流行的lisp方言就是emacs lisp(雖然絕大部分repo都是大家把各自的emacs配置放上去了而已)
  2. Emacs是Hacker的選擇,首先開發者RMS神不用說了(如果不知道這位的話建議不要用Emacs來進行工作,我現在覺得Emacs也確實是不太適合大眾用的東西,只適合對於文本編輯效率極高的人群,最典型的就是碼農),其次大量知名人士使用 著名Emacs用戶列表 ,雖說並不是別人用什么你就改用什么,但至少你能確定這不是一個糟糕的選擇.
  3. 最近寫clojure,對於括號的操作很重要,而paredit讓寫lisp輕松了一些.
  4. 本人相對來說還是不是特別怕折騰的

(附Richard Matthew Stallman照片一張)

那么就開始折騰吧,之前對於emacs的復雜程度心里有所准備,所以知道這東西不會像sublime一樣開箱就能用,果然第一個遇到的問題就是:怎么打開文件啊?

先鎮定,我之前用vim的時候就是各種操作不會,都只能找菜單,這里一樣先找菜單再說,然后發現選了打開文件以后是要輸文件路徑的(囧).估計光是這一點就足夠趕走無數的用戶,真是用戶交互設計的一大敗筆,不過emacs這東西就不是給普通用戶設計的,只有接受它的設定,才能達到我們的目標:提高效率.

接下來學習的過程就不再敘述了,總之就是先Ctrl+h t看完了教程先,教程是英語的但是很好懂.然后就是一邊開着手冊一邊試着編輯文件了.就和學習一門新語言一樣,不斷的寫程序是最快能學會的方法.

 

別人的Emac是這樣的

別人的emacs是這樣的                                                         我的emacs是這樣的

 

防治小拇指抽搐

學習的歷程還是很漫長的,尤其是在Vim的肌肉記憶深深植根大腦的時候,令人憤怒的是你會發現Emacs的鍵位比較奇葩,不是很好按,不像Vim有模式可以不用修飾鍵,Emacs里面需要大量的Ctrl Shift Alt等等,這就大大加深了小拇指的負擔.有人建議裝腳踏板給Ctrl和Alt,我覺得這方案還挺好的,可惜這需求太小眾,萬能的淘寶都找不到合適的踏板,有一種但是看上去不給力且價格不理想.

我這里建議把Capslock鍵改了,我之前使用Vim的時候是Capslock和ESC交換,現在則是Capslock直接改成Ctrl,因為capslock實在沒有什么用.這樣的話開vim的時候注意 Ctrl+[ 是和ESC起一樣的作用的,這樣就可以同時讓Emac和Vim的按鍵都舒服許多.在Mac上還有點優勢就是不需要裝額外的軟件就可以把鍵給改了.

站在巨人的肩膀上

既然emacs是是眾所周知的難於配置,自然有拯救蒼生的各位大大想讓更多的菜鳥能用上神器.於是乎出現了不少文章幫助菜鳥度過難關,其實只要經常搜一下就會找到他們的博客,例如emacs中文網,李殺網等很多地方.另外還有些大大分享了他們的配置文件供我們上手快一些,我這里用的是emacs-starter-kit, 注意它的作者是leiningen的作者,非常值得借鑒.Emacs-starter-kit的github頁面上有關於如何使用的說明.沒有它的話天知道又有多少人會把光陰白白送在一些非常基礎的設置之中了.

Package.el

以前的Emacs的插件管理方式非常的原始,都是直接把插件的el文件放在.emac.d文件夾下,並不區分插件和配置文件,這對於插件的管理/升級/卸載都十分的不便,后來就有了package.el插件來幫助設置插件.最后Emacs的作者們終於在Emacs的24版中內置了插件管理,為我們省卻了很多功夫.在安裝emacs-starter-kit的時候指南上就介紹我們要在init.el中寫

1 (require 'package)
2 (add-to-list 'package-archives
3              '("marmalade" . "http://marmalade-repo.org/packages/") t)
4 (package-initialize)

這里第一行是說加載package.el這個包,2~3行說為package.el中加入marmalade的源來獲取包,第4行是初始化包.剛開始的時候不需要明白到底這些都是啥.只要不要隨便就刪掉它們就好了.

這些代碼算是設置好了軟件源,就跟我們在ubuntu上設apt-get的源一樣.但是我在嘗試sr-speedbar這個包的時候發現安裝時會出一些問題,沒有辦法裝上去,在github上找到了sr-speedbar的代碼,發現由於兼容性問題在最近的2013年才被修正過,而marmalade上的版本是2009年的,就是說如果用marmalade的話就沒有辦法正確安裝,我現在暫時還不會hack package中的代碼(何況這樣就失去了package打包安裝的意義),嘗試了一下byte-recompile等指令發現還是不太會,在即將放棄這個插件之際想到,如果有別的源說不定已經更新了,由此在emacs wiki上又找到了下面的配置

1 (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
2                          ("marmalade" . "http://marmalade-repo.org/packages/")
3                          ("melpa" . "http://melpa.milkbox.net/packages/")))

用上面這3行取代前面的2~3行代碼就可以了,其實意思就是將melpa這個源加入package的軟件源而已.

加入Melpa這個源以后,運行list-packages這個指令時會發現顯著變慢了,然后可以看到很多版本號都變成了日期,同時后面會有[github]等字樣,這是什么意思呢?上melpa這個網站可以看到,它的原理和marmalade是不同的,它基於版本控制系統自動生成package,就是說只要作者將代碼更新了commit以后,melpa就會更新,不需要再等作者打包放到marmalade上面,而且如果原作者早就忘了更新這個事的話還有其他人幫忙更新代碼,這樣顯然是更好的方式,sr-speedbar就是這樣做的.

所以當然立即將melpa加入->更新->搞定!

現在emacs依然有很多人在為其開發插件,可以說其文件編輯功能依然是領先的.只是有不少老的插件沒有為新版做更新,也需要整個社區的努力.

 

就寫這么多吧,一次寫太多下次都不知道寫啥了,我就一個初學者,下回就從頭寫寫最基礎的東西吧,如果你覺得翻manual和wiki看英語太難受的話不妨看下我的翻譯.下回更新又不知何年何月了.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM