vim和sublime text等編輯器,本質上是一個編輯器。
比如我們看看vim的幫助,是這個風格的,比如我要看i指令的幫助:
再看看emacs的幫助,是這樣的風格,比如我們看ctrl-n鍵的幫助:
更進一步,我們可以點選simple.el進去看看,可以看到它的源碼:
從上面可以看到,比起vim是個相對黑盒,需要文檔描述的編輯器,emacs是個比較簡單直接的家夥。簡單到,基本上就是一堆函數的組合而己,我們做編輯時,就是直接調用這些函數。為了友善,我們把這些函數綁定到快捷鍵上。
隻要知道要調用哪個函數,不想記任何快捷鍵的話,隻需要記住一個就可以了,就是alt+x,然後就可以輸入要執行的函數名,去執行這個指令。
emacs的功能,都是由lisp或c語言實作的函數來實作的,所有的源碼都是開放的,在新的版本中,直接都可以通過幫助功能來檢視,非常友善。
在emacs裡,alt鍵的指令也都可以通過先按esc再按另一個鍵的方式來實作。
emacs是第一個著名的以可擴充能力而聞名的編輯器,同時期的主流編輯器在這方面都要向emacs學習。到了現在,sublime text和vim等編輯器的擴充功能也是非常值得稱道而且受歡迎的。
但是,不管是vim還是sublime text,甚至更強大一些的visual studio code和atom,它們的做法都是把擴充的接口開放出來,大家按照開放出來的接口來寫擴充。
比如我們先看vim,以我在mac os下的vim 8.0.600為例,它支援下列feature:
帶加号的是我裝的vim支援的功能,減号為不支援。從中可以看到,我用的這個版本的vim支援:python,ruby,perl三種語言,而不支援python3,tcl和lua語言來寫擴充。
比如我們看一個vim擴充的官方例子:
在vimscript中,通過exe指令可以執行vim本身的指令。
反正是調用api接口麼,那麼可以支援很多語言了。
比如可以通過:pe perl腳本的方式,直接執行perl語句。可以通過:help :perl檢視:
perl語言寫vim插件例:
常用的perl可調用接口有:
類似的,:py可以調用python語言,:rub可以使用ruby語言.
使用python的例子:
python調用vim指令的例子:
調用python檔案,可以通過:pyfile或:pyf指令調用。
ruby語言寫vim插件的例子:
ruby調用vim接口的示例:
再來一個lua語言的:
tcl語言的:
atom的擴充的主力語言是coffeescript。
visual studio code的插件可以用javascript或者typescript來開發。
下面是個空的typescript的例子:
sublime text的擴充是用python寫的,舉個處理回車換行的例子:
emacs與以上的編輯器的最大不同的就是,無所謂擴充了,哪塊看不順眼就直接改了就是了。反正大部分都是綁定到快捷鍵上的函數而己。
比如,學習emacs的教程中,最開始講的函數就是find-file,它的作用是打開檔案,綁定在c-x c-f鍵上。水木社群官方qq群進群問題就是問c-x c-f的作用是什麼。
emacs的好處是沒有秘密,我們直接看源碼,看看它是做啥的:
這麼基礎的指令,在其它編輯器中,一般沒人改吧。但是在spacemacs中,c-x c-f就預設綁定ido-find-file函數上了。
ido是emacs的一個插件,意思是『interactive do』,在互動式操作方式上對基礎的emacs功能上有所增強。
即使在相對古老的emacs 23.x版本上,ido插件也是官方釋出版本中的一部分。隻不過官方版本上的鍵綁定還是綁到基礎指令上。我們可以選擇綁一個鍵給它,也可以通過alt-x來運作它。
後面學習emacs的功能的時候,我們都會講,标準emacs是如何做的,spacemancs是如何做的。大家可以看到,有很多标準emacs綁定的快捷鍵,在spacemacs上根本就不靈了,被綁定到别的功能上了。
是以,與其記快捷鍵,不如記函數名吧。也不用太精确,輸的時候能找到就行。查幫助時會提升它綁到哪個鍵上,或者記不住就自己綁一個喜歡的也可以。
個人覺得,emacs的文檔确實不如vim的文檔寫得好。但是,emacs的文檔也仍然是非常豐富的,實在查不到,咱還可以直接看代碼。
既然我們已經了解到emacs就是一堆函數的組合,那麼提供幫助功能,肯定也是調用相應的函數了。沒錯,正是這樣!
如果想完整地閱讀手冊,可以調用info函數,預設綁定在c-h i組合上。

如果看到手冊或者書上有講一個快捷鍵是做什麼的,我們可以查找它所對應的函數。查找一個按鍵的定義:c-h k (describe-key):比如我們就可以查查c-h k對應的功能:
從幫助中我們可以看到,快捷鍵綁到c-h k,而實際調用的函數是describe-key.
同樣,我們還可以通過c-h f (describe-function)來查詢一個函數的功能。
另外,還有查詢變量的describe-variable函數,綁定到c-h v鍵上。
emacs的基本用法,就是調用一些函數而己。這些函數可以通過alt-x加上函數名去調用。
常用函數可以綁定到一些快捷鍵上。很多emacs入門教程講的就是這些功能的用法
info用于在emacs中檢視手冊, describe-funciton查找函數用法,對于lisp函數經常可以直達源碼。describe-key查找鍵值綁定。它們預設的綁定是c-h i, c-h f和c-h k。在以後的emacs歲月裡,您會經常用到它們的