Acortar ruta en zsh prompt

18

Bashtiene la PROMPT_DIRTRIMopción, por ejemplo, cuando configuro PROMPT_DIRTRIM=3, luego un camino largo como:

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

se mostraría en su lugar como:

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

¿Existe una opción similar para zsh?

pfnuesel
fuente

Respuestas:

22

Para obtener un efecto similar bash, que incluye el ..., intente:

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

Esto verifica si la ruta tiene al menos 4 elementos de largo ( %(4~|true|false)) y, si es verdadero, imprime algunos puntos con los últimos 3 elementos ( .../%3~), de lo contrario se imprime la ruta completa %~.


Noté que bashparece acortar las rutas en el directorio de inicio de manera diferente, por ejemplo:

~/.../some/long/path

Para un efecto similar, es posible que desee utilizar:

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

Esto comprueba si la ruta es más larga que 5 elementos, y en ese caso imprime el primer elemento ( %-1~), algunos puntos ( /…/) y los últimos 3 elementos. No es exactamente lo mismo que las rutas, que no están en su directorio de inicio, también tendrán el primer elemento al principio, mientras que bashsolo imprime puntos en ese caso. Entonces

/this/…/some/silly/path

en lugar de

.../some/silly/path

Pero esto podría no ser necesariamente algo malo.

Adaephon
fuente
1
Me gusta más la primera versión, pero tenga en cuenta que se muestra ~/a/bcomo en .../a/blugar de ~/a/b. Para arreglar eso, puedes usar %(5~|…/%3~|%~).
momar
Para aquellos nuevos en zsh (como yo), desea utilizar esta sintaxis con la PROMPTvariable de entorno en su .zprofile, por ejemplo:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Ryan H.
1
@RyanH. Gracias, al leer mi respuesta nuevamente, me doy cuenta de que nunca mencioné dónde deben realizarse estos ajustes. Tendré que arreglar eso. Dos pequeñas cosas sobre su comentario: la configuración para las sesiones de shell interactivas debe realizarse .zshrcy realmente no hay necesidad de exportningún parámetro interno de shell como PROMPT.
Adaephon
@Adaephon Gracias por la información. Lo arreglaré! :)
Ryan H.
8

Además de las otras respuestas dadas aquí, también puede usar %<para truncar la ruta a un número dado de caracteres . Considero que es preferible usarlo %<n>d, ya que los elementos de ruta individuales obviamente pueden ser bastante largos en sí mismos. El uso %<produce una longitud máxima de aviso mucho más predecible.

Por ejemplo, para truncar a la izquierda el elemento de ruta con tilde expansion ( %~) a 15 caracteres, reemplazando los caracteres eliminados por .., puede hacer algo como esto:

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

Esto está documentado en el manual de Zsh en Expansión rápida , justo al final de la página.

wjv
fuente
4

Puede usar %3d la expansión rápida :

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

La forma general es %d, si cualquier entero positivo siguiente despecifica los componentes finales para mostrar la ruta actual, cero significa mostrar la ruta completa, entero negativo significa la ruta principal para mostrar:

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

Ver 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 ‘~’.

Entonces, para obtener algo similar PROMPT_DIRTRIM=3, podría usar %3do %3~, por ejemplo,

% mkdir -p ~/a/b/c/d
% cd ~/a/b/c/d
% PS1='%n@%m: %3d%% '
user@computer: b/c/d% 
Mikel
fuente
Sin embargo, esto no mostrará el "..." como en bash.
Elronnd