【发布时间】:2014-05-08 14:04:00
【问题描述】:
我刚刚切换到 Zsh,但我遇到了一个奇怪的问题:每次我按 Tab 键时,提示都会上升一行,从而吃掉上面的内容。
为了更清楚地演示问题,我制作了一个GIF:
我正在使用自定义主题和 Oh My Zsh。您可以在这里找到主题:http://pastebin.com/12dZtZf3。
编辑:问题似乎存在于我的主题中,因为使用其他主题可以解决问题。
编辑:罪魁祸首似乎在打印破折号行和提示上方日期的函数中:
_professional_prompt_header() {
echo -n "$bg[grey]"
for i in {0..$(( $(tput cols) / 2 - 6 ))}; do
echo -n "--"
done
# Uncommenting this line fixes the problem.
# Tried echo without -n and print, but no success.
echo -n " %*$reset_color"
}
【问题讨论】:
-
选项卡完成中的某些内容正在生成一个转义序列,该序列以某种方式导致终端重绘屏幕,同时删除当前光标位置上方的第三(?)行。我无法开始想象会产生这种效果的错字,但我想说你的标签完成设置是开始的地方。
-
@chepner 我的所有行为都依赖 Oh My Zsh 插件:我激活了以下插件:
plugins=(git nvm colorize cp colored-man sublime extract z)。奇怪的是,改变我的主题解决了这个问题。 -
提示中的某些内容可能会破坏终端的显示。将提示设置为微不足道的内容,然后重试。我敢打赌一切都会按预期进行。
-
很可能您在某处放置了没有
%{...%}括号的转义码,可能是在颜色定义中。所以改为例如PS1=$'\e[31mBeautiful prompt>\e[0m'你应该有PS1=$'%{\e[31m%}Beautiful prompt>%{\e[0m%}'