5

当我使用 SSH 从 emacs 中的 ansi-term 会话登录到 Ubuntu 12.04 机器时,提示显示不正确:

0;ubuntu@jumplin: ~ubuntu@jumplin:~$

这应该如下所示:

ubuntu@jumplin:~$

我已经尝试了一些与 utf-8 和颜色支持有关的建议,但是它们似乎不起作用(颜色目前在 ansi-term 中可以正常工作):

emacs中ansi-term中的奇怪字符

我认为这可能与不受支持的 ansi 转义码或类似的东西有关,但我不太确定 - 此终端会话的 PS1 值是:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

任何建议将不胜感激:) 当终端会话中出现奇怪的字符时,我似乎总是有点迷茫。

4

3 回答 3

4

\[\e]0;\u@\h: \w\a\]在您的提示中是配置您的 xterm(?) 的标题栏。尽管 ANSI 着色支持ansi-term,但不支持操纵标题栏的转义序列。这就是为什么您看到提示重复两次的原因 - 第一部分应该转到标题栏。

所以要么从你的 PS1 中删除第一个序列,要么做一些类似于Bash Prompt HOWTO中建议的事情:

function proml
{
case $TERM in
    xterm*)
        local TITLEBAR='\[\033]0;\u@\h:\w\007\]'
        ;;
    *)
        local TITLEBAR=''
        ;;
esac

PS1="${TITLEBAR}\
[\$(date +%H%M)]\
[\u@\h:\w]\
\$ "
PS2='> '
PS4='+ '
}

你可以具体测试一下,如果你在ansi-termTERM就会等于eterm-color

于 2013-07-11T15:58:02.597 回答
0

感谢上面Alex Vorbiev 的.bashrc回答,我在 ssh 进入运行 bash 的 Ubuntu 14.04 环境时解决了这个问题,从我在 MacOSX 上的 Emacs 24.5 只需在来宾机器上注释掉我的类似部分。

像这样:

# If this is an xterm set the title to user@host:dir
# case "$TERM" in
# xterm*|rxvt*)
#     PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
#     ;;
# *)
#     ;;
# esac

然后我跑source ~/.bashrc了,提示没有加倍。

我正在使用 Emacstermmulti-term包并echo $TERM返回xterm-256color

于 2016-01-01T00:59:20.123 回答
0

我不知道这是否适用ansi-term,但我有同样的问题eshell,我用这个别名修复了它

alias ssh 'ssh $1 -t "export TERM='dumb';bash -l"'

这将确保PROMPT_COMMAND未在 ssh 机器上设置变量。同样使用此别名,无需.bashrc在每台机器上进行更改

于 2016-08-19T22:35:31.707 回答