当我使用 zsh 键入太长的时间时,提示符就会消失,并且它会在与我键入的其余内容相同的行上留下一个字符,其余字符将转到其下方的新行。不知道如何判断这是一个COLUMNS
问题还是完全不同的问题。
对于.zshrc
root 用户来说似乎工作得很好,一旦输入足够长,正确的提示就会消失,并且不会出现故障。我个人的似乎也可以在窗口管理器中的主/堆栈之间切换后自行修复(AwesomeWM,不确定这是否会影响它)
文件:
ROOT .zshrc:https://paste.gnome.org/pff0tkabw
个人.zshrc:https://paste.gnome.org/pxy8cfrcu
答案1
我猜您的大部分.zshrc
文件都是从较旧的文件或其他人的.bashrc
文件中提取的,因为其中有很多事情zsh
与bash
.
您当前的提示设置为
PS1='[${GREEN}%n${NC}@${GREEN}%m${NC}:${CYAN}%1~${NC}]%(?,,[${RED}%?${NC}])$(git_status)$ '
其中$GREEN
等是由 产生的控制序列tput
。
这存在一个问题,即 shell 很难确定提示的宽度,因为您使用自己的转义序列进行着色,而不是使用zsh
.
我建议你放弃你的$GREEN
等变量,而是使用
PS1='[%F{green}%n%f@%F{green}%m%f:%F{cyan}%1~%f]%(?,,[%F{red}%?%f])$(git_status)$ '
每个都%F{colorname}
将前景色设置为,colorname
并且每个都%f
停止使用该颜色。
为了正确使用您自己的转义序列,每个这样的序列都应该包含在 中%{...%}
,以便 shell 知道它不会在提示中占用空间(root 用户的初始化文件执行此操作,但以一种迂回的方式):
PS1='[%{${GREEN}%}%n%{${NC}%}@%{${GREEN}%}%m%{${NC}%}:%{${CYAN}%}%1~%{${NC}%}]%(?,,[%{${RED}%}%?%{${NC}%}])$(git_status)$ '
请注意,这也意味着包含颜色代码的 shell 函数的输出git_status
需要更新。
阅读手册中标题为“提示序列的扩展”的部分zshmisc
。