我有以下代码可以为终端着色:

export PS1="\e[1;30m\][\e[\e[1;30m\]\e[1;33m\] \u@\H \[\e[1;32m\]\w\[\e[0m\] \e[1;30m\]]\n[\[ \e[1;31m\]\T\[\e[0m\]\e[1;30m\] ] > \e[37m\]"

但是我有一个问题,当文本应该在新行中时,它将覆盖第一行。

例子:
macos - 终端PS1修复中的断线-LMLPHP

最佳答案

为了让bash找出您的提示占用了多少屏幕空间(以及实际的命令行从何处开始),您必须将提示的非打印部分放在\[...\]中。通常,这意味着像\e[1;30m这样的转义序列需要写为\[\e[1;30m\]。您的提示中有一些\[\],但是它们放在错误的位置,这使bash非常困惑。查找与您的提示一样复杂的提示的所有打印和非打印部分并非易事,但我认为这样做是正确的:

export PS1='\[\e[1;30m[\e[\e[1;30m\e[1;33m\] \u@\H \[\e[1;32m\]\w\[\e[0m\] \[\e[1;30m\]]\n[ \[\e[1;31m\]\T\[\e[0m\e[1;30m\] ] > \[\e[37m\]'

关于macos - 终端PS1修复中的断线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14220848/

10-13 07:30