Skróć ścieżkę w monicie zsh

18

Bashma PROMPT_DIRTRIMopcję, np. kiedy ustawię PROMPT_DIRTRIM=3, to długa ścieżka jak:

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

wyświetli się zamiast:

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

Czy istnieje podobna opcja dla zsh?

pfnuesel
źródło

Odpowiedzi:

22

Aby uzyskać podobny efekt bash, tj. ...Spróbuj:

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

To sprawdza, czy ścieżka ma co najmniej 4 elementy ( %(4~|true|false)) i, jeśli jest prawdą, drukuje niektóre kropki z ostatnimi 3 elementami ( .../%3~), w przeciwnym razie drukowana jest pełna ścieżka %~.


Zauważyłem, że bashwydaje się , że skraca ścieżki w katalogu domowym inaczej, na przykład:

~/.../some/long/path

Aby uzyskać podobny efekt, możesz użyć:

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

Sprawdza, czy ścieżka jest dłuższa niż 5 elementów, i w takim przypadku drukuje pierwszy element ( %-1~), niektóre kropki ( /…/) i ostatnie 3 elementy. To nie jest dokładnie to samo, co ścieżki, których nie ma w twoim katalogu domowym, również będą miały pierwszy element na początku, podczas gdy bashw tym przypadku drukują tylko kropki. Więc

/this/…/some/silly/path

zamiast

.../some/silly/path

Ale to niekoniecznie musi być złą rzeczą.

Adaefon
źródło
1
Bardziej podoba mi się pierwsza wersja, ale zauważ, że pokazuje się ~/a/bjako .../a/bzamiast ~/a/b. Aby to naprawić, możesz użyć %(5~|…/%3~|%~).
momar 22.04.16
Dla tych, którzy są nowi w zsh (jak ja), chcesz użyć tej składni ze PROMPTzmienną środowiskową w swoim .zprofile, np .:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Ryan H.
1
@RyanH. Dzięki, czytając moją odpowiedź ponownie zauważam, że nigdy nie wspominałem, gdzie należy wprowadzić te ustawienia. Będę musiał to naprawić. Dwie małe rzeczy na temat twojego komentarza: należy wprowadzić ustawienia dla interaktywnych sesji powłoki .zshrci naprawdę nie ma potrzeby exportżadnych wewnętrznych parametrów powłoki, takich jak PROMPT.
Adaephon
@Adaephon Dzięki za informację. Naprawię! :)
Ryan H.
8

Oprócz innych podanych tutaj odpowiedzi można także użyć %<do przycięcia ścieżki do określonej liczby znaków . Uważam, że jest to lepsze niż użycie %<n>d, ponieważ poszczególne elementy ścieżki mogą być same w sobie dość długie. Użycie %<daje znacznie bardziej przewidywalną maksymalną długość zachęty.

Na przykład, aby skrócić w lewo element ścieżki z rozszerzeniem tyldy ( %~) do 15 znaków, zastępując usunięte znaki .., możesz zrobić coś takiego:

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

Jest to udokumentowane w podręczniku Zsh w Podpowiedzi rozszerzenia , na końcu strony.

wjv
źródło
4

Możesz użyć %3d szybkiego rozszerzenia :

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

Ogólna postać jest %dtaka, że ​​jeśli jakakolwiek dodatnia liczba całkowita dokreśla składowe końcowe do pokazania bieżącej ścieżki, zero oznacza całą ścieżkę, ujemna liczba całkowita oznacza wiodącą ścieżkę do pokazania:

.config/fish/functions $ PS1='%-2d $ '
/home/cuonglm $
Cuonglm
źródło
3

Zobacz http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html lubman 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 ‘~’.

Aby uzyskać coś podobnego PROMPT_DIRTRIM=3, możesz użyć %3dlub %3~np

% mkdir -p ~/a/b/c/d
% cd ~/a/b/c/d
% PS1='%n@%m: %3d%% '
user@computer: b/c/d% 
Mikel
źródło
Jednak to nie pokaże „...” jak w bash.
Elronnd,