🐟

Fish 4.0.0 アップデートでキー操作が変わった場合の対処法

2025/03/01に公開

2025年2月27日にリリースされた fish 4.0.0 では、多くの改良や変更が加えられました。その中でも、キーバインド(キーの割り当て)に関する変更 が行われ、一部のキー操作が以前と異なる動作をするようになっています。この記事では、fish 4.0.0 でのキーバインド変更点と、動作が変わってしまった場合の対処法について解説します。

該当のリリース:

https://github.com/fish-shell/fish-shell/releases/tag/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 など)では、誤ったキーコードが送られる可能性がある

2. bind のキー表記方法が変更

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

3. ctrl-c の動作変更

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-hbackward-kill-word(単語削除)の動作を割り当てられます。他にも見つけたら追記しようと思います。

まとめ

  • fish 4.0.0 では modifyOtherKeys の導入などでキーバインドの動作が変わった
  • 以前のキーバインドを復元したい場合は bind コマンドを使って手動設定できる
  • XTerm の modifyOtherKeys が原因の場合は、no-keyboard-protocols を設定すると解決するかも

Discussion