CLI 中的反向搜索:之后弄乱了输出

MrY*_*iji 10 command-line bashrc ps1

请参阅下面我的编辑,这并不完全是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
Run Code Online (Sandbox Code Playgroud)

它还将我的光标“移动”到不同的位置。如果我按回车,就会执行正确的命令(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) \$ '
Run Code Online (Sandbox Code Playgroud)

这是我写的东西,以橙色(如果master分支)或绿色(或no git灰色)显示 git 分支。

你们知道是什么导致了这种奇怪的行为吗?


编辑:这与我用来从函数返回具有颜色 + git 分支名称的字符串的方式可能重复的问题不同。使用不会转义字符和(在您的 CLI 中自己尝试:)。echo -e "some string"git_branch()echo -e\[\]echo -e "\[\033[33m\]test"

理想情况下,我想根据分支的存在和名称保留这些条件颜色(如果没有分支,则为灰色,如果主为橙色,否则为绿色)。

wja*_*rea 11

将颜色序列包装在 readline 转义中,如下所示:

echo -e "\001\033[33m\002${branch}\001\033[00m\002" # yellow
echo -e "\001\033[90m\002 (no git)\001\033[00m\002" # red
echo -e "\001\033[32m\002${branch}\001\033[00m\002" # green
Run Code Online (Sandbox Code Playgroud)

readline 转义\001位于非打印序列的开头和\002结尾。这些等同于\[\],分别在PS1字符串。

来源:archemirobash 提示的回答和函数内的回显颜色_bash_帮酷编程问答


这是我在另一个问题中的答案,代码已更改。