Visual Studio Code のキーボードショートカット
Visual Studio Code では、ほとんどのタスクをキーボードから直接実行できます。この記事では、VS Code に付属するデフォルトのキーボードショートカットを変更する方法を説明します。
このページを Mac で閲覧している場合は Mac 用のキーボードショートカットが表示されます。Windows または Linux で閲覧している場合は、そのプラットフォームのキーが表示されます。他のプラットフォームのキーボードショートカットが必要な場合は、興味のあるキーの上にマウスを合わせると確認できます。
キーボード ショートカット エディター
VS Code は、「キーボードショートカット」エディターによる豊富なキーボードショートカット編集機能を提供します。このエディターには、キーボードショートカットの有無にかかわらず、利用可能なすべてのコマンドが一覧表示され、利用可能なアクションを使用してそれらのキーボードショートカットの変更、削除、リセットを行うことができます。コマンドやキーボードショートカットを見つけるには、検索ボックスを使用してコマンドまたはショートカットを入力し、リストを絞り込みます。
キーボードショートカットエディターを開くには、ファイル > ユーザー設定 > キーボードショートカット メニューを選択するか、コマンドパレットで 基本設定: キーボードショートカットを開く コマンド (⌘K ⌘S (Windows, Linux Ctrl+K Ctrl+S)) を使用します。キーボードショートカットエディターは、デフォルトでエディター領域の上にモーダルオーバーレイとして開きます。

キーボードショートカットは、現在のキーボードレイアウトと一致します。たとえば、米国キーボードレイアウトのキーボードショートカット Cmd+\ は、レイアウトがドイツ語に変更されると Ctrl+Shift+Alt+Cmd+7 として表示されます。キーボードショートカットを変更するダイアログでは、キーボードレイアウトに従って正しく目的のキーボードショートカットを割り当てることができます。
UI アクションのショートカットをカスタマイズする
UI アクションのキーボードショートカットをカスタマイズするには、ワークベンチ内の任意のアクション項目を右クリックし、キーバインドの構成 を選択します。これにより、対応するコマンドで絞り込まれたキーボードショートカットエディターが開きます。アクションに when 句がある場合は自動的に含まれるため、必要な方法でキーボードショートカットを簡単に設定できます。
キーマップ拡張機能
キーマップ拡張機能は、VS Code のショートカットを他のエディターのものに合わせて変更するため、新しいキーボードショートカットを学習する必要はありません。
ファイル > ユーザー設定 > キーボードショートカットの移行... メニューを選択すると、一般的なキーマップ拡張機能のリストが表示されます。Marketplace には、拡張機能のキーマップカテゴリもあります。
キーボードショートカットのリファレンス
デフォルトのキーボードショートカットの印刷可能なバージョンを用意しています。ヘルプ > キーボードショートカットのリファレンス を選択すると、簡単に参照できるように印刷に適した圧縮された PDF バージョンが表示されます。
以下のリンクから、3 つのプラットフォーム固有のバージョン (米国英語キーボード) にアクセスできます。
キーボードショートカットの競合を検出する
多数の拡張機能がインストールされている場合や、キーボードショートカットを変更した場合は、キーボードショートカットが競合し、同じキーボードショートカットが複数のコマンドに割り当てられることがあります。これにより、特にエディター内を移動する際に異なるキーボードショートカットが有効になったり無効になったりする場合、混乱を招く動作が発生する可能性があります。
キーボードショートカットのリスト内の項目を右クリックし、同じキーバインドを表示 を選択すると、同じキーボードショートカットを持つすべてのエントリが表示されます。

キーボードショートカットのトラブルシューティング
キーボードショートカットの問題をトラブルシューティングするには、開発者: キーボードショートカットのトラブルシューティングの切り替え コマンドを実行します。これにより、ディスパッチされたキーボードショートカットのログ記録がアクティブ化され、対応するログファイルを含む出力パネルが開きます。
その後、目的のキーボードショートカットを押すと、VS Code がどのキーボードショートカットを検出し、どのコマンドが呼び出されたかを確認できます。
たとえば、macOS のコードエディターで cmd+/ を押すと、ログ出力は次のようになります。
[KeybindingService]: / Received keydown event - modifiers: [meta], code: MetaLeft, keyCode: 91, key: Meta
[KeybindingService]: | Converted keydown event - modifiers: [meta], code: MetaLeft, keyCode: 57 ('Meta')
[KeybindingService]: \ Keyboard event cannot be dispatched.
[KeybindingService]: / Received keydown event - modifiers: [meta], code: Slash, keyCode: 191, key: /
[KeybindingService]: | Converted keydown event - modifiers: [meta], code: Slash, keyCode: 85 ('/')
[KeybindingService]: | Resolving meta+[Slash]
[KeybindingService]: \ From 2 keybinding entries, matched editor.action.commentLine, when: editorTextFocus && !editorReadonly, source: built-in.
ログの例では、最初のキーダウンイベントは MetaLeft キー (cmd) であり、ディスパッチできません。2 番目のキーダウンイベントは Slash キー (/) であり、meta+[Slash] としてディスパッチされます。meta+[Slash] からマッピングされたキーボードショートカットエントリは 2 つあり、一致したものは when 条件 editorTextFocus && !editorReadonly を持つ組み込みのキーボードショートカットエントリである editor.action.commentLine コマンド用でした。
変更されたキーボードショートカットを表示する
変更したショートカットのみを表示するようにリストをフィルタリングするには、その他アクション (...) メニューの ユーザーのキーバインドを表示 コマンドを選択します。これにより、@source:user フィルターが キーボードショートカット エディターに適用されます (ソース は「ユーザー」)。

高度なカスタマイズ
VS Code は、keybindings.json ファイル内でカスタマイズしたキーボードショートカットを追跡します。高度なカスタマイズを行う場合は、keybindings.json ファイルを直接変更することもできます。
keybindings.json ファイルを開くには:
-
キーボードショートカット エディターを開き、エディタータイトルバーの右側にある キーボードショートカット (JSON) を開く ボタンを選択します。

-
または、コマンドパレットで デフォルトのキーボードショートカット (JSON) を開く コマンド (⇧⌘P (Windows, Linux Ctrl+Shift+P)) を使用します。
キーボードルール
VS Code のキーボードショートカット構成は、キーボードルール とも呼ばれます。各ルールは次の属性で構成されます。
key: 押されたキーを記述します (例: ⌘F (Windows, Linux Ctrl+F))。command: 実行する VS Code コマンドの識別子です (例: エクスプローラービューを開くためのworkbench.view.explorer)。when: (オプション) 現在のコンテキストに応じて評価されるブール式を含む句。
コード (2 つの別々のキー押下アクション) は、2 つのキー押下の間にスペースを挟んで記述されます。例: Ctrl+K Ctrl+C。
キーが押されると、次の評価ルールが適用されます。
- ルールは 下 から 上 に向かって評価されます。
keyとwhen句の両方に一致する最初のルールが受け入れられます。- ルールが見つかった場合、それ以上のルールは処理されません。
- ルールが見つかり、
commandが設定されている場合、そのcommandが実行されます。
追加の keybindings.json ルールは、実行時にデフォルトルールの最後に追加されるため、デフォルトルールを上書きできます。keybindings.json ファイルは VS Code によって監視されるため、VS Code の実行中に編集すると、ルールが実行時に更新されます。
キーボードショートカットのディスパッチは、JSON で表現されたルールリストを分析することで行われます。例をいくつか挙げます。
// Keyboard shortcuts that are active when the focus is in the editor
{ "key": "home", "command": "cursorHome", "when": "editorTextFocus" },
{ "key": "shift+home", "command": "cursorHomeSelect", "when": "editorTextFocus" },
// Keyboard shortcuts that are complementary
{ "key": "f5", "command": "workbench.action.debug.continue", "when": "inDebugMode" },
{ "key": "f5", "command": "workbench.action.debug.start", "when": "!inDebugMode" },
// Global keyboard shortcuts
{ "key": "ctrl+f", "command": "actions.find" },
{ "key": "alt+left", "command": "workbench.action.navigateBack" },
{ "key": "alt+right", "command": "workbench.action.navigateForward" },
// Global keyboard shortcuts using chords (two separate keypress actions)
{ "key": "ctrl+k enter", "command": "workbench.action.keepEditor" },
{ "key": "ctrl+k ctrl+w", "command": "workbench.action.closeAllEditors" },
受け入れられるキー
key は修飾キーとキー自体で構成されます。
以下の修飾キーが受け入れられます。
| プラットフォーム | 修飾キー |
|---|---|
| macOS | Ctrl+, Shift+, Alt+, Cmd+ |
| Windows | Ctrl+, Shift+, Alt+, Win+ |
| Linux | Ctrl+, Shift+, Alt+, Meta+ |
以下のキーが受け入れられます。
- f1-f19, a-z, 0-9
- `, -, =, [, ], \, ;, ', ,, ., /
- left, up, right, down, pageup, pagedown, end, home
- tab, enter, escape, space, backspace, delete
- pausebreak, capslock, insert
- numpad0-numpad9, numpad_multiply, numpad_add, numpad_separator
- numpad_subtract, numpad_decimal, numpad_divide
コマンド引数
引数を指定してコマンドを呼び出すことができます。これは、特定のファイルやフォルダーに対して同じ操作を頻繁に行う場合に便利です。カスタムキーボードショートカットを追加して、正確にやりたいことを実行できます。
Enter キーを上書きしてテキストを出力する例を以下に示します。
{
"key": "enter",
"command": "type",
"args": { "text": "Hello World" },
"when": "editorTextFocus"
}
type コマンドは最初の引数として {"text": "Hello World"} を受け取り、デフォルトのコマンドを生成する代わりにファイルに "Hello World" を追加します。
引数を取るコマンドの詳細については、組み込みコマンドを参照してください。
複数のコマンドを実行する
キーボードショートカットを構成して、runCommands コマンドを使用して複数のコマンドを順番に実行するように設定できます。
-
引数なしで複数のコマンドを実行する
次の例では、現在の行を下にコピーし、現在の行をコメントとしてマークし、カーソルをコピーした行に移動します。
{ "key": "ctrl+alt+c", "command": "runCommands", "args": { "commands": [ "editor.action.copyLinesDownAction", "cursorUp", "editor.action.addCommentLine", "cursorDown" ] } }, -
コマンドに引数を渡すには
この例では、新しい無題の TypeScript ファイルを作成し、カスタムスニペットを挿入します。
{ "key": "ctrl+n", "command": "runCommands", "args": { "commands": [ { "command": "workbench.action.files.newUntitledFile", "args": { "languageId": "typescript" } }, { "command": "editor.action.insertSnippet", "args": { "langId": "typescript", "snippet": "class ${1:ClassName} {\n\tconstructor() {\n\t\t$0\n\t}\n}" } } ] } },
runCommands によって実行されるコマンドは、最初の引数として "args" の値を受け取ることに注意してください。前の例では、workbench.action.files.newUntitledFile が最初の唯一の引数として {"languageId": "typescript" } を受け取ります。
複数の引数を渡すには、"args" を配列にする必要があります。
{
"key": "ctrl+shift+e",
"command": "runCommands",
"args": {
"commands": [
{
// command invoked with 2 arguments: vscode.executeCommand("myCommand", "arg1", "arg2")
"command": "myCommand",
"args": ["arg1", "arg2"]
}
]
}
}
配列を最初の引数として渡すには、配列を別の配列でラップします: "args": [ [1, 2, 3] ]。
キーボードショートカットを削除する
キーボードショートカットを削除するには、キーボードショートカットエディターでエントリを右クリックし、キーバインドを削除 を選択します。
keybindings.json ファイルを使用してキーボードショートカットを削除するには、command に - を追加すると、そのルールは削除ルールになります。
例を以下に示します。
// In Default Keyboard Shortcuts
...
{ "key": "tab", "command": "tab", "when": ... },
{ "key": "tab", "command": "jumpToNextSnippetPlaceholder", "when": ... },
{ "key": "tab", "command": "acceptSelectedSuggestion", "when": ... },
...
// To remove the second rule, for example, add in keybindings.json:
{ "key": "tab", "command": "-jumpToNextSnippetPlaceholder" }
空のアクションで特定のキーボードショートカットルールを上書きするには、空のコマンドを指定できます。
// To override and disable any `tab` keyboard shortcut, for example, add in keybindings.json:
{ "key": "tab", "command": "" }
キーボードレイアウト
このセクションはキーボードショートカットのみに関連しており、エディターでの入力には関係ありません。
キーは仮想キーの文字列表現であり、押されたときに生成される文字と必ずしも一致しません。より正確には次の通りです。
- リファレンス: 仮想キーコード (Windows)
- tab (
VK_TAB,0x09) - ; (
VK_OEM_1,0xBA) - = (
VK_OEM_PLUS,0xBB) - , (
VK_OEM_COMMA,0xBC) - - (
VK_OEM_MINUS,0xBD) - . (
VK_OEM_PERIOD,0xBE) - / (
VK_OEM_2,0xBF) - ` (
VK_OEM_3,0xC0) - [ (
VK_OEM_4,0xDB) - \ (
VK_OEM_5,0xDC) - ] (
VK_OEM_6,0xDD) - ' (
VK_OEM_7,0xDE) - など。
異なるキーボードレイアウトでは、通常、これらの仮想キーの位置が変更されたり、押されたときに生成される文字が変更されたりします。標準の米国以外のキーボードレイアウトを使用する場合、Visual Studio Code は以下の動作を行います。
すべてのキーボードショートカットは、現在のシステムのキーボードレイアウトを使用して UI にレンダリングされます。たとえば、フランス語 (フランス) キーボードレイアウトを使用している場合の Split Editor は、現在 Ctrl+* としてレンダリングされます。

keybindings.json を編集する場合、VS Code は誤解を招くキーボードショートカットを強調表示します。これらは、標準の米国キーボードレイアウトで生成される文字でファイル内に表現されていますが、現在のシステムのキーボードレイアウトでは異なるラベルが付いたキーを押す必要があります。たとえば、フランス語 (フランス) キーボードレイアウトを使用している場合のデフォルトのキーボードショートカットルールは次のようになります。

また、keybindings.json を編集する際にキーボードショートカットルールの入力を支援する UI コントロールもあります。キーバインドの定義 コントロールを起動するには、⌘K ⌘K (Windows, Linux Ctrl+K Ctrl+K) を押します。コントロールはキー入力を待ち受け、シリアル化された JSON 表現をテキストボックスにレンダリングし、その下に現在のキーボードレイアウトで VS Code が検出したキーを表示します。目的のキーの組み合わせを入力したら、Enter を押すとルールスニペットが挿入されます。

Linux では、VS Code は起動時に現在のキーボードレイアウトを検出し、この情報をキャッシュします。キーボードレイアウトを変更した場合は、VS Code を再起動することをお勧めします。
キーボードレイアウトに依存しないバインド
スキャンコードを使用すると、キーボードレイアウトを変更しても変わらないキーボードショートカットを定義できます。例:
{ "key": "cmd+[Slash]", "command": "editor.action.commentLine", "when": "editorTextFocus" }
受け入れられるスキャンコード
- [F1]-[F19], [KeyA]-[KeyZ], [Digit0]-[Digit9]
- [Backquote], [Minus], [Equal], [BracketLeft], [BracketRight], [Backslash], [Semicolon], [Quote], [Comma], [Period], [Slash]
- [ArrowLeft], [ArrowUp], [ArrowRight], [ArrowDown], [PageUp], [PageDown], [End], [Home]
- [Tab], [Enter], [Escape], [Space], [Backspace], [Delete]
- [Pause], [CapsLock], [Insert]
- [Numpad0]-[Numpad9], [NumpadMultiply], [NumpadAdd], [NumpadComma]
- [NumpadSubtract], [NumpadDecimal], [NumpadDivide]
when 句のコンテキスト
VS Code では、オプションの when 句を使用して、キーボードショートカットがいつ有効になるかを正確に制御できます。キーボードショートカットに when 句がない場合、そのショートカットは常にグローバルに利用可能です。when 句は、キーボードショートカットを有効にするために true または false のいずれかに評価されます。
VS Code は、どの要素が表示され、VS Code UI でアクティブになっているかに応じて、さまざまなコンテキストキーと特定の値を設定します。たとえば、組み込みの デバッグの開始 コマンドにはキーボードショートカット F5 があり、これは適切なデバッガーが利用可能で (コンテキスト debuggersAvailable が true)、エディターがデバッグモードではない (コンテキスト inDebugMode が false) 場合にのみ有効になります。

キーボードショートカットの when 句は、デフォルトの keybinding.json (基本設定: デフォルトのキーボードショートカット (JSON) を開く) で直接確認することもできます。
{ "key": "f5", "command": "workbench.action.debug.start",
"when": "debuggersAvailable && !inDebugMode" },
条件演算子
when 句の条件式では、以下の条件演算子がキーボードショートカットに役立ちます。
| 演算子 | 記号 | 例 |
|---|---|---|
| 等価 | == |
"editorLangId == typescript" |
| 不等価 | != |
"resourceExtname != .js" |
| Or | || |
"isLinux||isWindows" |
| And | && |
"textInputFocus && !editorReadonly" |
| 一致 | =~ |
"resourceScheme =~ /^untitled$|^file$/" |
when 句の条件演算子の完全なリストは、when 句のコンテキストのリファレンスにあります。
利用可能なコンテキスト
利用可能な when 句のコンテキストの一部は、when 句のコンテキストのリファレンスにあります。
リストは網羅的ではありません。他の when 句のコンテキストは、キーボードショートカットエディター (基本設定: キーボードショートカットを開く) で検索して絞り込むか、デフォルトの keybindings.json ファイル (基本設定: デフォルトのキーボードショートカット (JSON) を開く) を確認することで見つけることができます。
リファクタリング用のカスタムキーボードショートカット
editor.action.codeAction コマンドを使用すると、特定のリファクタリング (Code Actions) のキーボードショートカットを構成できます。たとえば、以下のキーボードショートカットは 関数の抽出 リファクタリング Code Action をトリガーします。
{
"key": "ctrl+shift+r ctrl+e",
"command": "editor.action.codeAction",
"args": {
"kind": "refactor.extract.function"
}
}
これについては、リファクタリングの記事で詳しく解説されています。そこでは、さまざまな種類の Code Actions と、複数のリファクタリングの可能性がある場合にそれらを優先順位付けする方法について学習できます。
関連リソース
よくある質問
特定のキーにどのコマンドがバインドされているかを確認するにはどうすればよいですか?
キーボードショートカットエディターでは、特定のキー入力でフィルタリングして、どのコマンドがどのキーにバインドされているかを確認できます。次のスクリーンショットでは、Ctrl+Shift+P がコマンドパレットを表示するための すべてのコマンドを表示 にバインドされていることがわかります。

アクションにキーボードショートカットを追加する方法 (例: 「行の削除」に Ctrl+D を追加する)
デフォルトのキーボードショートカット でアクションをトリガーするルールを見つけ、その変更版を keybindings.json ファイルに記述します。
// Original, in Default Keyboard Shortcuts
{ "key": "ctrl+shift+k", "command": "editor.action.deleteLines",
"when": "editorTextFocus" },
// Modified, in User/keybindings.json, Ctrl+D now will also trigger this action
{ "key": "ctrl+d", "command": "editor.action.deleteLines",
"when": "editorTextFocus" },
特定のファイルタイプにのみキーボードショートカットを追加するにはどうすればよいですか?
when 句で editorLangId コンテキストキーを使用します。
{ "key": "shift+alt+a", "command": "editor.action.blockComment",
"when": "editorTextFocus && editorLangId == csharp" },
keybindings.json でキーボードショートカットを変更しましたが、機能しません。なぜですか?
最も一般的な問題は、ファイル内の構文エラーです。そうでなければ、when 句を削除するか、別の key を選んでみてください。残念ながら、現時点では試行錯誤のプロセスになります。