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

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

注意

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

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

VS Code は、キーボード ショートカット エディターによる充実したキーボード ショートカット編集体験を提供します。エディターには、キーボード ショートカットが割り当てられているコマンドと割り当てられていないコマンドのすべてが一覧表示され、利用可能なアクションを使用して、それらのキーボード ショートカットの変更、削除、またはリセットを行うことができます。コマンドやキーボード ショートカットを探すには、検索ボックスを使用してコマンドまたはショートカットを入力し、一覧をフィルターします。

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

Keyboard Shortcuts

注意

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

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

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

キーマップ拡張機能

キーマップ拡張機能は、VS Code のショートカットを他のエディターのものと一致するように変更するため、新しいキーボード ショートカットを覚える必要はありません。

人気のキーマップ拡張機能の一覧を取得するには、ファイル > ユーザー設定 > キーボード ショートカットの移行元... メニューを選択します。Marketplace には、拡張機能の Keymaps (キーマップ) カテゴリもあります。

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

デフォルトのキーボード ショートカットの印刷用バージョンを用意しています。ヘルプ > キーボード ショートカットの参照 を選択すると、簡易リファレンスとして印刷するのに適した、要約された PDF バージョンが表示されます。

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

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

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

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

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.

ログの例では、最初の keydown イベントは MetaLeft キー (cmd) に対するもので、ディスパッチできません。2 番目の keydown イベントは Slash キー (/) に対するもので、meta+[Slash] としてディスパッチされます。meta+[Slash] からマッピングされたキーボード ショートカット エントリは 2 つあり、一致したものは、when 条件が editorTextFocus && !editorReadonly である組み込みのキーボード ショートカット エントリのコマンド editor.action.commentLine 用でした。

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

変更したショートカットのみを表示するように一覧をフィルターするには、その他のアクション (...) メニューの ユーザー キーバインドの表示 コマンドを選択します。これにより、@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) に対する '
  • など。

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

すべてのキーボード ショートカットは、現在のシステムのキーボード レイアウトを使用して UI に描画されます。たとえば、フランス語 (フランス) のキーボード レイアウトを使用する場合、エディターを分割Ctrl+* として描画されます

render keyboard shortcut

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

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

また、デフォルトの keybinding.json (基本設定: 既定のキーボード ショートカットを開く (JSON)) でキーボード ショートカットの when 句を直接確認することもできます。

{ "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 を選択してみてください。残念ながら、現時点ではこれは試行錯誤のプロセスになります。

© . This site is unofficial and not affiliated with Microsoft.