Fazê-lo em preexec
seria tarde demais. Por esse tempo, o código já foi analisado. Se você modificá-lo, ele precisaria ser analisado novamente (e possivelmente, zsh
precisaria solicitar mais linhas para concluir o código).
Possivelmente aqui você pode fazer isso no widget accept-line
, logo antes do editor de linha alimentar a linha para o analisador de shell:
accept-line() {
emulate -L zsh # default zsh behaviour locally
set -o extendedglob # with extendedglob for ## (= ERE +) below
BUFFER=${BUFFER##[[:blank:]]##} # remove leading blanks
# remove blanks after newlines in case a multiline buffer is accepted
# for instance after a safe-paste or a newline entered with <Alt+Ret>
BUFFER=${BUFFER//$'\n'[[:blank:]]##/$'\n'}
# call original accept-line
zle .$WIDGET
}
zle -N accept-line