Como mencionado por outros, o autocomplete do zsh é excelente.
Você pode configurar seu próprio preenchimento automático para comandos personalizados sem muito trabalho. Para tabular os nomes de usuários completos como argumentos para o dedo:
# ~/.zshrc
function userlist {
reply=('users | tr ' ' '\n' |sort -u ');}
compctl -K userlist finger
set COMPLETE_ALIASES
Outras opções que 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 muito ú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 acontece com outras shells, mas você pode consertar 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