配置 Zsh 提示符/插入自定义字符而无需外部命令

配置 Zsh 提示符/插入自定义字符而无需外部命令

我喜欢自己制作提示。而且,我希望它们简单并仅写入 $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 复制,尽管有一些变化)。\Uzsh

所以:

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。

相关内容