![配置 Zsh 提示符/插入自定义字符而无需外部命令](https://linux22.com/image/182595/%E9%85%8D%E7%BD%AE%20Zsh%20%E6%8F%90%E7%A4%BA%E7%AC%A6%2F%E6%8F%92%E5%85%A5%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AD%97%E7%AC%A6%E8%80%8C%E6%97%A0%E9%9C%80%E5%A4%96%E9%83%A8%E5%91%BD%E4%BB%A4.png)
我喜欢自己制作提示。而且,我希望它们简单并仅写入 $PS1 和 $PS2 变量中。我不希望它们成为单独的文件,或整个脚本或程序,而且我也希望它们运行尽可能少的外部程序所以,这就是我发布此内容的原因
这是我当前配置提示的方式:
function setPromptTheme()
{
if [ $UID = 0 ]
then _promptColorUID=yellow
else _promptColorUID=blue
fi # Checks if the user is root and colors some parts of the prompt accordingly
if [ -z $SSH_CONNECTION ]
then _promptColorSSH=white
else _promptColorSSH=yellow
fi # Checks if the session is running through SSH and colors some parts of the prompt accordingly
export PS1="%(?.%K{green}%F{black} √ %F{green}%K{black}$(printf '\ue0b0')%f%k.%K{red}%F{black} × %F{red}%K{black}$(printf '\ue0b0')%f%k)%K{black} %F{$_promptColorSSH}%n@%M %F{black}%K{$_promptColorUID}$(printf '\ue0b0')%k%K{$_promptColorUID}%F{black} > %k%F{$_promptColorUID}$(printf '\ue0b0')%f%k "
export RPS1="%F{$_promptColorUID}$(printf '\ue0b2')%K{$_promptColorUID}%F{black}
答案1
您可以$'\uxxxx' or $'\Uxxxxxxxx'
在此处使用(虽然$'...'
引号来自 ksh93,但其中\u
/的解释实际上是由 引入的,此后被其他一些 shell 复制,尽管有一些变化)。\U
zsh
所以:
PS1="...."$'\ue0b2'"...."
或者:
myChar=$'\ue0b2'
PS1="...$myChar..."
或者
typeset -A powerline=(
branch $'\uE0A0'
ln $'\uE0A1'
padlock $'\uE0A2'
'solid right' $'\uE0B0'
right $'\uE0B1'
'solid left' $'\uE0B2'
left $'\uE0B3'
)
并使用$poweline[solid right]
例如。
\[
并且\]
是巴什引入 0 宽度数据的语法。
等价zsh
的是%{...%}
,但在这里,这些字符的宽度为一列,所以你不想用那个。在我的系统上至少有以下字符私人使用区域(此处由 powerline 使用)宽度已为 1(根据wcwidth()
zsh 所使用的来确定字符宽度)。如果wcwidth()
这些返回 0,您可以随时插入 a%G
来告诉 zsh 它们的宽度为 1。