Você pode encerrar truncamentos - como em "truncar somente até aqui" - com %>> ou %<< :
PROMPT="[%n%20>...>%m%>> %1~]%(#.#.$) "
Aqui está a parte relevante do manual do ZSH :
The part of the prompt string to be truncated runs to the end of the string, or to the end of the next enclosing group of the
'%('construct, or to the next truncation encountered at the same grouping level (i.e. truncations inside a'%('are separate), which ever comes first. In particular, a truncation with argument zero (e.g.,'%<<') marks the end of the range of the string to be truncated while turning off truncation from there on. For example, the prompt'%10<...<%~%<<%# 'will print a truncated representation of the current directory, followed by a'%'or'#', followed by a space. Without the'%<<', those two characters would be included in the string to be truncated.