Accorcia il percorso nel prompt di zsh


18

Bashha l' PROMPT_DIRTRIMopzione, ad esempio quando imposto PROMPT_DIRTRIM=3, quindi un percorso lungo come:

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

mostrerebbe invece come:

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

Esiste un'opzione simile per zsh?

Risposte:


22

Per ottenere un effetto simile bash, incluso quello ..., prova:

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

Controlla se il percorso è lungo almeno 4 elementi ( %(4~|true|false)) e, se vero, stampa alcuni punti con gli ultimi 3 elementi ( .../%3~), altrimenti viene stampato il percorso completo %~.


Ho notato che bashsembra abbreviare i percorsi nella directory home in modo diverso, ad esempio:

~/.../some/long/path

Per un effetto simile, potresti voler usare:

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

Controlla se il percorso è più lungo di 5 elementi e in tal caso stampa il primo elemento ( %-1~), alcuni punti ( /…/) e gli ultimi 3 elementi. Non è esattamente lo stesso dei percorsi, che non si trovano nella tua home directory, avrà anche il primo elemento all'inizio, mentre bashin quel caso stampa solo punti. Così

/this/…/some/silly/path

invece di

.../some/silly/path

Ma questa potrebbe non essere necessariamente una cosa negativa.


1
Mi piace di più la prima versione, ma nota che mostra ~/a/bcome .../a/banziché ~/a/b. Per risolvere questo, puoi usare %(5~|…/%3~|%~).
Momar,

Per quelli che non conoscono zsh (come me), si desidera utilizzare questa sintassi con la PROMPTvariabile d'ambiente nella propria .zprofile, ad es .:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Ryan H.

1
@RyanH. Grazie, rileggendo la mia risposta, noto che non ho mai menzionato, dove queste impostazioni devono essere fatte. Dovrò aggiustarlo. Due piccole cose sul tuo commento: le impostazioni per le sessioni interattive della shell dovrebbero essere fatte .zshrce non c'è davvero bisogno di exportparametri interni della shell come PROMPT.
Adaephon,

@Adaephon Grazie per le informazioni. Aggiusterò! :)
Ryan H.

8

Oltre alle altre risposte fornite qui, puoi anche utilizzare %<per troncare il percorso di un determinato numero di caratteri . Trovo che questo sia preferibile all'uso %<n>d, poiché i singoli elementi del percorso possono ovviamente essere piuttosto lunghi in se stessi. L'utilizzo %<produce una lunghezza del prompt massima molto più prevedibile.

Ad esempio, per troncare a sinistra l'elemento del percorso con l'espansione tilde ( %~) a 15 caratteri, sostituendo i caratteri rimossi con .., puoi fare qualcosa del genere:

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

Questo è documentato nel manuale di Zsh in Espansione rapida , proprio alla fine della pagina.


4

È possibile utilizzare l' %3d espansione rapida :

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

La forma generale è che %dse un numero intero positivo segue dspecifica i componenti finali da mostrare del percorso corrente, zero significa che mostra l'intero percorso, numero intero negativo indica il percorso principale da mostrare:

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

3

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

Quindi, per ottenere qualcosa di simile a PROMPT_DIRTRIM=3, è possibile utilizzare %3do %3~, ad esempio

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

Questo non mostrerà il "..." come in bash, però.
Elronnd
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.