外部コマンドなしで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/の解釈は実際にはいくつかの変更にもかかわらず他のシェルによって導入され、その後コピーされました)。\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ですが%{...%}、ここでは文字の幅が1列なのでいいえ使いたいです。私のシステムには少なくとも次の文字があります。個人使用領域(ここでは電力線で使用されています)幅は1に設定されています(wcwidth()文字の幅はzshが使用するものによって異なります)。wcwidth()これらがゼロを返す場合は、いつでもaを挿入して%Gzshに幅が1であることを知らせることができます。

おすすめ記事