zshで長い文字列を切り捨てる

zshで長い文字列を切り捨てる

フルパス(または%1~ \#後続)なしで現在のディレクトリが表示されるようにプロンプ​​トをこのように設定したいと思います。しかし、ディレクトリ名が長い場合はすべて必要ありません。どのように8文字に制限できますか? zshに組み込みの機能がありますか、それともいくつかの外部ツールを使用する必要がありますか?%#

ベストアンサー1

ディレクトリ名を切り捨てるには、以下を試してください。

PS1='%8>..>%1~%<< %# '

例:ディレクトリがWow longdirnameislongプロンプトに次のように表示されます。

Wow lo.. % 

man 1 zshmisc説明する:

プロンプトの条件付き部分文字列

%<string< %>string> %[xstring]

プロンプト文字列の残りの部分の切り捨て動作を指定します。廃止された3番目の形式は、xがまたはである%xstringxものと同じです。文字列は切り捨てられた部分の代わりに表示されます。すぐに拡張されるわけではありません。<>

3番目の形式では、[プロンプトに表示できるさまざまな文字列の最大許容長を指定する数値引数が続きます。最初の2つの形式では、この数値引数は負の数にすることができます。この場合、切り捨ての長さは、現在のプロンプト行に残っている文字位置の数から数値引数の絶対値を引くことによって決定されます。長さが0または負の場合は、長さ1が使用されます。つまり、負の引数は、右マージン(RPROMPTの左マージン)の前に最小のn文字を残すように切り捨てをソートします。

< 文字列の左側が切り捨てられる形式と、文字列>の右側が切り捨てられる形式です。たとえば、現在のディレクトリがある場合、/home/pikeプロンプトは%8<..<%/に展開されます..e/pike。この文字列では、終了文字(<、、>または])、または実際にはすべての文字が先頭の\;のために発生する可能性があります。ただし、二重引用符で囲まれた文字列からバックスラッシュを削除することに加えて、文字列も標準印刷処理の対象となるため、print -Pを使用するときはそれを2倍にする必要があります。したがって、最悪の場合はシナリオですprint -P "%<\\\\<<..."

文字列が指定された切り捨て長さよりも長い場合は、切り捨てられた文字列を完全に置き換えて全体を表示します。

切り捨てる文字列部分が、文字列の終わり、構成された次の包含グループ%(の終わり、または同じグループ化レベルで発生する次の切り捨て(つまり、a内の切り捨て%(は別々)のいずれまで実行されるかを尋ねます。まず来る。特に、引数がゼロの切り捨て(例%<<:)は、切り捨てられる文字列範囲の終わりを表示し、同時にそこから切り捨てを解除します。たとえば、プロンプトは%10<...<%~%<<%# 現在のディレクトリの切り捨てられた表現を印刷し、その後に%または#、スペースが順番に表示されます。それ以外の場合、%<<これら2つの文字は切り捨てられる文字列に含まれます。%-0<<同じではありませんが、指定された%<<ヒントは右マージンで切り捨てられます。

切り捨てはプロンプトの各行にのみ適用され、含まれている改行文字(存在する場合)で区切られます。切り捨てられたプロンプト行の全長が端末の幅よりも大きいか、切り捨てられた部分に新しい行が含まれている場合、切り捨ての動作は定義されず、将来のバージョンのシェルで変更される可能性があります。%-n(l.true-text.false-text)使用可能なスペースがn未満の場合、一部のプロンプトを削除するために使用されます。

おすすめ記事