Cortando strings longas em zsh

Cortando strings longas em zsh

Gostaria de definir meu prompt para algo como %1~ \#, que mostraria o diretório atual, sem o caminho completo (seguido por %ou #). Mas, se o nome do diretório for longo, não quero tudo isso. Como limitaria isso a, digamos, 8 caracteres? Existe algum recurso interno para isso no zsh ou é necessário usar alguma ferramenta externa?

Responder1

Para truncar o nome do diretório, tente:

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

Exemplo: o diretório Wow longdirnameislongagora será exibido no prompt como:

Wow lo.. % 

man 1 zshmiscdiz:

SUBSTRINGS CONDICIONAIS EM PROMPTS

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

Especifica o comportamento de truncamento para o restante da sequência de prompt. A terceira forma, obsoleta, é equivalente a %xstringx, ou seja, x pode ser <ou >. A string será exibida no lugar da parte truncada de qualquer string; observe que isso não sofre expansão imediata.

O argumento numérico, que na terceira forma pode aparecer imediatamente após o [, especifica o comprimento máximo permitido das diversas strings que podem ser exibidas no prompt. Nas duas primeiras formas, este argumento numérico pode ser negativo, caso em que o comprimento do truncamento é determinado subtraindo o valor absoluto do argumento numérico do número de posições de caracteres restantes na linha de prompt atual. Se isso resultar em um comprimento zero ou negativo, um comprimento de 1 será usado. Em outras palavras, um argumento negativo faz com que após o truncamento pelo menos n caracteres permaneçam antes da margem direita (margem esquerda para RPROMPT).

Os formulários com < truncado à esquerda da string e os formulários com >truncado à direita da string. Por exemplo, se o diretório atual for /home/pike, o prompt %8<..<%/será expandido para ..e/pike. Nesta string, o caractere final ( <, >ou ]), ou na verdade qualquer caractere, pode ser citado por um \; observe ao usar print -P, no entanto, que isso deve ser duplicado, pois a string também está sujeita ao processamento de impressão padrão, além de quaisquer barras invertidas removidas por uma string entre aspas duplas: o pior caso é, portanto, print -P "%<\\\\<<...".

Se a string for maior que o comprimento de truncamento especificado, ela aparecerá por completo, substituindo completamente a string truncada.

A parte da string de prompt a ser truncada vai até o final da string, ou até o final do próximo grupo envolvente da %(construção, ou até o próximo truncamento encontrado no mesmo nível de agrupamento (ou seja, truncamentos dentro de a %(são separados), o que vem primeiro. Em particular, um truncamento com argumento zero (por exemplo, %<<) marca o fim do intervalo da string a ser truncada enquanto desativa o truncamento a partir daí. Por exemplo, o prompt %10<...<%~%<<%#imprimirá uma representação truncada do diretório atual, seguida por um %ou #, seguido por um espaço. Sem o %<<, esses dois caracteres seriam incluídos na string a ser truncada. Observe que isso %-0<<não é equivalente, %<<mas especifica que o prompt é truncado na margem direita.

O truncamento se aplica somente dentro de cada linha individual do prompt, conforme delimitado por novas linhas incorporadas (se houver). Se o comprimento total de qualquer linha do prompt após o truncamento for maior que a largura do terminal, ou se a parte a ser truncada contiver novas linhas incorporadas, o comportamento do truncamento será indefinido e poderá mudar em uma versão futura do shell. Use %-n(l.true-text.false-text)para remover partes do prompt quando o espaço disponível for menor que n.

Responder2

Isto é simples!

       %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

informação relacionada