XFCE 终端 - 更改输入提示的颜色会搞乱输入线

XFCE 终端 - 更改输入提示的颜色会搞乱输入线

这个问题是对该问题的答案的后续,关于更改 XFCE 终端中用户输入提示的颜色:Ubuntu 终端(Xfce):使输入命令的字体颜色与输出文本不同

由于我不允许在那里发表评论(声望至少 50 点),所以我不得不提出一个新问题。

根据答案,我使用了以下命令:

PS1='\e[1;36m\u@\h \W]\$\e[0m '

这会使格式保持与默认格式相同,但会将颜色更改为青色,正如预期的那样。

但是,我遇到了一些非常奇怪的行为。有时光标会跳回到输入行,有时它会显示不应该存在的旧文本。有时它会分成两行,这样我就继续在上面一行输入。例如:

说一下我想做的事:

$ cd /some/path/to/a/directory

但当我输入它时它变成了这样:

$ cd /some/pa/directoryath/to

如果我输入回车键,它仍然会正确读取命令,只是显示错误。当这种情况发生时,如果我尝试使用退格键,它会变成这样的:

$ cd /some/pa/directoryath/to
$ cd /some/pa/directo
$ cd /some/pa     -------- at this point I cannot erase anything else,
                           in the display some of the characters are still 
                           lingering, but if I type enter there is nothing on the input line

另一个例子,假设我显示以下内容:

$ ls
folder1 folder2 folder3 folder4

现在我想输入一些其他命令,那么可能会发生以下情况:

$ ls
folder1 folder2 folder3 folrectory
$ cd /some/path/to/a/di

再一次,如果我输入回车键,输入会被正确识别,但显示就会混乱。

当我键入向上箭头以获取上一个命令时,或者当输入行接近窗口的右边缘时,最常出现此问题,但并非唯一出现。

答案1

您需要将终端转义序列括起来,并且只能将其括在\[和之间\]

请参阅bash手册页中的“PROMPTING”部分。

代替

PS1='\e[1;36m\u@\h \W]\$\e[0m '

你应该写

PS1='\[\e[1;36m\]\u@\h \W]\$\[\e[0m\] '

答案2

我测试并发现您的提示也存在问题,它似乎过早地预期了右边距并导致换行。

请尝试一下我使用的这个

if [ "$USER" = root ]; then
    PS1='\[\033[01;31m\]$(statstring)\[\033[00m\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\] \$ '
else
    PS1='\[\033[01;31m\]$(statstring)\[\033[00m\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\] \$ '
fi

如果可以的话,你可以把它放入你的 ~/.bashrc 中,至少用于交互式 shell。我使用

case "$TERM" in
xterm-color)
....

来决定何时使用它,并且您可以检查与您的设置相匹配的东西。


statstring编辑:在设置提示之前添加一个要创建的函数~/.bashrc

function statstring {
RC=$?
  if [ "0" != $RC ]; then
    printf "[$RC] "
  fi
}

相关内容