为什么Windows中zsh上的每个提示之前都会出现一个百分号?


13

我在Windows中设置了zsh,并且在每个提示上方一行的第一个字符位置都得到了一个反向符号(白底黑字(黑色终端背景))。

通常,这意味着文件末尾没有换行符,例如cat-ing文件时。

在Mac上甚至Windows上的Mintty上都不会发生。但是它确实在ConEmu和CMD.EXE通常运行的标准终端应用程序中发生。

我已经有了unset所有的提示字符串,以及precmd()通常用于在提示上方添加空白行的提示字符串。

任何线索可能是什么?

Answers:


33

相关选项可能是PROMPT_SP,来自手册的解释

尝试保留部分行(即未以换行结尾的行),否则由于PROMPT_CR选项,该行会被命令提示符覆盖。这通过输出一些光标控制字符(包括一系列空格)来工作,当出现分行时,这些字符应使终端换行到下一行(请注意,只有在终端具有自动边距的情况下,这才是成功的,这是典型的) 。

保留部分行后,默认情况下,您将在部分行的末尾看到一个反斜杠和粗体字符:a %表示普通用户或a #表示root。如果设置了该参数,PROMPT_EOL_MARK 则可以使用shell参数来自定义分行结尾的显示方式。

所以,要么你做一个

unsetopt PROMPT_SP

如果您不关心遮盖线(但是在您的情况下,它似乎是空线,因为您%在开始时会看到标志)。

或使用

setopt PROMPT_CR
setopt PROMPT_SP
export PROMPT_EOL_MARK=""

它保留了部分行,但删除了%- 却以提示上一些空行为代价。

要使其永久存在,请更新~/.zshrc

这是一个盲目镜头,因为我无法在自己的中重现此行为cmd.exe


1
感谢@mpy,这使我处于正确的位置,以了解更多信息。这是我想出的:1)三件事起作用,如果结合使用选项,则更多:unsetopt PROMPT_CR; unsetopt PROMPT_SP; 和PROMPT_EOL_MARK =“”。2)设置PROMPT_EOL_MARK =“”摆脱了烦人的反斜杠和加粗“%”字符,但是它仍然添加了额外的换行符,因此提示与薄荷或Mac上的外观有所不同。3)我最终选择了unsetopt PROMPT_SP作为最佳折衷方案。4)除非使用-o选项,否则不能使用set和unset。setopt和unsetopt工作。如果您会解决,我会接受您的回答:)
scanny

@scanny:我必须为此道歉set。当然应该setopt-显然我写得太快了。我更新了答案,并尝试也包含有关空行的要点。
mpy

2

所以我的zsh + oh-my-zsh遇到了完全相同的问题。

我已经在mpy和这些行的帮助下进行了修复:

setopt PROMPT_CR

setopt PROMPT_SP

导出PROMPT_EOL_MARK =“”

您只需要转到->〜/ .oh-my-zsh / themes / XXXXXX,您需要打开oh-my-zsh上正在使用的主题,以便让我以其为例。

只需打开此文件,然后复制/越过文件末尾的那三行即可。

和它的固定!

希望您今天过得愉快,希望对您有所帮助。

和平


请不要添加“谢谢”作为答案。在网站上花费一些时间,您将获得足够的特权来推荐您喜欢的答案,这是超级用户说谢谢的方式。
DavidPostill

0

您可以在ConEmu中运行薄荷。那为我摆脱了百分比。

这是我对任务参数的要求:

/icon "%ConEmuDrive%\msys64\msys2.ico"

和命令:

set CHERE_INVOKING=1 & %ConEmuDrive%\\msys64\usr\bin\mintty.exe -i "%ConEmuDrive%\msys64\msys2.ico" -
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.