17

我一直在尝试在我的 emacs 会话中使用 Zsh,而没有 emacs 重新映射所有 Zsh 键。我发现 ansi-term 对此非常有效,但是我仍然遇到一些问题。我输出了很多垃圾字符,我可以通过以下方式修复它:

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

但一切仍然无法完美运行。现在我在将输出绘制到屏幕外时遇到问题,尤其是在使用 Cr 之类的东西进行搜索时。

我发现如果您不调整窗口大小,它可以正常工作。我可以像这样复制它:

  1. 启动一个干净的emacs -q
  2. 启动ansi-term和使用zsh
  3. 使窗口全屏
  4. 输出填满屏幕的东西
  5. 类型C-r
  6. 提示将离开屏幕

也许有某种方法可以使输出和迷你缓冲区之间的空间更大以补偿过冲?

其他人有 Zsh + Ansi-term 正常工作吗?

4

4 回答 4

16

试试MultiTerm

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

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

if [ -n "$INSIDE_EMACS" ]; then
  chpwd() { print -P "\033AnSiTc %d" }
  print -P "\033AnSiTu %n"
  print -P "\033AnSiTc %d"
fi
于 2012-04-06T22:46:52.417 回答
3

嗯。我不认为我曾在 ansi-term 中看到过任何花哨的编辑工作,尽管我可能已经有 20 年没有尝试过了。顺便问一下,如果您尝试过 shell 模式(Mx shell),因为无论如何使用 EMACS 更自然。

也就是说,通读 term.el 文件,看起来 ansi-term 自己做了很多管理工作。您可能想查看术语原始模式代码,从第 1230 行开始,至少在 EMACS 22.3 中。

于 2008-12-15T04:13:40.627 回答
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 配合得很好。

于 2010-05-21T01:42:17.067 回答
0

我想到了。这是一个emacs配置问题。我的 .emacs 中的这一点 elisp 导致了它:

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

谢谢您的帮助。

于 2008-12-15T22:36:35.753 回答