Recortar cadenas largas en zsh

Recortar cadenas largas en zsh

Me gustaría configurar mi mensaje en algo como %1~ \#, que mostraría el directorio actual, sin la ruta completa (seguida de %o #). Pero, si el nombre del directorio es largo, no lo quiero todo. ¿Cómo lo limitaría a, digamos, 8 caracteres? ¿Existe alguna función incorporada para esto en zsh o es necesario utilizar alguna herramienta externa?

Respuesta1

Para truncar el nombre del directorio, intente:

PS1='%8>..>%1~%<< %# '

Ejemplo: el directorio Wow longdirnameislongahora se mostrará en el mensaje como:

Wow lo.. % 

man 1 zshmiscdice:

SUBCADENAS CONDICIONALES EN INDICACIONES

%<string< %>string> %[xstring]

Especifica el comportamiento de truncamiento para el resto de la cadena de solicitud. La tercera forma, en desuso, es equivalente a %xstringx, es decir, x puede ser <o >. La cadena se mostrará en lugar de la parte truncada de cualquier cadena; tenga en cuenta que esto no sufre una expansión rápida.

El argumento numérico, que en la tercera forma puede aparecer inmediatamente después de [, especifica la longitud máxima permitida de las distintas cadenas que se pueden mostrar en el mensaje. En las dos primeras formas, este argumento numérico puede ser negativo, en cuyo caso la longitud del truncamiento se determina restando el valor absoluto del argumento numérico del número de posiciones de caracteres que quedan en la línea de solicitud actual. Si esto da como resultado una longitud cero o negativa, se utiliza una longitud de 1. En otras palabras, un argumento negativo hace que después del truncamiento queden al menos n caracteres antes del margen derecho (margen izquierdo para RPROMPT).

Los formularios con < truncamiento a la izquierda de la cadena y los formularios con >truncamiento a la derecha de la cadena. Por ejemplo, si el directorio actual es /home/pike, el mensaje %8<..<%/se expandirá a ..e/pike. En esta cadena, el carácter final ( <, >o ]), o de hecho cualquier carácter, puede ir entre comillas delante de un \; Sin embargo, tenga en cuenta que cuando use print -P, esto debe duplicarse ya que la cadena también está sujeta al procesamiento de impresión estándar, además de cualquier barra invertida eliminada por una cadena entre comillas dobles: el peor de los casos es, por lo tanto print -P "%<\\\\<<...", .

Si la cadena es más larga que la longitud de truncamiento especificada, aparecerá completa, reemplazando por completo la cadena truncada.

La parte de la cadena de solicitud que se va a truncar va hasta el final de la cadena, o hasta el final del siguiente grupo adjunto de la %(construcción, o hasta el siguiente truncamiento encontrado en el mismo nivel de agrupación (es decir, los truncamientos dentro de a %(están separados), lo que sea que venga primero. En particular, un truncamiento con argumento cero (por ejemplo, %<<) marca el final del rango de la cadena que se va a truncar y, a partir de ahí, desactiva el truncamiento. Por ejemplo, el mensaje %10<...<%~%<<%#imprimirá una representación truncada del directorio actual, seguida de %o #seguido de un espacio. Sin %<<, esos dos caracteres se incluirían en la cadena que se va a truncar. Tenga en cuenta que %-0<<no es equivalente, %<<pero especifica que el mensaje se trunca en el margen derecho.

El truncamiento se aplica solo dentro de cada línea individual del mensaje, según lo delimitado por nuevas líneas incrustadas (si las hay). Si la longitud total de cualquier línea del mensaje después del truncamiento es mayor que el ancho del terminal, o si la parte que se va a truncar contiene nuevas líneas incrustadas, el comportamiento de truncamiento no está definido y puede cambiar en una versión futura del shell. Úselo %-n(l.true-text.false-text)para eliminar partes del mensaje cuando el espacio disponible sea menor que n.

Respuesta2

¡Esto es simple!

       %d
       %/     Current working directory.  If an integer follows the `%', it spec‐
              ifies a number of trailing components of the current working direc‐
              tory to show; zero means the whole path.  A negative integer speci‐
              fies leading components, i.e. %-1d specifies the first component.

       %~     As %d and %/, but if the  current  working  directory  starts  with
              $HOME,  that  part  is  replaced by a `~'. Furthermore, if it has a
              named directory as its prefix, that part is replaced by a `~'  fol‐
              lowed  by  the  name  of  the  directory, but only if the result is
              shorter than the full path; see Dynamic and Static  named  directo‐
              ries in zshexpn(1).

©man zshmisc

información relacionada