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

zsh で C-w とか Meta-F/B/Backspace とかで単語区切りで動作するときの区切り方を調節する

たとえば,

% cat /etc/path/to/some/app/config

とかいうコマンドを打った時,パスの真ん中らへんが微妙に間違ってたりすると,そこまで移動して修正するのはとても面倒です.

そこで,(bindkey -e して emacs ライクなキーバインドのとき) C-w で単語ごとに削除したりとか,(Alt/Meta)-F/B/Backspace で移動・削除したりすると捗るのですが,標準だと / でつながってる文字列はそれ全部で1単語だと認識されてしまいます.たとえば,上記のコマンドの行末で Meta-Backspace すると,パスを全部消してしまいます.

これはさすがにつらいので,/ も単語の区切りであるというふうに設定をしましょうという話です.

やり方は,.zshrc に,

export WORDCHARS="*?_-.[]~&;=!#$%^(){}<>"

と追記するだけです.

この環境変数 WORDCHARS に記号や文字を追加すると,単語の区切りの対象からその文字が外れます.言い換えれば,$WORDCHARS にある文字は単語区切りの際に無視されるということです.標準の状態では,この中に / が入ってしまっているため (少なくとも zsh 5.0.2 @ Arch Linux x86_64 では),前述の通り少し面倒なことになってしまいます.

/ の他にも,単語の区切りとしたい文字が WORDCHARS の中にあれば,それを取り除けばよいでしょう.