web-dev-qa-db-ja.com

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

BashにはPrompt_DIRTRIMオプション。 Prompt_DIRTRIM=3、次に次のような長いパス:

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

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

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

zshにも同様のオプションはありますか?

20
pfnuesel

_..._を含む同様の効果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
_

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

24
Adaephon

ここに示されている他の回答に加えて、%<を使用して、パスを指定された数の文字に切り詰めることもできます。個々のパス要素自体は明らかに非常に長いため、%<n>dを使用するよりもこれが望ましいと思います。 %<を使用すると、はるかに予測可能な最大プロンプト長が得られます。

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

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

これは、Zshマニュアルの Prompt Expansion のページの右側に記載されています。

9
wjv

%3dを使用できます プロンプト展開

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

一般的な形式は%dです。dの後に正の整数が続く場合、現在のパスを示す末尾のコンポーネントを指定します。ゼロはパス全体を示し、負の整数は示す先頭のパスを示します。

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

http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html またはman 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% 
3
Mikel