在Emacs中使用多个shell buffer
工作中非常依赖GNU Emacs和Terminal,总在两个程序之间来回切换,不舒坦,虽然我已经把Emacs和Term指定在不同的虚拟桌面。
不爽之,遂改之,我想在Emacs里面舒服的使用shell。
为什么?
引用:
这个问题,我个人认为不是一个技术问题,而是一个生活舒适度的问题。之所以选择在 Emacs 里面使用 Shell,就是因为在 Emacs 里面会使你的生活的更加舒适。
我的需求:
- 在Emacs方便地创建,切换,关闭多个shell buffer。
- 对已有的终端程序具备良好的兼容性。
首先,其实Emacs里面就集成多种shell工具:
1. M-x shell-command
2. shell-mode
3. eshell
4. ansi-term
shell-command并非交互式的term;shell-mode默认并不支持多个shell buffer,虽然通过multi-shell.el和其他扩展形式可以解决此问题,但shell-mode的兼容性并不理想;eshell是使用Elisp实现的完整的shell,在进行某些操作时的性能也许是个问题。
ansi-term是用Elisp实现的Term Emulator,兼容性不用担心,通过ansi-term在Emacs里面运行vi和字符界面的emacs都没问题,但是,其默认的操作方式并不方便。
MutliTerm扩展可以很好的解决此问题。
首先下载MutliTerm并放在你的Emacs扩展目录,在.emacs中加入
;;; multi-term (load-file (expand-file-name "/usr/share/emacs/site-lisp/multi-term.el")) (require 'multi-term)
还有我的个人设置:
;; personal setting (setq multi-term-program "/bin/bash") (setq multi-term-buffer-name "term") (global-set-key "\C-x." 'multi-term) (global-set-key "\C-x," 'multi-term-dedicated-open)
重启Emacs,执行M-x multi-term即可。(我的Emacs还启动了tabbar-mode)
(在Emacs中运行VIM,just for fun :P)
MultiTerm可以用两种方式来使用shell:
1. M-x multi-term,打开多个常规的buffer,新buffer会占满当前的window:
2. M-x multi-term-dedicated-open,MultiTerm会在下方分割出一个小的dedicated window并新建一个buffer,专门用于term的使用。当输入exit,或kill掉term buffer,dedicated window会自动关闭,焦点自动回到原来的工作buffer。类似于RememberMode的方式,非常方便。
也有一个小不爽:使用multi-term-dedicated-open时,dedicated window打开后,焦点默认还会留在原来的buffer,但我希望快速的使用term,所以最好是能自动跳到dedicated window上。这个没有customize选项,所以只能改multi-term.el中的multi-term-dedicated-open()方法:
@@ -397,7 +397,10 @@ (multi-term-internal)) (set-window-buffer multi-term-dedicated-window (get-buffer (multi-term-dedicated-get-buffer-name))) (set-window-dedicated-p multi-term-dedicated-window t) - (select-window current-window)) + ;;(select-window current-window) + (select-window multi-term-dedicated-window) + ) + (select-window multi-term-dedicated-window) (message "`multi-term' dedicated window has exist.")))
非常感谢作者Andy Stewart,在新版本multi-term.el 0.8.8中已经加入了相应的customization选项,在.emacs文件里加入
(setq multi-term-dedicated-select-after-open-p t)
即可。
MultiTerm配和TabbarMode使用非常舒服,现在就齐了!
感谢作者Andy Stewart的great work!
;; Author: Andy Stewart, lazycat.manatee{at}gmail.com
;; Maintainer: Andy Stewart, lazycat.manatee{at}gmail.com
;; Copyright (C) 2008, 2009, Andy Stewart, all rights reserved.
4 Comments