プロンプトの長さがn未満の場合は、プロンプトをドットで埋めます。

プロンプトの長さがn未満の場合は、プロンプトをドットで埋めます。

ありがとうクラエス・メルボルン私の現在のプロンプトは次のとおりです。

# this variable can be changed later to change the fraction of the line 
export PROMPT_PERCENT_OF_LINE=40

# make a function, so that it can be evaluated repeatedly
function myPromptWidth() { 
  echo $(( ${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100 )) 
}

# for some reason you can't put a function right in PROMPT, so make an
# intermediary variable
width_part='$(myPromptWidth)'

# if myPromptWidth is less than current prompt ... pad with dots

PS1="%F{013}%${width_part}<...<%d%f%F{012}\${__git_ps1_foo}%f%F{011}%(1j.jobs%j.)%f%(?.%F{004}.%F{001}✕%?)%<<%# %f"

だから出力は次のようになります

/media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC% cd ~
/home/blueray%

しかし、すべてのプロンプトの長さが同じであることを願っています。プロンプトの長さがこれより短い場合は、myPromptWidth点で埋める必要があります。

だから私の予想結果は次のとおりです。

/media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC% cd ~
.............................................../home/blueray%

どうすればいいですか?

アップデート1

私は努力しています%${width_part}(l.true-text.false-text)。動作しているかどうかわからないので、問題を解決してください。

ベストアンサー1

width_part='$((${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100))'
PS1="%F{013}%$width_part<<\${(l[$width_part][.])}%~%F{012}\${__git_ps1_foo}%F{011}%(1j.jobs%j.)%(?.%F{004}.%F{001}✕%?)%<<%# %f"

つまり、空の%<width><<truncated-part%<<代替文字列(theが...消えた)を使用しても、まだ切り捨てられ、代わりに<width>パラメータの先頭に値を挿入します。.truncated-part${(l[<width>][.])}

あなたはすべてがあることがわかりますダブル- 引用符、一部$はエスケープされ、一部はエスケープされません。 ()に属していないものは$width_part割り当て時に拡張され、()に属するものは文字通り挿入されるため、各$PS1ヒントが評価されると拡張されます。この変数の実際の値は次のとおりです$PS1

%F{013}%$((${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100))<<${(l[$((${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100))][.])}%~%F{012}${__git_ps1_foo}%F{011}%(1j.jobs%j.)%(?.%F{004}.%F{001}✕%?)%<<%# %f

おすすめ記事