iT邦幫忙

DAY 6
3

EMACS 新思維系列 第 6

[EMACS新思維 第九天] 在 Emacs 內運行 shell

Emacs 與 shell 的結合,可以大幅提升工作效率。當然,對於一些常見的命令列程式(如 git)有更方便的套件可以用,這是之後要介紹的。Emacs 內的 ansi-term 甚至強大到可以在裏面執行一個 vim XDD

前言:為了充份利用Emacs,我們要多了解其所提供的各式工具。最強大的一個點在於,他能夠提供非常好的終端模擬(而且是跨平台的、可以elisp互動的)。不需要在寫程式的時候在兩個畫面之間接換來切換去,也不必辛苦的去調整視窗大小,還要動用滑鼠才能剪貼。Emacs提供了最主要有三種同的模式。本文只是這三種模式一個快速的介紹。

所有與外部程式對接的部份, 都是透過一個基礎模式:comint-mode來達成。這個模式提供了許多低階的功能,如使用者輸入,歷史紀錄(history ring)。我們常見的M-x shell或M-x python-shell都是繼承自這個mode。

SHELL MODE (M-x shell)

這只是一個emacs對於你原本的shell的包裝(wrapper),不過要注意的是,所有的輸入輸出都會被重新導向到emacs(的buffer)中,有些交互式作用的程式(例:midnight commander)就不會順暢的運作。

TERMINAL EMULATOR(M-x term Or M-x ansi-term)

這個模擬器的特點在於,他能模擬VT100-style ANSI escape codes,就像rxvt或xterm一樣。大多數的交互式程式依然沒辦法執行的很好,不過top或ssh就執行的還不錯。以M-x term或M-x ansi-term(完整的ANSI支持)來呼叫他。他有兩種模式可以呼叫:line mode和char mode。

  1. Line mode:大多數的按鍵組合由emacs先行攔截,處理後才送出,所以表現的就像一個普通的buffer,只是多了互動性這樣。
  2. Char mode:大多數的按鍵組合直接送往該shell,而emacs不攔截。
  3. C-c C-j轉換為line mode,而C-c C-k轉換為char mode

THE EMACS SHELL(M-x eshell)

這是一個平行於zsh/bash等shell的一個emacs自帶shell。完全由elisp寫成,包含裏面主要的指令。它最大的好處在於可以於windows環境中,執行bash-like的指令而完全不需要考慮平台問題(emacs幫我們處理好了)。

命令列除了接受指令外,也能夠執行elisp,這表示可以透過elisp當作一種script語言來執行。多行輸出(例如:man、grep、locate等)會被導到新的buffer供慢慢檢閱,而原來的eshell則可繼續執行其他指令。(這也是我最喜歡的功能)

DIRECT EXECUTE (M-! command)
有時候我只是想到要執行某個小指令,如:移動、刪除或創建檔案或資料夾,那就沒必要開啟一個shell打指令,可以使用如下功能:M-!然後minibuffer處會跳出一個提示,問你要打什麼指令。而如果這個指令沒有顯示結果(如mkdir foo),他就只告訴你一切成功完成。如果是有輸出結果的指令,則會把結果輸出到*Shell Command Output*這個buffer中。你如果又輸入了新的結果,則此buffer會被清空,顯示新的輸出。


上一篇
[EMACS新思維 第八天] 談談 SMEX
下一篇
[EMACS新思惟 第十天] Comint-mode:自製自己的交互式介面
系列文
EMACS 新思維27

2 則留言

0
timloo
iT邦研究生 2 級 ‧ 2013-10-07 02:02:14

haroldwu提到:
Emacs 內的 ansi-term 甚至強大到可以在裏面執行一個 vim XDD

這個利害,

vim可以在裏面執行emacs嗎?

閣下的emacs操作,真讓人耳目一新!

應該是不行吧 = =a
其實只是要表達 ansi-term 幾乎是一個完整的 terminal 的意思 XD

我要留言

立即登入留言