【感謝 iamxuxiao 的熱心翻譯。如果其他朋友也有不錯的原創或譯文,可以嘗試提交到伯樂線上。】
我最近一直在使用Multi-Term,用來替代iTerm2。Multi-Term非常好用,但是它的預設設定有一些小問題,會讓使用者一開始就遇到後決定放棄的可能。這篇博文提供這些小問題的解決方法。
我在youtube上放了在emacs中使用一段multi-term的視訊。
為什麼要選擇Multi-term
因為emacs的自帶的term.el只提供了一個簡單的建立terminal buffer的函式,但是沒有提供建立多個terminal buffer,以及在各個buffer之間切換的功能。
term.el中內建的key binding和許多常見的emacs keybinding衝突,所有在emacs中直接使用term.el會帶來一些小麻煩。
Multi-term的安裝
請參見:http://www.emacswiki.org/emacs/MultiTerm
Multi-term的shell的設定
通過設定multi-term-program變數,我們可以指定新建的terminal使用何種shell, 比如:
1 |
(setq multi-term-program "/bin/zsh") |
Multi-term的顏色設定
另一個常見的問題是:如何給terminal設定顏色。我們可以通過term-default-bg-color和term-default-fg-color來定製背景和字型的顏色,比如:
1 2 3 4 5 |
(custom-set-variables '(term-default-bg-color "#000000") ;; background color (black) '(term-default-fg-color "#dddd00")) ;; foreground color (yellow) |
在開啟的各個terminal buffer之間進行自動的切換
Multi-term每次開啟一個新的buffer都是自動用數字來命名,當你後臺開啟的很多buffer的之後,記住這些buffer的編號並且切換是一件麻煩的事情,我把muti-term提供的在這些terminal buffer之間切換的功能繫結在了M-[和M-]鍵上。
1 2 3 4 |
(add-hook 'term-mode-hook (lambda () (add-to-list 'term-bind-key-alist '("M-[" . multi-term-prev)) (add-to-list 'term-bind-key-alist '("M-]" . multi-term-next)))) |
Buffer的長度
Multi-shell預設的buffer的長度是2048行,這就是說buffer中只存放2048行的顯示。你可以通過設定term-buffer-maximum-size成0把buffer長度改成沒有上限。
1 2 3 |
(add-hook 'term-mode-hook (lambda () (setq term-buffer-maximum-size 0))) |
Term的hook
我通過如下的函式,在multi-term的buffer中關掉一些minor mode。
1 2 3 4 5 6 7 |
(add-hook 'term-mode-hook (lambda () (setq show-trailing-whitespace nil) (autopair-mode -1))) |
Paste功能
如果你在terminal裡面發現paste不工作的話,解決方案就是加一個hook。
1 2 3 4 5 |
(add-hook 'term-mode-hook (lambda () (define-key term-raw-map (kbd "C-y") 'term-paste))) |