Mac Terminal.app 烦人的错误 - 如何修复它?

问题描述 投票:0回答:2

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

我在同一个终端中向不同的主机执行了 ssh,并且运行良好,那么这可能是我的 shell 配置有问题吗?

观看电影,看看会发生什么:[已弃用的链接,现已删除垃圾邮件]

谢谢,

-塞尔吉奥

macos terminal osx-leopard
2个回答
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
投票

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 $ '

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

单独地,稍微偏离主题,但有用(至少对于我的参考):使用有用的“压缩路径”和提示中的粗体绿色 user@host 来升级上述内容:

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 作业(第二行)更容易阅读:

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}")$ '
© www.soinside.com 2019 - 2024. All rights reserved.