Mac Terminal.app烦人的bug - 如何解决?

时间:2009-10-02 20:40:08

标签: macos terminal osx-leopard

显示问题的视频: http://www.mentaframework.org/download/TerminalBug.mov

当我在Terminal.app上输入并到达行尾时,下一行从第一行开始,覆盖所有内容。然后,如果我使用删除键,一切都会混乱并消失。

我在同一个终端上为不同的主机做了一个ssh,它工作正常,所以我的shell配置有问题吗?

观看电影,看看会发生什么:

谢谢,

-Sergio

2 个答案:

答案 0 :(得分:18)

您需要在PS1变量中标记设置彩色提示的转义码。 shell需要知道它们不可打印,然后它会正确计算你的换行。

以下是解释和一些示例的链接:

http://www.artemfrolov.com/articles/coloured-bash-prompt

快速提示:

\[     begins a sequence of non-printing characters
\]     ends a sequence of non-printing characters

答案 1 :(得分:1)

http://www.artemfrolov.com/articles/coloured-bash-prompt目前是空白的(例如,访问Chrome / Firefox / Opera并查看空白,没有内容)。因此,在研究了示例here之后,我发现了转换:

export PS1='\e[0;32m\u@\h\e[m \D{%b %d} \t $ '

打破了

export PS1='\[\e[0;32m\]\u@\h\[\e[m\] \D{%b %d} \t $ '

似乎对我有用(作为一个额外的具体例子)。

另外,稍微偏离主题,但有用(至少我的参考):在提示中使用有用的“压缩路径”和带绿色的用户@主机升级上面的内容:

export MYPS='$(echo -n "${PWD/#$HOME/~}" | awk -F "/" '"'"'{if (length($0) > 14) { if (NF>4) print $1 "/" $2 "/.../" $(NF-1) "/" $NF; else if (NF>3) print $1 "/" $2 "/.../" $NF; else print $1 "/.../" $NF; } else print $0;}'"'"')'
export PS1='\[\e[1;32m\]\u@\h\[\e[m\] \D{%b %d} \t $(eval "echo ${MYPS}")$ '

**编辑**:这个PS1分配(第二行),imo,更容易阅读:

export MYPS='$(echo -n "${PWD/#$HOME/~}" | awk -F "/" '"'"'{if (length($0) > 14) { if (NF>4) print $1 "/" $2 "/.../" $(NF-1) "/" $NF; else if (NF>3) print $1 "/" $2 "/.../" $NF; else print $1 "/.../" $NF; } else print $0;}'"'"')'
export PS1='$USER@\[$(tput bold)\]$(hostname -s)\[$(tput sgr0)\] \D{%b %d} \t $(eval "echo ${MYPS}")$ '