在Emacs中使用zsh时输出垃圾字符

6
无论我使用term还是ansi-term在Emacs中启动zsh,都会遇到这个问题,每当我输入命令时,输出中都会有一些垃圾字符,例如:
[ruby-1.9.2] ~ pwd
2;pwd1;pwd/Users/tyraeltong

2;pwd1;pwd 搞砸了输出,不知道其他人是否遇到同样的问题?我在这里找到了一个类似的主题 Getting Emacs ansi-term and Zsh to play nicely 但通过使用 [[ $TERM == eterm-color ]] && export TERM=xterm 我仍然看到垃圾字符。


这是一个由你的.zshrc中的某些内容直接或间接引起的问题。可能是一个糟糕的提示符设置,或者是对运行终端做出不必要假设的设置。请发布你的.zshrc文件。 - Gilles 'SO- stop being evil'
2
实际上我没有在我的.zshrc文件中进行任何自定义设置,而是直接使用了.oh-my-zsh:https://github.com/robbyrussell/oh-my-zsh - Tyrael Tong
3个回答

6

Emacs与ZLE不兼容,因此我在我的~/.zshrc文件中添加了以下内容:

if [[ -n ${INSIDE_EMACS} ]]; then
    # This shell runs inside an Emacs *shell*/*term* buffer.
    prompt walters
    unsetopt zle
fi

谢谢回复,但是使用这个设置后,我仍然看到了额外的位,例如:2;LS -G -lhF1;lstotal 72 - Tyrael Tong
嗯,INSIDE_EMACS设置了吗?例如,在emacs中执行M-x shell,然后在其中执行echo $INSIDE_EMACS。它应该输出类似于“24.0.97.1,comint”的内容。如果没有设置,那么这个变量就没有被emacs设置(也许是因为你的emacs太旧了?!)。在这种情况下,您可以将测试更改为[[ ${TERM} == "dumb" ]],这也应该可以工作。 - Tassilo Horn
啊,你可能需要在你的~/.emacs文件中加入以下内容:(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on) - Tassilo Horn
嗯,echo $INSIDE_EMACS 会输出类似于 "]2;echo 24.0.92.1,comint]1;echo24.0.92.1,comint" 的内容。我还在 .emacs 文件中添加了 (add-hook),但仍然看到额外的位... 顺便问一下,你是用 "term" 还是 "shell" 在 Emacs 下使用 zsh? - Tyrael Tong
我使用 M-x shell,上面的 add-hook 只适用于它。在执行 M-x shell 后,ls --color 应该以彩色列出文件。如果仍然得到原始的颜色转义序列,则可能存在问题。 - Tassilo Horn

3

找到了解决方案,在之前提到的相关帖子中 (链接)

简而言之,在emacs中使用M-x package-install,安装multi-term。M-x multi-term 启动一个shell,拥有oh-my-zsh所提供的所有功能。


0

这可能是一个带有bash语法的错误PROMPT_COMMAND。请尝试:

export PROMPT_COMMAND=""

看看那是否有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接