zsh 在 ps1 中右对齐

So8*_*res 21 zsh prompt

我想要一个带有右对齐部分的多行 zsh 提示,它看起来像这样:

2.nate@host:/current/dir                                               16:00
->
Run Code Online (Sandbox Code Playgroud)

我知道 zsh 中的 RPROMPT,但是它有一个右对齐的提示,与您的正常提示相对,它与您的输入在同一行文本上。

有没有办法让多行命令提示符的第一行右对齐部分?我正在寻找 PS1 变量中的指令,即“现在右对齐”,或者是一个变量,该变量对 PS1 来说是 RPROMPT 对 PROMPT 的意义。

谢谢!

Pab*_*zzi 13

您将在此处找到详细的答案和示例。这个想法是在 PS1 之前使用precmd回调、use$COLUMNS和一些数学来计算文本在屏幕右侧的位置。转义序列的知识也将帮助您定位光标和着色。

另一种解决方案是使用Oh My ZSH 中的主题。


fer*_*raz 10

我也一直在找这个。对我来说,precmd()绘制的线条在调整大小或何时^L用于清除屏幕时不会重绘这一事实让我感到很痒。我现在正在做的是使用ANSI 转义序列来稍微移动光标。虽然我怀疑有一种更优雅的方式来发布它们,但这对我有用:

_newline=$'\n'
_lineup=$'\e[1A'
_linedown=$'\e[1B'

PROMPT=...whatever...${_newline}...whatever...
RPROMPT=%{${_lineup}%}...whatever...%{${_linedown}%}
Run Code Online (Sandbox Code Playgroud)

请记住,zsh 手册指出 %{...%} 用于不移动 cursor 的文字转义序列。即便如此,我仍在使用它们,因为它们允许忽略其内容的长度(尽管无法弄清楚如何使用它们来移动光标的转义)