Encurtar o caminho no prompt zsh

18

Bashtem a PROMPT_DIRTRIMopção, por exemplo, quando eu definir PROMPT_DIRTRIM=3, em seguida, um longo caminho como:

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

seria exibido como:

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

Existe uma opção semelhante para zsh?

pfnuesel
fonte

Respostas:

22

Para obter um efeito semelhante bash, incluindo o ..., tente:

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

Isso verifica se o caminho possui pelo menos 4 elementos ( %(4~|true|false)) e, se verdadeiro, imprime alguns pontos com os últimos 3 elementos ( .../%3~), caso contrário, o caminho completo é impresso %~.


Notei que bashparece encurtar caminhos no diretório home de forma diferente, por exemplo:

~/.../some/long/path

Para um efeito semelhante, você pode querer usar:

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

Isso verifica se o caminho tem mais de 5 elementos e, nesse caso, imprime o primeiro elemento ( %-1~), alguns pontos ( /…/) e os últimos 3 elementos. Não é exatamente o mesmo que os caminhos, que não estão no diretório inicial, também terão o primeiro elemento no início, enquanto bashapenas imprimem pontos nesse caso. então

/this/…/some/silly/path

ao invés de

.../some/silly/path

Mas isso pode não ser necessariamente uma coisa ruim.

Adaephon
fonte
11
Eu gosto mais da primeira versão, mas observe que ela aparece ~/a/bcomo em .../a/bvez de ~/a/b. Para consertar isso, você pode usar %(5~|…/%3~|%~).
Momar
Para aqueles novos para zsh (como eu), que pretende utilizar esta sintaxe com a PROMPTvariável de ambiente em sua .zprofile, por exemplo:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Ryan H.
11
@RyanH. Obrigado, lendo minha resposta novamente, noto que nunca mencionei onde essas configurações precisam ser feitas. Vou ter que consertar isso. Duas pequenas coisas sobre o seu comentário: as configurações para sessões interativas do shell devem ser feitas .zshrce realmente não há necessidade de exportparâmetros internos do shell, como PROMPT.
Adaephon 6/06/19
@Adaephon Obrigado pela informação. Vou arrumar! :)
Ryan H.
8

Além das outras respostas fornecidas aqui, você também pode usar %<para truncar o caminho para um determinado número de caracteres . Acho isso preferível ao uso %<n>d, pois os elementos individuais do caminho podem obviamente ser bastante longos em si. O uso %<gera um comprimento máximo de prompt muito mais previsível.

Por exemplo, para truncar à esquerda o elemento do caminho com expansão de til ( %~) para 15 caracteres, substituindo os caracteres removidos por .., você pode fazer algo assim:

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

Isso está documentado no manual do Zsh em Prompt Expansion , logo no final da página.

wjv
fonte
4

Você pode usar %3d a expansão rápida :

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

A forma geral é que %d, se qualquer número inteiro positivo a seguir despecificar os componentes à direita para mostrar o caminho atual, zero significa mostrar todo o caminho, inteiro negativo significa o caminho principal a mostrar:

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

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

Portanto, para obter algo semelhante PROMPT_DIRTRIM=3, você pode usar %3dou %3~, por exemplo,

% mkdir -p ~/a/b/c/d
% cd ~/a/b/c/d
% PS1='%n@%m: %3d%% '
user@computer: b/c/d% 
Mikel
fonte
Isso não mostra o "..." como no bash, no entanto.
Elronnd