tmux + zsh環境でEmacsキーバインド [ ctrl + a ] や [ctrl + e]が効かない時の対処方法
問題
タイトルの通りです。
会社のMacをBig Surにアップグレードしたところ、なぜかターミナルでの作業でctrl+a(行の先頭に移動)や、ctrl+e(行末に移動)ができなくなってしまいました。これらのキーを押すと^A
や^E
が表示されてしまいます...
bashを使うとこの現象は起こりませんでした。どうやら、tmux + zshの時のみemacsキーバインドが解除されているようでした。
修正
tmuxのセッション中でkeybindを確認すると、Aキーはそのまま入力されるようになっているようでした(self-insert
と書かれていた)。
# tmux中で実行 % bindkey | grep A "^A"-"^C" self-insert
一方、tmuxの外で同じようにkeybindを確認すると、行の先頭に移動するようになっていました。
% bindkey | grep A "^A" beginning-of-line
調べてみると、これはctrl+eなども含め、以下の設定で「emacs風のkeybind」として一括で設定できるらしいので~/.zshrc
に以下のように追記しました。
また注意点として、この記述は.zshrc内の、他のbindkeyコマンドより上に記述する必要があります!
そうしないと、上流で設定したbindkeyコマンドはbindkey -e
で上書きされて無効になってしまうようです。
.zshrc
bindkey -e # emacsのキーバインド
あとは設定を読み込みます。
% source ~/.zshrc
無事、tmuxのセッション内部でもctrl+aで行頭に戻ることができるようになりました!
環境
バージョン | |
---|---|
MacOS Big Sur | 11.1 |
tmux | 3.1c |
zsh | 5.8 (x86_64-apple-darwin20.0) |
参考リンク
本記事を書くにあたり、以下のリンクを参考にさせていただきました。
よく実行するコマンドにキーバインドを割り当てると捗る話 - Qiita
command line - CTRL-a and CTRL-e map incorrectly in tmux - Ask Ubuntu