一、shell mode 介绍

下面介绍另外一种使用方式—— Shell mode。这种方式和大家常用的工作方式最大的一个区别,就是在这里完全没有任何 terminal 的存在。

用户实际上是工作在一个 Emacs 的文本缓冲区里面,并不直接和 Shell 进行交互。一切的命令输入都是写入到这个文本缓冲区当中,

经由 comint.el从缓冲区中读取,然后转交给后台的 Shell 进程。Shell 产生的输出再由 comint.el进行收集,然后写入到

用户所用的这个缓冲区当中来。这个缓冲区在 Emacs 当中叫做 Shell 缓冲区 (Shell buffer)。

二、启动

在 Emacs 当中按下 Meta-x 组合键(或者 Alt-x 组合键),然后输入shell 并回车

Emacs 就会启动一个 Shell 进程并且打开一个与之关联的 Shell 缓冲区。

Shell 缓冲区 的名字通常会是 *shell*。具体启动什么样的 Shell 进程 通过 Emacs

配置文件里的 shell-file-name 变量指定,或者由用户的环境变量 SHELLEMACSSHEL

来指定。通常的写法是

<span > (setq shell-file-name "/bin/bash") 
</span>

或者

<span > export EMACSSHELL=/usr/bin/zsh </span>

另外如果你希望使用一个支持 ANSI color 的 Shell 进程,那么在你的 Emacs 配置

文件里面加入下面两行,以便在执行 ls – color=auto 命令的时候输出的色彩信息

能够被 Emacs 正确解析。

<span > (autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t) 
 (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on t)</span> 

三、退出


按下Meta-x 组合键(或者 Alt-x 组合键),然后输入exit 并回车

可以看到上面列出了几个选项,选择 exit-splash-screen 即可退出。

当用户退出 Shell 会话之后,Emacs 并不会删除这个 Shell buffer,而是把它留在那里,等待用户的进一步的处理。

<span > dove@bash-4.1$exit 
 exit 

 Process shell finished </span>

如果用户这个时候再次执行 M-x shell命令,Emacs 会再次复用这个 buffer。

<span > dove@bash-4.1$ 
 dove@bash-4.1$exit 
 exit 

 Process shell finished 

 dove@bash-4.1$ 
</span>