我已经设置了一个自定义 bash 提示符,这样我就可以看到诸如当前 git 分支、npm 包版本信息、我所在的虚拟环境等内容。但是,当我按向上箭头键浏览历史记录时,提示符故障:
通常情况下是这样的:
但是,当我浏览历史记录时,lambda 符号和命令之间的空格消失了:
它只是有时会发生,我不知道为什么。我想我只是对小空间很挑剔,但在花了很多时间配置我的 bash 提示符之后,我希望它看起来很完美。
这就是我的 .bashrc 的样子。我正在使用 Windows 版的 Git Bash,顺便说一句,如果这有什么区别的话:
bashPrompt() {
SYMBOL="λ"
COUNT=(`find ./ -maxdepth 1 -name "package.json"`)
if [ ${#COUNT[@]} -gt 0 ]; then
NPM_PACKAGE_INFO="($(node -p -e "require('./package.json').version"))"
else
NPM_PACKAGE_INFO=""
fi
if [ ! -z "$CONDA_DEFAULT_ENV" ]; then
ENV=" ($CONDA_DEFAULT_ENV)"
else
ENV=""
fi
if [ -d .git ]; then
if [ -z "$(git status --porcelain)" ]; then
echo "[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;32;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "
else
echo "[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;33;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "
fi
else
echo "[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "
fi;
}
PROMPT_COMMAND='PS1="$(bashPrompt)"'
答案1
你的字符串之一是这样的:
"[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;32;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "
您将每个文本都包含在\[\]
对中。如果您删除换行符\n
并尝试 PS1:
PS1="[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;32;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\] n\[\e[0;37;40m${SYMBOL}\] "
如果按向上键(向上箭头),您会发现大部分提示将被历史命令替换。
只需将要使用括号外的行空间的文本放置即可:
PS1="[\[\e[0;36;40m\]\u@\H \[\e[0;37;40m]\]\[\e[1;34;40m\]${ENV} \[\e[1;31;40m\]\w\[\e[1;32;40m\]$(__git_ps1) \[\e[0;37;40m\]${NPM_PACKAGE_INFO} n\[\e[0;37;40m\]${SYMBOL} "
然后再试一次。
正常工作后,添加换行符\n
并重试。
如果仍然遇到问题,请将 bash 更新到 4.4.18(当前版本)或类似版本。