GUI 版的 Emacs 好看是好看,但啟動時間比在終端機裡遲緩、GTK3 也比較吃資源。而且 KDE 的工具列總是得多一個 Emacs 佔空間,加上自己算是中重度的終端機使用者,操作時希望能不離開終端機不碰滑鼠是最好。所以我自己是用終端機版的 Emacs (啟動方式為emacs -nw
) 搭配 tmux 使用。但還有不少問題要折騰,以下有一些建議設定可以參考:
256 Colors
最不重要的先講(不過至少對我來說這個設定很重要):讓 Tmux 裡的 Emacs 能夠有 256-color output。一當然是因為好看,二是某些功能、例如寫 CSS 必備的 rainbow-mode
需要至少 256 色才能用。
把 TERM
指定成 xterm-256color
。以 Konsole 為例:Edit Current Profile > General > Environment > Edit
後,改成下面這行:
1 | TERM=xterm-256color |
~/.tmux.conf
也需要做好對應設定(~/
裡沒有這個檔案請自行新增),加上:
1 | set -g default-terminal "screen-256color" |
沒意外的化應該已經可以在 Tmux + Emacs 裡顯示 256 色了,可以 M-x list-colors-display
測試一下。
不過在 256color 下,有很多有名的 theme 像是 Solarized 那種 low-contrast 的配色是很難看的(因為很多該顯示的顏色在 256color 下只能顯示近似值,結果有些顏色實際顯示出來根本就一樣…)。如果煩惱不知 256 色下有什麼 theme 能用的話,可以參考一下不才在下做的 moe-theme
,專為 256 色終端機設計 XD。
只有 256-color 一樣可以使用
rainbow-mode
,雖然顏色不準確,但在程式碼中還是會變得非常好辨認,起碼不會讓你覺得那堆色碼是 magic number。
Alias
修改~/.zshrc
或~/.bashrc
,加上兩個 alias:
1 | alias emacs='emacs -nw' |
第一行作用是以後只要輸入 emacs
就能開啟 CLI(文字界面)版本的 Emacs。
第二行的作用是「一開終端機只要輸入 ta
就能開 tmux,而且當已經有 session 存在的話直接 attach 進去」,會這樣做是因為如果只是平常使用,通常應該不會在 Tmux 裡開到一個以上的 session(至少我從沒有這種需要…),而且每次 detach 掉還要打一長串 tmux attach-session -t [number]
掛回來很麻煩。
Tmux Key-binding
(如果您已經自訂過 tmux,可以跳過這一段)
編輯~/.tmux.conf
,不存在請自行建立。
1 | unbind C-b |
因為 Tmux 預設的 prefix (C-b
)會跟 Emacs 相衝,最後找來找去發現大概只有 M-C-b
這個 binding 比較沒有相衝問題,而且在其他主機上用 Tmux 也不會太難以習慣。
然後 kill-window 我改成 prefix + k
,比較符合 Emacs 在 kill buffer (C-x k
) 時的使用習慣。
Emacs Key-binding
編輯.emacs,加入
1 | ;;解決 tmux 下無法切換 buffer 以及一些 key-binding 的問題 |
如此問題會少一點(苦笑)
Clipboard
去 Emacs Wiki 下載 xclip-mode,丟到~/.emacs.d/lisps/
裡後,~/.emacs
加上:
1 | ;; xclip-mode |
可以解決 X11 與 Emacs 剪貼簿共用的問題。
不過貼上的速度變得有點遲緩,如果不用C-y
而用滑鼠中間鍵貼上的話會超級遲緩。這我也不知該怎麼辦。如您知道解法請不吝賜教。
失效的 Key-binding
換到文字界面的 Emacs 後,會發現有部份原本可以使用的 key-binding 突然變得不能用了,尤其是最複雜的 Org-mode(例如 Shift+[Arrow]
、Ctrl+[0-9]
),因為這些按鍵終端機是抓不到的。
Org-mode
Org-mode 在設計時有考慮到這問題,所以有作了一些在終端機裡也能用的替代按鍵,可以參考 TTY-Keys。
Super Key
Super
鍵(就是常說的Win
鍵)是在 X11 裡定義的,除非經過一些特殊設定,不然 tty 或 terminal 都無法辨識這個鍵,我自己是沒去折騰這個,因為太麻煩。如果你堅持要用,詳情可以查一下 StackOverflow,有人問過。
其他
遇到其他之前在 GUI 版可以使用、但終端機抓不到的 key-binding 時,基本上你有幾種選擇:
- 開 GUI 版,
C-h k
查詢你平常按的那個 key-binding 是綁到哪個 function,再自己自訂一個 CLI 版下能用的 key-binding。C-h f
直接查那個 function 是否本來就還有其他按法。- 土法煉鋼
M-x
Undo/Redo
這一定要特別提出來講:改用 CLI 版的 Emacs 我最無法接受的就是 undo-tree
的 redo 竟然沒辦法按 C-?
,因為 terminal 抓不到 Ctrl-Shift-
開頭的按鍵。雖然 undo-tree
提供的幾個替代按法中M-_
是可用的,但 undo 按 C-/
、redo 按 M-_
實在有點讓人精神錯亂…
其實也是可以自己改成其他 key-binding,但這種很常用的東西我是盡量不改,最重要的原因是
- 在不得已的情況下,沒有慣用的~/.emacs 也不會感到有太大不便。
- Un*x 界很多地方都是可以用 Emacs-style 的 key-binding 的,例如 Bash/Zsh, less,習慣標準的 key-binding 有利無弊。(Emacs 使用者操作 Bash/Zsh 基本上跟操作 Emacs 的感覺幾乎一樣,例如我發現最扯的是竟然可以在 Bash/Zsh 裡用 kill-ring…)
所以我最後想辦法習慣了 undo 按 C-_
,redo 按 M-_
這種機車的 key-binding…(一位 Vim 使用者誠摯地表示:「怎麼這麼麻煩」)
認命吧~當你決定學 Emacs 的那天開始,就別指望你面臨的是條正常典型又合理的學習曲線 XD
改用 CLI 版的 Emacs 搭配 tmux 是有好處,但說實話真的很麻煩。不過如果你是終端機重度使用者,或者有連工作站的需求,還是得折騰一下 XD
要不…就是盡早跳到 Vim…