请参阅下面的编辑,这不完全是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"
理想情况下,我想根据分支的存在和名称保留这些条件颜色(如果没有分支,则为灰色,如果主则为橙色,否则为绿色)。
将颜色序列包装在 readline 转义中,如下所示:
readline 转义
\001
位于非打印序列的开头和\002
结尾。这些分别相当于PS1 字符串中的\[
和。\]
资料来源:archemiro对bash 提示的回答和函数内的回显颜色 -代码日志
这是我对另一个问题的回答,代码已更改。
当您在提示中输入颜色代码时,您必须添加额外的标记以让终端知道您在提示中有不可见的字符
改变
至
等等
请参阅bash 手册中的控制提示。