VS Codeのエージェントモードを拡張するには、を試してください!

Visual Studio Code のキーボード ショートカット

Visual Studio Code では、ほとんどのタスクをキーボードから直接実行できます。この記事では、VS Code に付属する既定のキーボード ショートカットを変更する方法について説明します。

Mac でこのページにアクセスすると、Mac 用のキーボード ショートカットが表示されます。Windows または Linux を使用してアクセスすると、そのプラットフォームのキーが表示されます。別のプラットフォームのキーボード ショートカットが必要な場合は、目的のキーにマウスを合わせます。

キーボード ショートカットエディター

VS Code には、キーボード ショートカットエディターによる豊富なキーボード ショートカット編集機能が用意されています。このエディターには、キーボード ショートカットがあるコマンドとないコマンドの両方を含む、利用可能なすべてのコマンドが一覧表示され、利用可能なアクションを使用してキーボード ショートカットを変更、削除、またはリセットできます。コマンドまたはキーボード ショートカットを検索するには、検索ボックスを使用してコマンドまたはショートカットを入力し、リストをフィルター処理します。

キーボード ショートカットエディターを開くには、ファイル > 基本設定 > キーボード ショートカット メニューを選択するか、コマンド パレットで 基本設定: キーボード ショートカットを開く コマンド (⌘K ⌘S (Windows、Linux の場合は Ctrl+K Ctrl+S)) を使用します。

Keyboard Shortcuts

キーボード ショートカットは現在のキーボード レイアウトに一致します。たとえば、US キーボード レイアウトでのキーボード ショートカット Cmd+\ は、レイアウトをドイツ語に変更すると Ctrl+Shift+Alt+Cmd+7 として表示されます。キーボード ショートカットを変更するダイアログでは、キーボード レイアウトに従って、正しく希望するキーボード ショートカットが割り当てられます。

UI アクションのショートカットをカスタマイズする

UI アクションのキーボード ショートカットをカスタマイズするには、ワークベンチ内の任意のアクション項目を右クリックし、キーバインドの構成 を選択します。これにより、対応するコマンドにフィルター処理されたキーボード ショートカットエディターが開きます。アクションに when 句がある場合、それが自動的に含まれるため、必要な方法でキーボード ショートカットを簡単に設定できます。

キーマップ拡張機能

キーマップ拡張機能は、VS Code のショートカットを他のエディターのショートカットに一致させるため、新しいキーボード ショートカットを学習する必要がありません。

ファイル > 基本設定 > キーボード ショートカットを移行... メニューを選択すると、人気のあるキーマップ拡張機能のリストが表示されます。また、マーケットプレースには拡張機能の キーマップ カテゴリ もあります。

キーボード ショートカット リファレンス

既定のキーボード ショートカットの印刷可能なバージョンを用意しています。ヘルプ > キーボード ショートカット リファレンス を選択すると、簡単に参照できるように印刷に適した簡潔な PDF バージョンが表示されます。

次のリンクから、3 つのプラットフォーム固有バージョン (US 英語キーボード) にアクセスできます。

キーボード ショートカットの競合を検出する

多くの拡張機能をインストールしている場合や、キーボード ショートカットを変更している場合、同じキーボード ショートカットが複数のコマンドにマップされているキーボード ショートカットの競合が発生する可能性があります。これにより、特にエディター内を移動する際に、さまざまなキーボード ショートカットがスコープに入ったり出たりすると、混乱を招く動作につながる可能性があります。

キーボード ショートカットの一覧で項目を右クリックし、同じキーバインドを表示 を選択すると、同じキーボード ショートカットを持つすべてのエントリが表示されます。

show keyboard shortcut conflicts menu

キーボード ショートカットのトラブルシューティング

キーボード ショートカットの問題をトラブルシューティングするには、開発者: キーボード ショートカットのトラブルシューティングの切り替え コマンドを実行します。これにより、ディスパッチされたキーボード ショートカットのログ記録が有効になり、対応するログ ファイルを含む出力パネルが開きます。

その後、目的のキーボード ショートカットを押して、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 つあり、一致したものは editor.action.commentLine コマンドのもので、editorTextFocus && !editorReadonlywhen 条件を持ち、組み込みのキーボード ショートカットエントリです。

変更されたキーボード ショートカットを表示する

変更したショートカットのみを表示するようにリストをフィルター処理するには、その他のアクション (...) メニューで ユーザーキーバインドを表示 コマンドを選択します。これにより、キーボード ショートカット エディターに @source:user フィルターが適用されます (Source は 'User' です)。

Default Keyboard Shortcuts

高度なカスタマイズ

VS Code は、keybindings.json ファイルでカスタマイズしたキーボード ショートカットを追跡します。高度なカスタマイズのために、keybindings.json ファイルを直接変更することもできます。

keybindings.json ファイルを開くには

  • キーボード ショートカット エディターを開き、エディターのタイトル バーの右側にある キーボード ショートカットを開く (JSON) ボタンを選択します。

    Open Keyboard Shortcuts JSON button

  • または、コマンド パレットで 既定のキーボード ショートカットを開く (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

キーが押されると、次の評価ルールが適用されます。

  • ルールは から に評価されます。
  • keywhen 句の両方に一致する最初のルールが受け入れられます。
  • ルールが見つかった場合、それ以上ルールは処理されません。
  • ルールが見つかり、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)
  • VK_TAB (0x09) のための tab
  • 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) のための '
  • など

通常、異なるキーボード レイアウトでは、これらの仮想キーの配置が変わったり、押されたときに生成される文字が変わったりします。標準の US キーボード レイアウトとは異なるキーボード レイアウトを使用する場合、Visual Studio Code は次のことを行います。

すべてのキーボード ショートカットは、現在のシステムのキーボード レイアウトを使用して UI に表示されます。たとえば、フランス語 (フランス) キーボード レイアウトを使用している場合の Split Editor は、現在 Ctrl+* として表示されます。

render keyboard shortcut

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

keybindings.json guidance

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

keyboard shortcut widget

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) 場合にのみ有効になります。

Start Debugging when clause in the Keyboard Shorts editor

キーボード ショートカットの `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 コマンドを使用すると、特定の リファクタリング (コード アクション) のキーボード ショートカットを構成できます。たとえば、以下のキーボード ショートカットは、関数の抽出 リファクタリングのコード アクションをトリガーします。

{
  "key": "ctrl+shift+r ctrl+e",
  "command": "editor.action.codeAction",
  "args": {
    "kind": "refactor.extract.function"
  }
}

これについては、リファクタリング の記事で詳しく説明されており、さまざまな種類のコード アクションや、複数のリファクタリングの可能性がある場合にそれらを優先する方法を学ぶことができます。

よくある質問

特定のキーにどのコマンドがバインドされているかを知るにはどうすればよいですか?

キーボード ショートカットエディターでは、特定のキーストロークでフィルター処理して、どのコマンドがどのキーにバインドされているかを確認できます。次のスクリーンショットでは、Ctrl+Shift+P がコマンド パレットを表示するための すべてのコマンドを表示 にバインドされていることがわかります。

Keyboard shortcuts quick outline

アクションにキーボード ショートカットを追加する方法 (例: 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 を選択してみてください。残念ながら、現時点では試行錯誤のプロセスです。