はじめに
VSCodeを使うにあたり、デフォルトのキーバインドでは使いにくい部分があったため、自分好みにカスタマイズしています。 特に筆者の場合 VSCodeVim 拡張機能を導入している & ターミナルでVimを多用するため、Vimのキーバインドと競合しないよう注意した点があります。
この記事では、自分のキーバインド設定を紹介するとともに、各設定の意図や背景を説明します。
Vimとの競合について
Vimでは Ctrl+B でページ上スクロール、Ctrl+F でページ下スクロール、Ctrl+V でビジュアルブロックモード、Ctrl+I でジャンプリストの次の位置へ移動など、さまざまな操作が Ctrl キーと組み合わせたショートカットに割り当てられています。
| キー | Vimでの役割 |
|---|---|
Ctrl+B | 1ページ上スクロール(Page Up) |
Ctrl+F | 1ページ下スクロール(Page Down) |
Ctrl+V | ビジュアルブロックモード |
Ctrl+I | ジャンプリストで新しい方向へ移動 |
Ctrl+P | 補完候補の前の項目へ移動 |
Ctrl+N | 補完候補の次の項目へ移動 |
これらはVSCodeのデフォルトショートカットにも割り当てられているため、そのままではVimの操作と干渉してしまいます。今回はVSCode側のキーバインドを変更することで対処しています。
ターミナル操作: Ctrl+T プレフィックス
ターミナル関連の操作を Ctrl+T をプレフィックスとしたシーケンスキーにまとめています。
| キー | コマンド | 説明 |
|---|---|---|
Ctrl+T Ctrl+T | terminal.toggleTerminal | ターミナルパネルの表示/非表示切り替え |
Ctrl+T N | terminal.new | 新しいターミナルを作成 |
Ctrl+T M | toggleMaximizedPanel | ターミナルパネルを最大化/元に戻す |
Ctrl+T C | workbench.action.terminal.kill | 現在のターミナルを閉じる |
ターミナルをよく使うため、これらを簡単に呼び出せるようにしています。
次のターミナルへ移動
{
"key": "ctrl+shift+n",
"command": "workbench.action.terminal.focusNext",
"when": "terminalFocus && terminalHasBeenCreated && !terminalEditorFocus || terminalFocus && terminalProcessSupported && !terminalEditorFocus"
},
ターミナルにフォーカスがある状態で Ctrl+Shift+N を押すと、次のターミナルに移動します。 Ctrl+Shift+N はデフォルトで「新規ウィンドウを開く」に割り当てられていましたが、あまり使わないためfalse 条件で無効化した上で再割り当てしてしまっています。あまり使わないコマンドはCtrl+Shift+Pのコマンドパレットから呼び出すようにしています。
QuickPickのVimライクなナビゲーション
コマンドパレットやファイル検索(QuickPick)を開いたときの選択肢の移動を、Vimの補完ナビゲーションに合わせています。
| キー | コマンド | 説明 |
|---|---|---|
Ctrl+N | quickInput.next | 次の候補を選択(デフォルト: Ctrl+↓) |
Ctrl+P | quickInput.previous | 前の候補を選択(デフォルト: Ctrl+↑) |
Vimの補完ウィンドウと同じ Ctrl+N / Ctrl+P で候補を上下できるため、エディタとターミナル・QuickPickの間で指の動きが統一されます。
なお、Ctrl+P で「ファイルをすぐ開く(Quick Open)」を起動するデフォルト動作は when: false で無効化しています。これはVimの Ctrl+P と干渉するためです。
サイドバーのトグル
{
"key": "ctrl+shift+b",
"command": "workbench.action.toggleSidebarVisibility"
}
サイドバーの表示切り替えを Ctrl+Shift+B に変更しています。デフォルトの Ctrl+B はVimの「ページ上スクロール」と競合するためです。
AI・Copilot関連
| キー | コマンド | 説明 |
|---|---|---|
Ctrl+Shift+I | workbench.panel.chat | Copilotチャットパネルを開く |
Ctrl+Shift+L | terminal.chat.start | ターミナル内でCopilotチャットを開始 |
Ctrl+Enter | chat.submit | チャットのメッセージを送信 |
Copilotチャットのパネルを開くデフォルトキーは Ctrl+Alt+I でしたが、押しにくいため Ctrl+Shift+I に変更しています。
ターミナルへのCopilotチャット開始は元々 Ctrl+I でしたが、VimのジャンプリストナビゲーションであるCtrl+I と競合するため Ctrl+Shift+L に変更しています。
チャットの送信は Enter ではなく Ctrl+Enter にしています。これにより、入力中に誤って送信してしまうミスを防げます。
ターミナル内の検索
{
"key": "ctrl+shift+f",
"command": "workbench.action.terminal.focusFind",
"when": "terminalFindFocused && terminalHasBeenCreated || terminalFindFocused && terminalProcessSupported || terminalFocusInAny && terminalHasBeenCreated || terminalFocusInAny && terminalProcessSupported"
}
ターミナル内の文字列検索を Ctrl+Shift+F で起動するよう変更しています。デフォルトの Ctrl+F はVimの「ページ下スクロール」と競合するためです。
無効化したデフォルトショートカット
Vimのキーバインドと干渉するため、以下のデフォルトショートカットを when: false で無効化しています。
| キー | 無効化したコマンド | 理由 |
|---|---|---|
Ctrl+V | ターミナルへのペースト | Vimのビジュアルブロックモードと競合 |
Ctrl+G | ターミナルの最近使ったディレクトリへ移動 | Zshに割り当てているコマンドと競合するため |
Ctrl+Space | ターミナルのサジェスト操作 | Zshの補完操作と競合するため |
Ctrl+I | ターミナルのサジェスト操作 | VimのジャンプリストCtrl+Iと競合 |
特にターミナルのサジェスト機能は筆者のZshの設定上ノイズになるため無効化しています。
まとめ
主なカスタマイズの方針は以下の通りです。
- ターミナル操作は
Ctrl+Tプレフィックスに集約 — Vimに干渉しないプレフィックスキーを使い、関連操作をまとめる - VimキーバインドはVSCode側で無効化 —
Ctrl+B、Ctrl+F、Ctrl+V、Ctrl+IなどをVSCode側で無効化 - QuickPickのナビゲーションをVim風に —
Ctrl+N/Ctrl+Pで上下移動できるように統一 - Copilot操作は
Ctrl+Shift+I/Ctrl+Shift+L— デフォルトより押しやすく、Vimと干渉しないキーへ変更
VSCodeのショートカットキーバインドはアップデートで追加・変更されることもあるため、定期的に見直していきたいと思います。


コメント