Fish 4.0.0 アップデートでキー操作が変わった場合の対処法
2025年2月27日にリリースされた fish 4.0.0 では、多くの改良や変更が加えられました。その中でも、キーバインド(キーの割り当て)に関する変更 が行われ、一部のキー操作が以前と異なる動作をするようになっています。この記事では、fish 4.0.0 でのキーバインド変更点と、動作が変わってしまった場合の対処法について解説します。
該当のリリース:
fish 4.0.0 のキーバインドに関する主な変更点
fish 4.0.0 では、キーバインドの仕組みにいくつかの大きな変更が加えられています。
1. 拡張キーボードプロトコルの導入
fish 4.0.0 では、より多くのキーの組み合わせを認識するために XTerm の modifyOtherKeys
プロトコル を利用するようになりました。昔、 Linux では XTerm だけキーバインディングがやや特殊だと思っていたのですが、こういうプロトコルがあったんですね。
これにより、修飾キーの組み合わせをより細かく識別できるようになりましたが、 fish ユーザーとしては以下のような影響がありそうです。
- キーのエンコーディングが変わったため、一部のキー操作が異なる動作をする
- 以前のバージョンで動いていたカスタムキー設定が無効になる場合がある
- 一部のターミナル(cool-retro-term や Emacs の ansi-term など)では、誤ったキーコードが送られる可能性がある
bind
のキー表記方法が変更
2. fish 4.0.0 では、bind
コマンドのキー表記が変更され、一部のケースで古い表記が動作しない可能性があります。新しい表記の方が直感的になったので、ぜひ移行しましょう。
# 以前の表記
bind \e\[1;3C forward-bigword
# 新しい表記
bind alt-right forward-bigword
ただし、ターミナルによってキーコードの扱いが異なるため、fish 3.x で動いていた bind
の設定が fish 4.0.0 では機能しなくなるケースがあるようです。どうしても解決出来ない場合は、以前のエンコーディングを使用するフラグを設定することで回避できるようです。
set -Ua fish_features no-keyboard-protocols
ctrl-c
の動作変更
3. ctrl-c
の動作が変更され、デフォルトでは コマンドラインをクリアする (clear-commandline
) ようになりました。
以前の "^C" を表示する動作 (cancel-commandline
) に戻したい場合は、以下の設定を追加してください。個人的にはこっちの方が分かりやすくて、即設定しました。
bind ctrl-c cancel-commandline
4. その他のキーバインドの追加・削除
fish 3.x まで使えていたキー操作が動作しなくなった場合、自分で再設定することで、以前の動作を復元できます。私の場合、 Alacritty を使っていますが、ctrl-alt-h
で「カーソルの前の単語を削除」が機能しなくなったので、次のように設定しました。
bind ctrl-alt-h backward-kill-word
この設定を追加をすれば、ctrl-alt-h
に backward-kill-word
(単語削除)の動作を割り当てられます。他にも見つけたら追記しようと思います。
まとめ
- fish 4.0.0 では
modifyOtherKeys
の導入などでキーバインドの動作が変わった - 以前のキーバインドを復元したい場合は
bind
コマンドを使って手動設定できる - XTerm の
modifyOtherKeys
が原因の場合は、no-keyboard-protocols
を設定すると解決するかも
Discussion