去除zsh右侧提示末尾无用空格($RPROMPT)

Fro*_*zax 18 zsh prompt

在 zsh 中,我的右提示符右侧总是有一个空格字符。我尝试了一个非常简单的 .zshrc 例如:

PROMPT="#"
RPROMPT="*"
Run Code Online (Sandbox Code Playgroud)

屏幕右侧的 * 后面总是有一个空格。

这是显示问题的屏幕截图(我选择了其中一行上的空格)。 http://i.imgur.com/cnfa2eJ.png

谢谢。

Ant*_*ook 20

TL; 博士

您需要做的就是将其放入您的~/.zshrc(或与提示主题相同的文件中):

ZLE_RPROMPT_INDENT=0
Run Code Online (Sandbox Code Playgroud)

细节

5.0.2 之前的 ZSH 版本中,ZSH 的 C 源代码中名为rprompt_off(设置右边距偏移)的值被硬编码为1.

但是在5.0.5版本中,开发人员添加了通过设置ZLE_RPROMPT_INDENT环境变量来覆盖此默认值的功能。

这种“缩进”的基本原理是因为如果显示器的最后一个单元格中有一个字符,一些较旧的终端会开始滚动。

对于 5.0.5 之前的 ZSH 版本

如果您使用的是旧版本的 ZSH 并且无法更新,您仍然可以通过执行以下两项操作来摆脱该空间:

  1. 绝招ZSH以为你RPROMPT是一个性格比它实际上是使用标准的无形序列包装较短:%{...%}
  2. 然后使用 terminfo 发送一个光标返回转义序列: %{terminfo[cub1]}

查看常见问题解答和邮件列表上的此消息以获取更多信息。

  • 这似乎也将输入光标放置在通常位置的左侧一个字符。例如,使用此问题中的提示,光标位于*上*井号标记,而不是紧邻其右侧。(对我来说,将偏移量设置为小于零的值会使提示 * 和 * 光标出现在正确的位置。使用 zsh 5.0.8 和 5.2 观察。) (5认同)
  • 它在 5.2 中对我有用,但现在我遇到了 PROMPT 问题:PROMPT 中的最后一个字符消失了,切换自动完成功能会用当前输入的第一个字符填充最后一个字符。例如`%git<Tab>` 转换为`%ggit` (5认同)
  • 设置 ZLE_RPROMPT_INDENT=0 后,我注意到与上面其他人提到的 *left*-side 提示相同的绘图故障问题。但是,如果我使用 -1 而不是 0,即 ZLE_RPROMPT_INDENT=-1,几乎一切都按预期工作。我在 https://github.com/bhilburn/powerlevel9k/issues/110#issuecomment-395940663 看到了这个提示。几乎,因为 -1 它从不使用 macOS 上终端窗口的底线。 (5认同)