我不知道如何解释这一点。当我在 bash 中使用Ctrl+R命令反向搜索命令时,反向搜索的实际文本出现在命令本身中。
例如,如果我输入Ctrl+R hello
来搜索关键字你好在历史命令中,我看到了这一点:
DESKTOP-NHBC022@quant:~$ echo "hello world"
hello world
(reverse-i-search)`hello': echo "hello world"
到目前为止一切顺利,但假设我现在想在执行命令之前“编辑”它。如果我按就Enter可以了,并执行命令,但如果我按→ (right arrow)或End键移动光标,文本(reverse-i-search)hello
位将成为文本的一部分:
DESKTOP-NHBC022@quant:~$ (reverse-i-search)`hello ': echo "hello world"
编辑:我的 中有一个自定义PS1
环境变量.bashrc
。如果我删除它,问题就会消失。所以我想我的问题是,这有什么问题?
export EDITOR=vim
alias vi=vim
alias ls='ls --color=auto'
set editing-mode vi
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
export TERM='xterm-256color'
_GREEN=$(tput setaf 2)
_BLUE=$(tput setaf 4)
_RED=$(tput setaf 1)
_RESET=$(tput sgr0)
_YELLOW=$(tput setaf 3)
_BOLD=$(tput bold)
export PS1="${_GREEN}\h${_YELLOW}@${_RED}\u${_RESET}${_YELLOW}:${_RESET}\w${_RESET}\$ "
答案1
您的问题的答案与此相同:Bash 终端无法正确换行。答案是“将输出包装tput
在\[ \]
”。另一个问题实际上并没有使用tput
,因此如果您在将解决方案调整到您的确切设置时遇到麻烦,我会发布此社区 wiki 答案,而不是投票关闭您的问题作为重复。
像这样修改您的代码.bashrc
:
_GREEN="\[$(tput setaf 2)\]"
_BLUE="\[$(tput setaf 4)\]"
等等,修复所有使用 输出的变量tput
。export PS1=…
然后您的行不需要修改。启动一个新的交互式 shell。现在应该已经修复了问题。