読者です 読者をやめる 読者になる 読者になる

pockestrap

Web Programmer's memo

パッケージをインストールした時、zshの補完が更新されない!

### zsh
$ yaourt -S mikutter   # install mikutter
$ miku[TAB]
No matches for ....

mikutterをインストールして起動!しようと思ったら、Tab補完が効かない…みたいなこと、ありますよね。
bashとかだと自動で補完対象に追加されるみたいですけど、zshだとrehashというコマンドを打つか、zshを再起動しないと更新されないみたいです。めんどくさい。
ということで、コマンドラインが空の状態でEnterを押すと勝手にrehashしてくれるようにしました。便利。

### file:.zshrc

# コマンドラインが空の場合、Enterで補完を更新する。
function _rehash()
{
  zle accept-line  # accept-line がデフォルトのEnterに割り当てられている
  if [[ -z "$BUFFER" ]]; then
    rehash
  fi
}
zle -N _rehash
bindkey "\C-m" _rehash

これを.zshrcに追記してやると、Enterを押すだけで補完対象にインストールしたパッケージが入るようになります。

$ yaourt -S mikutter    # install mikutter
$ miku[TAB]
No matches for ....
$                       # 空のコマンドラインでEnter
$ miku[TAB]
$ mikutter

補完されます!快適ですね。


ちなみに、この.zshrcはGithubで公開しています。
https://github.com/pocke/dotfile