Bash 提示符中的颜色弄乱了 git 输出

Bash 提示符中的颜色弄乱了 git 输出

我将 .bashrc 改为 include,export PS1="\033[1;33m\u@\h: \w>\033[0m"这样我的 shell 提示符就会有颜色,但似乎\033弄乱了 git 输出(至少 log 和 diff 是这样)。我看到类似这样的内容:ESC[33mcommit long-commit-number ESC[m

我也尝试过\e[用 代替\033[,但我仍然看到ESC[33m。有没有办法避免这种情况,同时保留我的 shell 提示符的颜色?

答案1

你的提示设置不正确,但和git问题完全无关。

为了使行编辑工作(即知道提示符打印后光标的位置),bash 需要确切知道提示符的宽度。它无法识别所有可能的终端特定转义序列,因此需要明确告知它提示符的某些部分是不可见的;它们必须被\[\]代码包围。例如:

PS1="\[\033[1;33m\]\u@\h: \w>\[\033[m\]"

如果不这样做,输入长于一行的命令通常会导致第二行覆盖第一行,并出现其他故障。

但是,这些都不影响 git。git log打印 a 的原因ESC[33mgit 本身希望该线显示为黄色——当color.ui启用颜色选项时,它总是显示为黄色。显示“ESC”而不是黄色是因为您的 $PAGER 无法识别该序列;它认为您正在读取包含二进制数据的文件(而不是人类可读的文本)。

如果你使用默认less寻呼机 $PAGER,可能是你向$LESS变量添加了一些自定义选项并忘记了允许使用颜色的那个-R。通常,git$LESS在运行分页器时会在内部进行设置,但是如果您自己设置该变量,git 将不会触碰它,您必须向-R其中添加:

export LESS="R"

export LESS="e M q R F X z -3"

...或类似的规定。

相关内容