当我开始对命令进行选项卡自动完成时,它会将我最初键入的内容保留在它旁边,并且命令变得不可读。在下面的示例中,我输入了“git che”并点击了 tab。一旦我选择“checkout”,命令提示符就会变成“git che git checkout”。该命令仍然有效,并且在我的历史记录中它存储“git checkout”。但它在视觉上很烦人。有没有办法改变这种行为。我在 2 个不同的终端仿真器中尝试了这个,所以我可以确认它的 ZSH 而不是仿真器。谢谢
编辑:
回声 $ZSH_VERSION
4.3.10
zsh -f 似乎不会发生这种情况。虽然很难说,因为唯一有效的自动完成是目录。我在这个自定义主题中使用“oh-my-zsh”:
autoload -U add-zsh-hook
add-zsh-hook chpwd do_ls_on_chdir
function do_ls_on_chdir() {
ls;
}
function dirStack(){
OUT='';
NUM=1;
for X in $(dirs | cut -d ' ' -f2-10); do
OUT="$OUT$1%B$NUM:%b$1$X ";
(( NUM=NUM+1 ))
done
echo $OUT;
}
ZSH_THEME_GIT_PROMPT_ADDED=""
ZSH_THEME_GIT_PROMPT_MODIFIED=""
ZSH_THEME_GIT_PROMPT_DELETED=""
ZSH_THEME_GIT_PROMPT_RENAMED=""
ZSH_THEME_GIT_PROMPT_UNMERGED=""
ZSH_THEME_GIT_PROMPT_UNTRACKED=""
ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg_bold[yellow]%}↑"
ZSH_THEME_GIT_PROMPT_PREFIX=""
ZSH_THEME_GIT_PROMPT_SUFFIX=""
ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg_bold[red]%}✗"
ZSH_THEME_GIT_PROMPT_CLEAN=" %{$fg_bold[green]%}✔"
local user_color='blue'
local back="${BG[237]}"
test $UID -eq 0 && user_color='red'
PROMPT='$(dirStack $back)
$back%B%!%b$back %{$fg_bold[$user_color]%}%~%{$reset_color%}'\
'$back $(git_prompt_status)%{$reset_color%}'\
'$back%{$fg_bold[magenta]%}$(git_prompt_info)%{$reset_color%}'\
'$back$(git_prompt_ahead)$reset_color'\
'$back%(!.#.>)$reset_color '
PROMPT2='%{$fg[red]%}%_ %{$reset_color%}'
PROMPT3='%{$fg[red]%}... %{$reset_color%}'
RPROMPT='%(?..%{$fg_bold[red]%}exit %?%{$reset_color%})'\
' %{$FG[186]%}(%D %*)%{$reset_color%}'
解决方案:
注意:stackoverflow 不会让我回答我自己的问题,因为我是在过去 8 小时内提出的。我不想等待。
所以我想通了。事实证明我没有正确地转义 ANSI 颜色代码(我认为)。在我的 PROMPT 变量中有 $reset_color 的任何地方,我都将其更改为 %{$reset_color%} 并修复了它。