O ponto de RPROMPT
deve estar na mesma linha que o comando digitado. Eu nem tenho certeza se você pode ter uma multilinha RPROMPT
(exceto incluindo alguns comandos de movimento do cursor). Se você quiser um prompt de multilinha com algo à direita das primeiras linhas, inclua isso no prompt da esquerda. A variável COLUMNS
contém a largura do terminal. Aqui está uma maneira de fazer isso, que usa uma função para reconstruir o prompt a cada vez para obter mais controle (não vejo de improviso como preencher a largura do terminal com apenas %
escapes; isso pode ser feito com substituições incorporadas, mas fica difícil de ler ou estender):
setopt prompt_subst
precmd_prompt () {
git_prompt_info=${(r:$((COLUMNS-22)):: :)$(git_prompt_info)}
PROMPT="[%D{%H:%M:%S}] %>>$git_prompt_info %D{%Y-%m-%d}"
PROMPT+=$'\n%n@%m:%/\nyes, zoey? : '
}
precmd_functions+=(precmd_prompt)
-
precmd_functions
é uma matriz de funções que é executada antes de exibir um prompt. - O sinalizador de expansão de parâmetro
r
preenche a string à direita . - A sequência de solicitações
%>>
trunca as informações do git, se for muito muito tempo para caber na linha.
Se você quiser ainda mais controle sobre como o prompt é composto, construa-o a partir de mais partes. Por exemplo, codifiquei a duração e a data acima. Aqui está uma variante que calcula as larguras e blocos ou trunca a parte do meio contendo as informações do git de acordo. Desta vez eu faço o truncamento manualmente para ilustrar como isso pode ser feito. ${(%):-STUFF}
expande as sequências de prompt em STUFF
.
precmd_prompt () {
PS1_1_left=${(%):-'[%D{%H:%M:%S}] '}
PS1_1_right=${(%):-' %D{%Y-%m-%d'}
local middle_width=$((COLUMNS-#PS1_1_left-#PS1_1_right}))
local git_prompt_info=$(git_prompt_info)
if ((#git_prompt_info < middle_width)); then
PS1_1_middle=${(r:$middle_width:: :)git_prompt_info}
else
PS1_1_middle=${git_prompt_info:0:$middle_width}
fi
PROMPT='${PS1_1_left}${PS1_1_middle}${PS1_1_right}'
PROMPT+=$'\n%n@%m:%/\nyes, zoey? : '
}