Kürzen Sie den Pfad in der zsh-Eingabeaufforderung


18

Bashhat die PROMPT_DIRTRIMoption, wenn ich zB setze PROMPT_DIRTRIM=3, dann einen langen weg wie:

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

würde stattdessen anzeigen als:

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

Gibt es eine ähnliche Option für zsh?

Antworten:


22

Um einen ähnlichen Effekt bash, dass das ist , einschließlich ..., try:

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

Dies überprüft, ob der Pfad mindestens 4 Elemente lang ist ( %(4~|true|false)) und druckt, falls dies zutrifft, einige Punkte mit den letzten 3 Elementen ( .../%3~), andernfalls wird der vollständige Pfad gedruckt %~.


Mir ist aufgefallen, dass bashsich Pfade im Homeverzeichnis anscheinend unterschiedlich verkürzen, zum Beispiel:

~/.../some/long/path

Für einen ähnlichen Effekt möchten Sie möglicherweise Folgendes verwenden:

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

Dadurch wird überprüft, ob der Pfad länger als 5 Elemente ist. In diesem Fall werden das erste Element ( %-1~), einige Punkte ( /…/) und die letzten 3 Elemente gedruckt . Es ist nicht genau das Gleiche wie Pfade, die sich nicht in Ihrem Ausgangsverzeichnis befinden. Sie haben auch das erste Element am Anfang, während bashin diesem Fall nur Punkte gedruckt werden. So

/this/…/some/silly/path

Anstatt von

.../some/silly/path

Aber das muss nicht unbedingt schlecht sein.


1
Ich mag die erste Version besser, aber beachten Sie, dass es ~/a/bals .../a/bstatt zeigt ~/a/b. Um dies zu beheben, können Sie verwenden %(5~|…/%3~|%~).
22.

Für diejenigen, die neu bei zsh sind (wie ich), möchten Sie diese Syntax mit der PROMPTUmgebungsvariablen in Ihrem verwenden .zprofile, z. B .:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Ryan H.,

1
@ RyanH. Danke, wenn ich meine Antwort noch einmal lese, bemerke ich, dass ich nie erwähnt habe, wo diese Einstellungen vorgenommen werden müssen. Ich werde das reparieren müssen. Zwei kleine Dinge zu Ihrem Kommentar: Einstellungen für interaktive Shellsitzungen sollten in vorgenommen werden .zshrcund es besteht keine Notwendigkeit für exportinterne Parameter wie PROMPT.
Adaephon

@Adaephon Danke für die Info. Ich werde reparieren! :)
Ryan H.

8

Zusätzlich zu den anderen hier gegebenen Antworten können Sie auch %<den Pfad auf eine bestimmte Anzahl von Zeichen kürzen . Ich finde dies der Verwendung vorzuziehen %<n>d, da einzelne Pfadelemente an sich offensichtlich ziemlich lang sein können. Die Verwendung %<ergibt eine weitaus vorhersehbarere maximale Aufforderungslänge.

Wenn Sie beispielsweise das Pfadelement mit tilde expansion ( %~) nach links auf 15 Zeichen kürzen und entfernte Zeichen durch ersetzen möchten .., können Sie Folgendes tun:

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

Dies ist im Zsh-Handbuch unter Prompt Expansion direkt am Ende der Seite dokumentiert .


4

Sie können die %3d sofortige Erweiterung verwenden :

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

Die allgemeine Form lautet %d: Wenn eine positive Ganzzahl folgt, dwerden die folgenden Komponenten für den aktuellen Pfad angegeben, der Mittelwert Null gibt den gesamten Pfad an, die negative Ganzzahl gibt den führenden Pfad an:

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

3

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

Also, um etwas Ähnliches zu bekommen PROMPT_DIRTRIM=3, könnten Sie verwenden %3doder %3~z

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

Dies zeigt jedoch nicht das "..." wie in der Bash.
Elronnd
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.