让Emacs ansi-term和Zsh发挥得很好

时间:2008-12-15 04:01:59

标签: shell emacs zsh

我一直在尝试在我的emacs会话中使用Zsh,而没有emacs重新映射所有Zsh密钥。我发现ansi-term对此很好,但是,我仍然有一些问题。我输出了很多垃圾字符,我能用以下方法修复它:

## Setup proper term information for emacs ansi-term mode
[[ $TERM == eterm-color ]] && export TERM=xterm

但是一切仍然不能完美。现在我无法在屏幕外绘制输出,特别是在使用C-r等搜索时。

我发现如果不调整窗口大小,它可以正常工作。我可以重现它:

  1. 启动一个干净的emacs -q
  2. 开始ansi-term并使用zsh
  3. 使窗口全屏显示
  4. 输出填满屏幕的内容
  5. 输入 C-r
  6. 提示将不在屏幕上
  7. 也许有一些方法可以让输出和迷你缓冲区之间的空间更大,以弥补过冲?

    其他人的Zsh + Ansi术语是否正常工作?

4 个答案:

答案 0 :(得分:13)

尝试MultiTerm

它是唯一一款似乎与zsh配合使用的Emacs终端模式。它允许您轻松设置要由emacs捕获的命令以及您希望路由到终端的命令。到目前为止,默认设置对我来说已经足够了。

此外,将以下内容添加到.zshrc中,以允许emacs在您浏览时跟踪当前目录。

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

答案 1 :(得分:3)

嗯。虽然我在20年内没有尝试过,但我认为我从未见过任何花哨的编辑工作。我会顺便问一下,如果你尝试过shell模式(M-x shell),那么无论如何它都会更加自然。

也就是说,通过term.el文件阅读,它看起来像ansi-term正在做很多自己的事情。您可能希望查看原始模式代码一词,从第1230行开始,至少在EMACS 22.3中。

答案 2 :(得分:1)

我现在也在寻找这个问题很长一段时间了。我在

中添加了以下内容
;; ansi-term

(global-set-key "\C-x\C-a" '(lambda ()(interactive)(ansi-term "/bin/zsh")))
(global-set-key "\C-x\ a" '(lambda ()(interactive)(ansi-term "/bin/zsh")))

的工作原理。我选择了这个 http://svn.assembla.com/svn/id774/scripts/dot_files/dot_emacs.d/elisp/global-set-key.el

我确信该脚本还有其他好东西。作为一个额外的奖金屏幕似乎与emacs很好地适合我。

答案 3 :(得分:0)

我明白了。这是一个emacs配置问题。我的.emacs中的这个elisp引起了它:

(custom-set-variables
 '(fringe-mode nil nil (fringe))
 '(fringes-outside-margins t t))

感谢您的帮助。