zshでコマンドが空の状態でenter押したときに任意のコマンドを実行する方法

背景

.zsh_historyを見たらlsコマンド打ちすぎなことに気がついた

解決案

コマンドライン空でEnter押したらlsしてほしい

解決するコード

alls() {
  zle accept-line
  if [[ -z "$BUFFER" ]]; then
    echo ''
    ls
  fi
}
zle -N alls
bindkey "\C-m" alls

解説

もともとのEnterは、zleのwidgetであるaccept-lineが割り当てられている。
なので、bindkeyで割り当て直して、accept-lineしつつコマンドラインのBUFFERを調べて、空ならlsを実行するようにしている。

その他改善案

  • chpwd hookで、cdのたびにlsされるようにする
  • filerなどを有効活用する
  • alias l=lsとかで満足する