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

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

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

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

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

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

有任何线索可以知道那是什么吗?

答案1

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

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

当保留部分行时,默认情况下,您将在部分行的末尾看到一个反白加粗字符:%普通用户为 a ,#root 为 a 。如果设置,shell 参数PROMPT_EOL_MARK 可用于自定义部分行末尾的显示方式。

因此,你要么

unsetopt PROMPT_SP

如果您不关心被覆盖的线(但是在您的情况下它似乎是一条空线,因为您%在一开始就得到了符号)。

或者使用

setopt PROMPT_CR
setopt PROMPT_SP
export PROMPT_EOL_MARK=""

它保留了部分行,但删除了%--,但代价是在提示符上留下一些空行。

为了使此设置永久生效,请更新您的~/.zshrc

这是一次盲拍,因为我无法在我的作品中重现这种行为cmd.exe

答案2

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

我在 mpy 和以下几行的帮助下修复了这个问题:

setopt PROMPT_CR

setopt PROMPT_SP

导出 PROMPT_EOL_MARK=""

您只需前往 -> ~/.oh-my-zsh/themes/XXXXXX 您需要打开您在 oh-my-zsh 上使用的主题,因此对我来说,例如它是 agnoster。

只需打开此文件并复制/粘贴文件末尾的这 3 行。

并且已修复!!

希望您度过愉快的一天并且这能够帮助到一些人。

和平

答案3

您可以在 ConEmu 中运行 mintty。这帮我省去了百分比。

以下是我所掌握的任务参数:

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

和命令:

set CHERE_INVOKING=1 & %ConEmuDrive%\\msys64\usr\bin\mintty.exe -i "%ConEmuDrive%\msys64\msys2.ico" -

答案4

如果您使用的是 zsh shell ,请在终端中运行以下行: echo 'setopt PROMPT_CR' >.zshrc echo 'setopt PROMPT_SP' >.​​zshrc echo 'export PROMPT_EOL_MARK=""' >.zshrc

相关内容