Como mencionado por outros, o preenchimento automático do zsh é excelente.
Você pode configurar seu próprio preenchimento automático para comandos personalizados sem muito trabalho também. Para tabular nomes de usuário completos como argumentos a serem digitados:
# ~/.zshrc
function userlist {
reply=(`users | tr ' ' '\n' |sort -u `);}
compctl -K userlist finger
set COMPLETE_ALIASES
Outras opções que eu gosto de definir:
# turn on spelling correction
setopt correct
# don't save duplicates in command history
setopt histignoredups
# don't allow accidental file over-writes
setopt noclobber
Pushd e popd também são bastante úteis.
# Always pushd when changing directory
setopt auto_pushd
# Have pushd with no arguments act like `pushd $HOME'.
setopt PUSHD_TO_HOME
Irritantemente, as teclas home e end não funcionam por padrão no zsh, como em outros shells, mas você pode corrigir isso.
# Make home and end keys work.
[[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line