【发布时间】:2013-02-24 13:33:44
【问题描述】:
这很奇怪。我在zsh中定义了如下提示:
local user_host='%{$terminfo[bold]$fg[green]%}%n @ %m%{$reset_color%}'
local current_dir='%{$terminfo[bold]$fg[blue]%} %~%{$reset_color%}'
local git_branch='$(git_prompt_info)%{$reset_color%}'
local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
PROMPT="╭─${user_host} %D{[%a, %b %d %I:%M:%S]} ${current_dir} ${git_branch}
╰─%B$%b "
RPS1="${return_code}"
它在 gnome-terminal 以及 Emacs 中的 ansi-term 终端上运行良好 (M-x ansi-term) - 请参见下面的示例:
但是,它在 Emacs 中的 multi-term 下效果不佳,如下所示:
我认为multi-term 能够解释与gnome-terminal 或ansi-term 等终端相同的转义字符集。为什么它不能正确解释git-prompt_info 和其他人返回的转义字符?
我也试过了:
-
M-x
set-terminal-coding-system并将其设置为utf-8-unix -
TERM=eterm-color在多端终端内,或者调用 Emacs 之前等。 -
TERM=在多端终端内,或者调用 Emacs 之前等。 - 从我的
.zshrc中删除任何export TERM
更新(2014 年 1 月 29 日):
到目前为止,最好的解决方案似乎是执行以下操作:
TERM=xterm-256color
但导致我在这里报告的另一个问题:Passing escape sequences to shells within ansi-term in Emacs。
【问题讨论】:
-
在此处查看答案,看看是否有效。 stackoverflow.com/questions/8918910/…
-
感谢@JesusRamos 这对
ansi-term非常有用!出于某种原因,这对于 Emacsmulti-term(应该扩展 ansi-term)是不够的......嗯 -
我停止使用多术语,而是自己使用
M-x rename-buffer。这样就可以了:) -
您可能需要检查两件事。 1.
TERM应该是 emacs 终端缓冲区中的eterm-color。 2.编码系统应设置为utf-8-unix。M-x set-terminal-coding-system。默认值可以在变量default-terminal-coding-system中设置 -
TERM=xterm-256color解决了我的问题。如果它弄坏了其他东西,我不会感到惊讶,但我不会去寻找它——我一直在这条路上,它以泪水告终。
标签: emacs terminal zsh ansi-term