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 longdirnameislong
agora será exibido no prompt como:
Wow lo.. %
man 1 zshmisc
diz:
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