Emacs使いのためのzsh設定

こんにちは、hnwです。今日はEmacsユーザー向けのzshの設定について紹介します。

私はかれこれ8年くらいbashを使っていました。これまでzshユーザーから「zsh便利だよ?zsh使いなよ」と言われて試しに起動してみたことはあるのですが、コマンドライン編集の細かい動きが違うのが気になってすぐbashに戻していました。

zshがbashと何が違うかというと、M-f(カーソルを1単語進める)の挙動です。bashもzshもデフォルトではEmacsライクな動作ということになっていますが、zshはEmacsと微妙に動作が違っているのです。bash(やそれ以前に使っていたtcsh)ではそんな違和感を覚えたことは無いのですが、zshはその点が少しイライラしました。私以外でも、重度にEmacsに毒されている人なら気になって仕方がないんじゃないかと思います。具体的には下図のような挙動の違いがあります。

bash-zsh-meta-f.png

まず、EmacsやbashではM-fで今の単語(または単語上にカーソルが無ければ次の単語)の最後にカーソル移動するのですが、zshでは次の単語の先頭に移動します。これが少し違和感があります。

更に、zshが単語の境界と判断する場所がEmacsとは異なっています。zshは「_」をはじめ、多くの記号を単語の一部とみなします。図で言うと、3回目のM-fで「_」を単語の境界とみなすかどうかの差により、移動先が大きくズレているのがわかります。

コマンドラインの編集という目的を考えるとzshの挙動は悪くないと思うのですが、私はEmacs病が重病すぎるので、少しでもEmacsと違う動きをすると「ムキー!」となって使えないのです。そこで、zshをbashやEmacsと同じ挙動にする方法を調べてみました。

### キー操作
# おおむねEmacsっぽく
bindkey -e
# M-f/M-bの挙動をEmacsのそれに合わせる(実はM-bは元々同じだけど一応)
bindkey "^[f" emacs-forward-word
bindkey "^[b" emacs-backward-word
# M-f/M-b/M-dなどでの単語境界の基準をEmacsライクに
export WORDCHARS=""

これを.zshrcに書けばOKです。まだ使い込んでいませんけど、とりあえずキーバインドに関する不満はなくなりました。同じ悩みがあってzshを敬遠していた方は試してみてはいかがでしょうか。

参考資料

コメント / トラックバックはありません

コメントする