在Zsh中按Tab键会吞掉上面的行

6
我刚刚转换到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"      
}

你的Tab键自动补全功能中有一些生成转义序列的问题,这些序列会在删除当前光标位置上方第三行时导致终端重新绘制屏幕。我无法想象一个打字错误会产生这样的影响,但我建议你从检查Tab键自动补全设置开始。 - chepner
@chepner 我依赖于 Oh My Zsh 插件来实现所有的行为:我已经激活了以下插件:plugins=(git nvm colorize cp colored-man sublime extract z)。奇怪的是,更改我的主题可以解决这个问题。 - jviotti
很可能是您的提示符在干扰终端的显示。将提示符设置为简单的内容,然后重试。我敢打赌,一切都会按预期工作。 - Francisco
3
很有可能您在某个地方放置了转义代码而没有使用%{...%}括号,可能是在颜色定义中。因此,例如PS1=$'\e[31mBeautiful prompt>\e[0m'应改为PS1=$'%{\e[31m%}Beautiful prompt>%{\e[0m%}'。注意保持原意并使语言更加通俗易懂。 - user3620917
1个回答

4

在zsh 5.3版本发布中,多行提示符也成为一个问题。截至2017年1月13日,该问题尚未得到修复。可以在这个prezto问题的讨论和解释中找到更多信息。

关于这个有问题的zsh问题本身的更多讨论可以在这里找到

希望能从zsh项目中得到修复。如果无法修复,则该github存储库中提到的一些解决方法是使您的PROMPT变量仅为单个行,在precmd函数中输出其他任何行。然而,这似乎很麻烦,因此在修复(或决定是“功能”)之前,最简单的解决方法似乎是回滚到zsh 5.2版本。


根据2月27日的此评论,这个问题将在(截至2017年5月10日尚未发布的)版本5.3.2中得到解决。根据上述评论,修复程序已经在zsh git镜像上可用。 - Wojciech Morawiec
1
截至2017年11月19日,我仍然遇到了zsh 5.4.2的问题变化。 - Marco
@Marco 我也遇到了同样的问题。在我的情况下,当提示符的第一行(我的提示符有两行)完全填满终端的宽度时,问题似乎会发生;我修改了我的提示符以压缩 cwd 以达到比行末少一个字符的长度,这样就不会吃掉行了。 - sarahzrf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接