请参阅下面的编辑,这不完全是Shell 提示自定义和 cmd 行为的重复
我reverse-search
在 CLI 中的功能已损坏,我不知道如何修复它...
当我按 ctrl+r 并搜索我之前执行的命令时,找到它然后按右箭头键使用它,输出被破坏。这是一个例子:
# I reverse-searched the word "test" then pressed right arrow
yoshiji@x1carbon:~/path/to/git/folder (master) $ch)`test': rake test
# ^^^^^^^^^^ weird output
# ^ cursor right there
它还将我的光标“移动”到不同的位置。如果我按下回车键,就会执行正确的命令(rake test
在这种情况下),因此这意味着显示的文本与实际执行的文本不同。
我知道这很可能与我PS1
在 my 中的导出有关~/.bashrc
,所以这里是这个文件的最后几行:
# Git branch in prompt.
git_branch() {
branch=$(__git_ps1 2> /dev/null)
if [ "$branch" = " (master)" ]; then
echo -e "\033[33m${branch}\033[00m" # yellow
elif [ "$branch" = "" ]; then
echo -e "\033[90m (no git)\033[00m" # red
else
echo -e "\033[32m${branch}\033[00m" # green
fi
}
PS1='\u@\h:\w$(git_branch) \$ '
这是我写的东西,以橙色(如果master
分支)或绿色(或no git
灰色)显示 git 分支。
你们对导致这种奇怪行为的原因有任何想法吗?
编辑:这与我用来从函数返回具有 git 分支的颜色+名称的字符串的方式可能重复的问题不同。Using不会转义字符和(在您的 CLI 中自己尝试:)。echo -e "some string"
git_branch()
echo -e
\[
\]
echo -e "\[\033[33m\]test"
理想情况下,我想根据分支的存在和名称保留这些条件颜色(如果没有分支,则为灰色,如果主则为橙色,否则为绿色)。