我将 .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[33m
是git 本身希望该线显示为黄色——当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"
...或类似的规定。