【问题标题】:Hitting tab in Zsh eats above lines在 Zsh 中点击标签会吃掉上面的行
【发布时间】: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%}'

标签: zsh oh-my-zsh


【解决方案1】:

这也作为 zsh 5.3 版本中的多行提示问题出现。截至 2017 年 1 月 13 日,尚未发布补丁。讨论和解释可以在this prezto issue找到。

更多关于 zsh 问题本身的讨论可以found here

希望 zsh 项目能够解决问题。如果没有,该 github 存储库中提到的一些变通方法是使您的 PROMPT 变量只有一行,在 precmd 函数中输出任何其他行。然而,这似乎很痛苦,所以在它被修复(或决定成为“功能”)之前,最简单的修复听起来像是回滚到 zsh 5.2。

【讨论】:

  • this comment从2月27日起,这将在(截至2017年5月10日尚未发布)版本5.3.2中解决。根据上面引用的评论,该修复程序已在 zsh git mirror
  • 截至 2017 年 11 月 19 日,zsh 5.4.2 仍遇到各种问题
  • @Marco 我也是。就我而言,问题似乎恰好发生在提示的第一行(我的提示是 2 行)完全填满终端的宽度时;我修改了提示以将 cwd 压缩到比行尾一,它停止吃线。
猜你喜欢
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多