端子线未正确缠绕

端子线未正确缠绕

我的终端包装有一个奇怪的问题,在网上阅读后我发现这可能是因为我的 PS1 设置,但是,我查看了它,它似乎与人们所说的相符,所以我不确定我是否做错了什么。

PS1='\[\e[1;36m\]\u\[\e[m\]\[\e[0;31m\]\a@\[\e[m\]\[\e[1;36m\]\aubuntu\[\e[m\]\[\e[1;31m\]\a:~>\[\e[m\]'

有人可能会找出可能出了什么问题吗?

我尝试解决这个问题的一种方法是将 stty 列设置为 1000,但这使许多其他事情变得最糟糕(例如 ls 和 vim)。

答案1

确保 PS1 中的所有不可打印字节都包含在\[ \].这是因为 bash 将它们的长度计入提示符的总长度中,除非它们被正确地“转义”。然后,Bash 使用提示的长度来确定何时需要换行。我认为这就是导致过长命令出现奇怪换行问题的原因。

我还可以在这里找到另一个可能有用的堆栈交换。

答案2

编辑以澄清:由于非打印颜色的错误转义,我过去曾遇到过类似的问题。就我而言,这是因为\[在您的情况下,每个转义序列前面都没有,这可能更多地与无法识别 '\e' 有关,所以我建议用 \033 替换 \e,确保您始终拥有 [\033在每个 [x;yzm] 前面表示您的颜色。我认为\e[m\]是为了禁用颜色,我会用"\[\033[0m\]"它来代替(主要是因为我知道它在所有情况下都有效)您可以考虑将其设置为变量,就像我下面的方式一样,以PMT_Color_Off整理您的提示并使其更容易进行调试。我在下面展示了我所做的事情的示例。

我正在逃避我的颜色,就像这样PMT_Red="\[\033[0;31m\]",至于非提示,它只是Red="\033[0;31m"

要关闭颜色,我使用PMT_Color_Off="\[\033[0m\]"andColor_Off="\033[0m"不提示

我的一台开发机器上的提示的工作副本是

export PS1="\[\033[01;33m\]$(ifconfig | grep "inet" | grep -v "127.0.0.1" | awk '{print $2}' | awk -F: '{print $2}') \[\033[01;32m\]\u@\h \[\033[01;34m\]\[\033[01;33m\]\w #\[\033[00m\] "

http://www.askapache.com/linux/bash-power-prompt.html还使用 \033 转义而不是 \e

我已经在几个终端模拟器上测试了我的程序,包括 xterm、gnome-terminal、terminology 和帧缓冲区

相关内容