zshプロンプトでパスを短くする


18

BashPROMPT_DIRTRIMオプションがあります。たとえば、を設定するとPROMPT_DIRTRIM=3、次のような長いパスになります。

user@computer: /this/is/some/silly/path

代わりに次のように表示されます:

user@computer: .../some/silly/path

同様のオプションが存在しzshますか?

回答:


22

同様の効果を得るにはbash、を含めて...みてください:

%(4~|.../%3~|%~)

これは、パスが少なくとも4要素の長さ(%(4~|true|false))であるかどうかをチェックし、trueの場合、最後の3要素でいくつかのドットを印刷します(.../%3~)、そうでない場合はフルパスが印刷され%~ます。


bashホームディレクトリのパスを短くするように見えることに気づきました、例えば:

~/.../some/long/path

同様の効果を得るには、次を使用できます。

%(5~|%-1~/…/%3~|%4~)

これは、パスが5要素より長いかどうかをチェックし、その場合、最初の要素(%-1~)、いくつかのドット(/…/)、最後の3要素を印刷します。ホームディレクトリにないパスとはまったく同じではなく、先頭に最初の要素がありますが、bashその場合はドットだけが印刷されます。そう

/this/…/some/silly/path

の代わりに

.../some/silly/path

しかし、これは必ずしも悪いことではないかもしれません。


1
私は最初のバージョンの方が好きですが、代わりに~/a/bとして表示されることに注意してください。これを修正するには、を使用できます。.../a/b~/a/b%(5~|…/%3~|%~)
momar

(私のような)zshが初めてのPROMPT場合は、この構文をの環境変数とともに使用します.zprofile。例:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Ryan H.

1
@RyanH。おかげで、私の答えをもう一度読んで、これらの設定を行う必要がある場所については言及していません。私はそれを修正する必要があります。コメントに関する2つの小さなこと:インタラクティブなシェルセッションの設定を行う.zshrc必要がありexport、シェルのような内部パラメータは必要ありませんPROMPT
アダフォン

@Adaephon情報をありがとう。修正します!:)
ライアンH.

8

ここで与えられた他の回答に加えて、あなたも使用することができ%<、所与の数のパスを切り捨てる文字%<n>d個々のパス要素は明らかに長いので、これを使用するよりもこれが好ましいと思います。使用%<すると、はるかに予測可能な最大プロンプト長が得られます。

たとえば、チルダ展開(%~)を使用してパス要素を15文字に左切り捨てし、削除された文字を..に置き換えるには、次のようにします。

PROMPT='%n@%m:%15<..<%~%<<%# '

これは、Zshマニュアルのページの最後にあるPrompt Expansionで文書化されています。


4

%3d プロンプト拡張を使用できます

/home/cuonglm/.config/fish/functions $ PS1='%3d $ '
.config/fish/functions $

一般的な形式は%d、以下の正の整数dが現在のパスの表示する後続コンポーネントを指定する場合、ゼロ平均はパス全体を表示し、負の整数は表示する先行パスを意味します:

.config/fish/functions $ PS1='%-2d $ '
/home/cuonglm $

3

参照してくださいhttp://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.htmlman zshmisc

%d
%/
Current working directory. If an integer follows the ‘%’, it specifies a number of trailing components of the current working directory to show

%~
As %d and %/, but if the current working directory starts with $HOME, that part is replaced by a ‘~’.

に似たものを取得するにはPROMPT_DIRTRIM=3%3dまたはを使用できます%3~、たとえば

% mkdir -p ~/a/b/c/d
% cd ~/a/b/c/d
% PS1='%n@%m: %3d%% '
user@computer: b/c/d% 

ただし、bashのように「...」は表示されません。
エルロンド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.