qtatsuの週報

初心者ですわぁ

tmux + zsh環境でEmacsキーバインド [ ctrl + a ] や [ctrl + e]が効かない時の対処方法

問題

タイトルの通りです。 会社のMacをBig Surにアップグレードしたところ、なぜかターミナルでの作業でctrl+a(行の先頭に移動)や、ctrl+e(行末に移動)ができなくなってしまいました。これらのキーを押すと^A^Eが表示されてしまいます...

bashを使うとこの現象は起こりませんでした。どうやら、tmux + zshの時のみemacsキーバインドが解除されているようでした。

f:id:Qtatsu:20210129200733g:plain

修正

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で行頭に戻ることができるようになりました!

f:id:Qtatsu:20210129201841g:plain

環境

バージョン
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