为什么我的bash提示符有时会被覆盖?
以下是我的bashrc的相关部分:为什么我的bash提示符有时会被覆盖?,bash,prompt,Bash,Prompt,以下是我的bashrc的相关部分: 它工作得很好,但有时当我为前面的命令键入或点击向上箭头时,提示的一部分会在终端中被覆盖。为什么会发生这种情况?看起来您将$git\u分支部分包含在非打印字符块\[…\]中 看起来您将$git\u分支部分包含在非打印字符块\[…\]中 仅供参考,你应该把最后的\-\\\$增加三倍。另外,您应该切换到zsh。更容易做的事情,大量的预先构建的提示,Git函数等等。@ Kevin You应该考虑把BASH添加到你忽略的标签列表。@ DeNULL,但是我如何找到地方来插
它工作得很好,但有时当我为前面的命令键入或点击向上箭头时,提示的一部分会在终端中被覆盖。为什么会发生这种情况?看起来您将$git\u分支部分包含在非打印字符块\[…\]中 看起来您将$git\u分支部分包含在非打印字符块\[…\]中 仅供参考,你应该把最后的\-\\\$增加三倍。另外,您应该切换到zsh。更容易做的事情,大量的预先构建的提示,Git函数等等。@ Kevin You应该考虑把BASH添加到你忽略的标签列表。@ DeNULL,但是我如何找到地方来插入ZSH?@凯文,这是一个好的观点:FYI,你应该把最后的\\\\$加倍。另外,您应该切换到zsh。更容易做的事情,以及大量预先构建的提示,Git函数等等。@ Kevin You应该考虑把BASH添加到你忽略的标签列表中。@ DeNULL,但是我如何找到地方来插入ZSH?@凯文,这是一个很好的观点:
function find_git_branch {
local dir=. head
until [ "$dir" -ef / ]; do
if [ -f "$dir/.git/HEAD" ]; then
head=$(< "$dir/.git/HEAD")
if [[ $head == ref:\ refs/heads/* ]]; then
git_branch=" (${head#*/*/})"
elif [[ $head != '' ]]; then
git_branch=' (detached)'
else
git_branch=' (unknown)'
fi
return
fi
dir="../$dir"
done
git_branch=''
}
function shortpath {
# How many characters of the $PWD should be kept
local pwd_length=40
local lpwd="${PWD/#$HOME/~}"
if [ $(echo -n $lpwd | wc -c | tr -d " ") -gt $pwd_length ]
then newPWD="...$(echo -n $lpwd | sed -e "s/.*\(.\{$pwd_length\}\)/\1/")"
else newPWD="$(echo -n $lpwd)"
fi
echo $newPWD
}
PROMPT_COMMAND="find_git_branch; $PROMPT_COMMAND"
# PS1 prompt color vars
CYAN="\e[36m"
RED="\e[31m"
GREEN="\e[32m"
DEFAULT="\e[0m"
TIME="[\t]"
DIRNAME="\w"
export PS1="\u@\h:\[$CYAN\]\$(shortpath)\[$GREEN\]\[\$git_branch\]\[$DEFAULT\] \$ "