Ada*_*hon 17
为了PS1
通过前面的水平线扩展当前提示,您可以使用以下方法之一。基本原理是相同的,但哪种效果最好取决于您的终端模拟器、区域设置和字体设置。
-
) 或下划线 ( _
) 字符setopt promptsubst
PS1=$'${(r:$COLUMNS::_:)}'$PS1
Run Code Online (Sandbox Code Playgroud)
promptsubst
每次绘制提示时,该选项都会启用提示内的参数替换,在本例中为COLUMNS
。r:$COLUMNS::_:
用下划线(在最后两个之间给出: :
)填充参数的右侧,直到$COLUMNS
达到宽度。在这种情况下,没有给出参数,只打印填充。PS1
自动换行到下一行。所以没有必要添加额外的换行符。这也很重要,因为在某些情况下显式换行可能会导致提示覆盖输出的最后一行。(在我的情况下,当显式换行符之前的提示文本与终端的宽度完全一样时,就会发生这种情况。)这适用于每个终端模拟器(或控制台)、每个语言环境和每种字体。但它可能看起来不那么好:至少有减号,因为它们之间会有间隙 ( ----
),下划线取决于字体。其他方法使用不同的方法来构建它。
setopt promptsubst
PS1=$'%U${(r:$COLUMNS:: :)}%u'$PS1
Run Code Online (Sandbox Code Playgroud)
%U
和之间的所有内容都%u
带有下划线。这应该适用于大多数终端模拟器、语言环境和字体,因为它只使用下划线。一个可能的缺点是,水平线不会居中,但在输出线上非常低,就在提示的下一行之上。
setopt promptsubst
PS1=$'%{\e(0%}${(r:$COLUMNS::q:)}%{\e(B%}'$PS1
Run Code Online (Sandbox Code Playgroud)
%{...%}
告诉zsh只期望不实际移动光标的转义码\e(0
切换到备用字符集q
映射到备用字符集中的水平线\e(B
切换回常规字符集这也适用于大多数终端模拟器(但可能不适用于控制台)、语言环境和字体。线条的粗细似乎因字体和使用相同字体的终端模拟器而异(在我的机器上使用 Terminus 字体 urxvt 打印一条细线,而 roxterm 打印一条非常粗的线)。
setopt promptsubst
PS1=$'${(r:$COLUMNS::\u2500:)}'$PS1
Run Code Online (Sandbox Code Playgroud)
?
)进行填充。这显然需要终端仿真器支持 Unicode 字符、一种具有所需字符和 UTF-8 语言环境的字体。但它也提供了几种线条样式可供选择,例如粗线 ( ?
) 或双线 ( ?
)。(有关更多信息,请参阅官方 Unicode Consortium 代码图表)
归档时间: |
|
查看次数: |
4915 次 |
最近记录: |