bash 提示符中 256 位颜色代码的问题

bash 提示符中 256 位颜色代码的问题

这是我的 bash 提示符;我在用着ANSI 转义序列

reset="\033[0m";
blue="\033[38;5;20m";
cyan="\033[38;5;38m";
green="\033[38;5;35m";
yellow="\033[38;5;227m";
white="\033[38;5;250m";

# Set the terminal title to the current working directory.
PS1="\[\033]0;\w\007\]";
PS1+="\[${yellow}\]\u"; # username
PS1+="\[${white}\]@";
PS1+="\[${green}\]\h"; # host
PS1+="\[${white}\]:";
PS1+="\[${cyan}\]\W"; # working directory
PS1+="\$(prompt_git \"${blue}\")"; # Git repository details
PS1+="\[${white}\]\$ \[${reset}\]"; # `$` (and reset color)
export PS1;

它看起来很棒,但有时终端在计算提示长度时似乎出现问题。这种情况在 OSX 本地以及通过 SSH 连接到 Ubuntu 服务器时都会发生(在 OSX 上和通过 PuTTY 在 Windows 上)

例如,就会发生这种情况。我首先输入“git add [文件名]”并使用制表符补全,然后按“Home”键返回到该行的前面,并将“git add”替换为“vi”。正如你所看到的,它非常混乱。

在此输入图像描述

另外,如果我点击“End”到达该行的末尾,它会带我经过带有几个空格的“.php”。

在此输入图像描述

在编辑新行和编辑历史记录中的行时都会发生这种情况(使用向上箭头。它显示正确,但一旦我使用箭头键或 Home/End 它就会混乱)

按 Ctrl+L 清除并不能解决问题,我基本上必须重新开始并重新输入整行以避免出现问题。

答案1

这条线

PS1+="\$(prompt_git \"${blue}\")"; # Git repository details

没有bash 使用\[\]标记来告诉它不计算所包含的每个字符的列数。如果没有另外说明,它假定应该计算可打印字符。

供讨论:

相关内容