Bash提示符行换行问题

12

新手问题,我最近将我的PS1更改为以下内容:

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
YELLOW="\[\033[0;33m\]"
CYAN="\[\033[0;36m\]"

export PS1="\[$RESET\]\u@\h:\[$CYAN\]\w\[$YELLOW\]\$(__git_ps1)\[$NORMAL\] \$ "

但是现在我遇到了换行错误。我创建了一个gif来解释这个问题:

enter image description here

有什么想法可能出了问题吗?


你的 __git_ps1 函数是做什么用的?你能给我们展示一下代码吗? - konsolebox
@konsolebox 这是一个shell脚本,用于在当前目录为git项目时显示当前分支。代码在这里:https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh - hampusohlsson
2
+1 是因为我喜欢这个gif。 - jk.
3个回答

5
我认为你在使用 [ 和 ] 时重复引用了转义代码。请尝试使用以下内容:

我认为您的转义代码应该是单引号 '。请尝试以下内容:

export PS1="$RESET\u@\h:$CYAN\w$YELLOW\$(__git_ps1)$NORMAL \$ "

2

包装错误是指未转义非打印字符(例如改变提示符颜色的转义码)时发生的错误。当语言环境设置为不理解Unicode字符且提示符中包含它们时,也会发生此错误。一个例子是不间断空格。当语言环境为“C”并且提示符中有Unicode字符时,Shell认为正在打印更多的字符,而实际上并非如此,导致提示符提前换行。


1

shopt -s checkwinsize 会解决你的问题。 这会设置变量 checkwinsize on。它默认在 /etc/bashrc 中设置,但是由于你使用自定义的 .bashrc 文件,你可以将此代码放在那里或者在你的 .bashrc 文件中通过添加 . /etc/bashrc 来加载 /etc/bashrc。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接