閱讀322 返回首頁    go 技術社區[雲棲]


我也說說Emacs吧(1) - Emacs和Vi我們都學

好友幻神的《Emacs之魂》正在火熱連載中,群裏人起哄要給他捧捧場。
作為一個學習Emacs屢敗屢戰的用戶,這個場還是值得捧一下的。至少我是買了HHKB鍵盤的。。。

從我的鍵盤說起 - 有模式和無模式

下麵是我的HHKB鍵盤的局部圖:
hhkb

與其他常規的鍵盤不同,我的鍵盤的Control鍵的位置,是常規布局的大小寫鎖定鍵的位置。為什麼這麼布局呢?

我們看看幻神在emacs人界用法中所介紹的emacs最常的快捷鍵吧:

C-f 後一個字符
C-b 前一個字符
C-p 上一行
C-n 下一行
M-f 後一個單詞
M-b 前一個單詞
C-a 行首
C-e 行尾
C-v 向下翻一頁
M-v 向上翻一頁
M-< 到文件開頭
M-> 到文件末尾

C-x C-f "find"文件, 即在緩衝區打開/新建一個文件
C-x C-s 保存文件
C-x C-w 使用其他文件名另存為文件
C-x C-v 關閉當前緩衝區文件並打開新文件
C-x i 在當前光標處插入文件
C-x b 新建/切換緩衝區
C-x C-b 顯示緩衝區列表
C-x k 關閉當前緩衝區
C-z 掛起emacs
C-x C-c 關閉emacs

其中,C表示Ctrl鍵,M表示Alt鍵,C-f表示按住Ctrl然後按f,
C-x C-s表示先按Ctrl+x,再按Ctrl+s,
C-x b表示先按Ctrl+x,再按b。

Ctrl鍵之常用,可見一斑。
這就引出一個著名的段子:因為emacs中大量使用Ctrl鍵,而普通鍵盤的Ctrl鍵位於小指管但是比較費力的鍵位下,emacs會導致左手小指容易損傷的段子層出不窮。為了提高效率,改鍵盤布局是最常用的辦法之一。不信您試試,按Caps lock是不是比按Ctrl要容易,手指稍微移動一下就可以了。
另外,emacs對於Alt或者Esc的需求也不少,這兩個鍵也是小指的管轄範圍。

有模式和無模式

為什麼emacs會如此大量地使用Ctrl和Alt組合鍵呢?原因很簡單,emacs是個無模式的編輯器。相對而言,vi是個有模式的編輯器,分為命令模式和編輯模式。在命令模式下,j是向下移一行,k是向上移一行,h是左移,l是右移,手在基本鍵位上不動就可以快速移動。
由於命令模式下,大部分鍵都被當成命令了,輸入這些鍵代表的字符怎麼辦?這就需要通過i命令,o命令等切換到編輯模式,在編輯模式下,可以正常輸入字符。但是,在編輯模式下,大部分命令又沒法使用了。使用命令的時候,還需要輸入Esc來切回命令模式。

於是,emacs和vi的宗教戰爭,在有模式和無模式這一戰場打了幾十年。

emacs lisp和vimscript

做為編輯器聖戰的雙雄,除了基本功能之外,emacs和vim都有自己的擴展語言:emacs是emacs lisp,而vim是vimscript.
這兩門都是不那麼現代的語言。emacs lisp沒有common lisp那麼強大複雜,但是愛好者如雲,至今不斷有新的粉絲加入進來。而vimscript的愛好者幾乎沒有,有用perl寫vim擴展的,也有用python寫vim擴展的。。。

在宗教戰爭的兩個分戰場中,lisp占優勢,emacs的平台有優勢。而在模式之爭上,vi的快捷鍵的優勢使得它的用戶數相對更多一些。

evil - emacs上模擬vi的模式

那麼,emacs和vim真的是一直水火不融地宗教戰爭下去嗎?對於emacs用戶來講,從來不是這樣。emacs用戶以emacs的可擴展性為武器,開發出了模擬vi模式方案的插件, evil就是其中最流行的一種。
vi用戶還有一種有效的輸出方式,就是采用leader鍵,把命令用leader鍵組合起來。

spacemacs

emacs的插件很多,配置起來也複雜,所以學習使用emacs最好的方式就是借鑒高手已經配好的配置方案。目前,比較流行的方案就是spacemacs.
spacemacs默認使用evil來模擬vi的模式,並且以空格space鍵作為leader key。

下麵是spacemacs的界麵抓圖:
spacemacs

在默認模式下,輸入空格鍵,就會彈出下一個鍵代表的命令,例:空格,然後f,顯示的界麵如下:

spacemacs f

spacemacs的安裝非常簡單,隻有一條命令:

git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

至此,我們的emacs學習之旅正式開始。我們既學emacs,也學習vi的模式和leader key。同時,我們使用spacemacs,已經為我們默認配好了很多強大的插件,比普通版本要方便。

唯一不足的是,我們學的知識可能比幻神講得人界方式更多一些,畢竟vi就是學習曲線比較陡的編輯器。但是,隻要堅持下來,您會覺得值得的!

最後更新:2017-05-22 20:31:14

  上一篇:go  一場變美盛宴後麵的大數據故事
  下一篇:go  Java基本數據類型包裝類