ryotatake blog

Webエンジニア

fishシェルのvimキーバインドでEsc以外でインサートモードからノーマルモードに変更する

~/.config/fish/functions/fish_user_key_bindings.fishfish_user_key_bindingsに以下のように追記すればOKです。

function fish_user_key_bindings
  ...

  fish_vi_key_bindings --no-erase
  bind -M insert -m default jk force-repaint # 追記  jkでノーマルモードへ
end

やっていること

  • bindコマンドでキーバインドを設定
    • -Mオプションでキーバインドを追加するモードを指定
    • -mオプションでキーが実行された後に変更するモードを指定
    • force-repaintでプロンプトを再描画

今回設定したもので、インサートモードでjkが押されたらノーマルモード(defaultモード)に変更して、プロンプトの再描画を行う、ということになります。プロンプトの再描画を行わないと、プロンプトに現在のモードを表示している場合に表示されているモードが書き変わりません。

詳細はman bindもしくはfish-shellのbindのドキュメントをご確認ください。

ちなみにドキュメントにも書かれていますが~/.config/fish/config.fishの方にカスタムキーバインドの設定を直接書いても動かないのでご注意ください。