emacs 使用multi-term

emacs里的multi-term相當(dāng)于mac下的iterm,是emacs下非常好用的terminal。

載入multi-term.el文件

emacs使用multi-term作為terminal,首先要將multi-term.el文件放到你emacs的load-path里。

配置

;; ------------------------------------------------------------
;; set multi-term
;; ------------------------------------------------------------
(require 'multi-term)
(setq multi-term-program "/bin/zsh")
;; Use Emacs terminfo, not system terminfo, mac系統(tǒng)出現(xiàn)了4m
(setq system-uses-terminfo nil)

下面是幾點需要注意的點:

  1. 我用的是zsh,如果你使用的是bash, 將"/bin/zsh"換成你的"/bin/bash"
  2. 如果你使用的是mac系統(tǒng),發(fā)現(xiàn)multi-term每行出出了4m,在shell里運行下:
tic -o ~/.terminfo /Applications/Emacs.app/Contents/Resources/etc/e/eterm-color.ti
  1. zsh在mac下可能會出現(xiàn)中文顯示為????的情況,這時候創(chuàng)建一個文件:~/.zshenv,其內(nèi)容如下:
export LANG='en_US.UTF-8'
export LC_ALL="en_US.UTF-8"

快捷鍵

打開multi-term的命令是multi-term,你可能發(fā)現(xiàn)在multi-term模式下會出現(xiàn)與自己的快捷鍵沖突的地方。如果想保留自己在其他mode下的快捷鍵,將快捷鍵添加到 term-bind-key-alist這個列表中,例如我想把"C-j"保留我其他mode一樣,如下:

(add-to-list 'term-bind-key-alist '("C-j"))

解決幾個煩人的問題

1. 我開始設(shè)置的是zsh,我發(fā)現(xiàn),當(dāng)我用$cd$命令改變工作目錄的時候,emacs里的default-directory這個變量沒有改變,使得C-x C-f調(diào)用打開文件時目錄不是當(dāng)前工作目錄?
解決方法將下列代碼放到zsh的配置文件 $~.zshrc$里,使得emacs能跟蹤路徑的改變,參考1,參考2

if [ -n "$INSIDE_EMACS" ]; then
    chpwd() { print -P "\033AnSiTc %d" }
    print -P "\033AnSiTu %n"
    print -P "\033AnSiTc %d"
fi

2. 我希望當(dāng)光標(biāo)沒處于最后一行時,"C-a"的作用是將光標(biāo)移動到行首,當(dāng)光標(biāo)處于最后一行時,我希望"C-a"的作用是將光標(biāo)移動到這行命令的開始處。解決方法:將下列 ab/move-beginning-of-line 綁定到快捷鍵"C-a"即可。

;; 當(dāng)處于最后一行時 "C-a" 將光標(biāo)移動到 terminal開始處而不是這個行的頭
(defun ab/is-at-end-line () 
   "判斷是否在最后一行"
   (equal (line-number-at-pos) (count-lines (point-min)  (point-max))))
(defun ab/is-term-mode () 
   "判斷是否為 term 模式"
    (string= major-mode "term-mode"))
(defun ab/move-beginning-of-line () 
   "move begin" 
   (interactive) 
   (if (not (ab/is-term-mode)) 
              (beginning-of-line)
         (if (not (ab/is-at-end-line)) 
                    (beginning-of-line) 
                (term-send-raw))))

3. 有個煩人的問題,你發(fā)現(xiàn)使用了"C-b" (backword-char 函數(shù)),你想在命令的中間插入新的字符,每次都插入到了這行的最后。解決方法:將下列ab/backword-char函數(shù)綁定到"C-b"

;; 只后當(dāng)是term-mode并且是最后一行時才采用 (term-send-left)
(defun ab/backword-char () 
   "Custom " 
    (interactive) 
    (if (not (ab/is-term-mode)) 
               (backward-char) 
          (progn (if (not (ab/is-at-end-line))
                          (backward-char)
                        (progn (term-send-left)
                                   (message "term-send-left"))))))

4.修改快捷鍵的map,如果你發(fā)你定義自己的快捷鍵與該major-mode的沖突,可以直接修改它的key-map

(define-key term-raw-map (kbd "M-n") 'ace-jump-mode)

更多見,我的multi-term配置
最近我自己對multi-term做了一些改進,見項目:
https://github.com/aborn/multi-term-plus

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容