Visual Studio Code のキーボードショートカット
Visual Studio Code では、ほとんどのタスクをキーボードから直接実行できます。この記事では、VS Code に付属しているデフォルトのキーボードショートカットを変更する方法について説明します。
このページを Mac で閲覧すると、Mac 用のキーボードショートカットが表示されます。Windows または Linux を使用して閲覧すると、そのプラットフォームのキーが表示されます。別のプラットフォームのキーボードショートカットが必要な場合は、目的のキーの上にマウスカーソルを置いてください。
キーボードショートカットエディター
VS Code は、キーボードショートカットエディターによる豊富なキーボードショートカット編集エクスペリエンスを提供します。このエディターには、キーボードショートカットの有無にかかわらず、使用可能なすべてのコマンドがリスト表示され、使用可能なアクションを使用して、キーボードショートカットの変更、削除、またはリセットを行うことができます。コマンドまたはキーボードショートカットを検索するには、検索ボックスを使用して、リストをフィルタリングするコマンドまたはショートカットを入力します。
キーボードショートカットエディターを開くには、ファイル > プリファレンス > キーボードショートカット メニューを選択するか、プリファレンス: キーボードショートカットを開く コマンド (⌘K ⌘S (Windows, Linux Ctrl+K Ctrl+S)) をコマンドパレットで使用します。
キーボードショートカットは、現在のキーボードレイアウトに一致します。たとえば、US キーボードレイアウトのキーボードショートカット Cmd+\ は、レイアウトがドイツ語に変更されると Ctrl+Shift+Alt+Cmd+7 として表示されます。キーボードショートカットを変更するダイアログでは、キーボードレイアウトに従って、正しく目的のキーボードショートカットが割り当てられます。
UI アクションのショートカットをカスタマイズする
UI アクションのキーボードショートカットをカスタマイズするには、ワークベンチのアクションアイテムを右クリックして、キーバインドの構成 を選択します。これにより、キーボードショートカットエディターが開き、対応するコマンドでフィルタリングされます。アクションに when
句がある場合は、自動的に含まれるため、必要な方法でキーボードショートカットを簡単に設定できます。
キーマップ拡張機能
キーマップ拡張機能は、他のエディターのショートカットに合わせて VS Code ショートカットを変更するため、新しいキーボードショートカットを学習する必要はありません。
ファイル > プリファレンス > キーボードショートカットを移行... メニューを選択して、一般的なキーマップ拡張機能のリストを取得します。マーケットプレイスには、キーマップカテゴリ の拡張機能もあります。
キーボードショートカットリファレンス
デフォルトのキーボードショートカットの印刷可能なバージョンがあります。ヘルプ > キーボードショートカットリファレンス を選択すると、簡単なリファレンスとして印刷に適した PDF バージョンが表示されます。
次のリンクから、3 つのプラットフォーム固有のバージョン (US English キーボード) にアクセスできます。
キーボードショートカットの競合の検出
多くの拡張機能がインストールされている場合、またはキーボードショートカットを変更した場合、キーボードショートカットの競合が発生する可能性があります。これは、同じキーボードショートカットが複数のコマンドにマップされている場合です。特に、エディター内を移動するにつれて、異なるキーボードショートカットがスコープに出入りする場合、混乱を招く動作になる可能性があります。
キーボードショートカットのリスト内の項目を右クリックし、同じキーバインドを表示 を選択して、同じキーボードショートカットを持つすべてのエントリを表示します。
キーボードショートカットのトラブルシューティング
キーボードショートカットの問題をトラブルシューティングするには、開発者: キーボードショートカットのトラブルシューティングの切り替え コマンドを実行できます。これにより、ディスパッチされたキーボードショートカットのログ記録がアクティブになり、対応するログファイルを含む出力パネルが開きます。
次に、目的のキーボードショートカットを押して、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 つあり、一致したものはコマンド editor.action.commentLine
用でした。このコマンドには、when
条件 editorTextFocus && !editorReadonly
があり、組み込みのキーボードショートカットエントリです。
変更されたキーボードショートカットの表示
リストをフィルタリングして、変更したショートカットのみを表示するには、その他のアクション (...) メニューで ユーザーキーバインドを表示 コマンドを選択します。これにより、キーボードショートカット エディターに @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" ] } },
-
引数をコマンドに渡すには
この例では、新しい untitled 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
) 用 - など
通常、キーボードレイアウトが異なると、これらの仮想キーの位置が変更されたり、押したときに生成される文字が変更されたりします。標準の US とは異なるキーボードレイアウトを使用する場合、Visual Studio Code は次の処理を実行します。
すべてのキーボードショートカットは、現在のシステムのキーボードレイアウトを使用して UI にレンダリングされます。たとえば、フランス語 (フランス) キーボードレイアウトを使用する場合の エディターを分割
は、Ctrl+* としてレンダリングされるようになりました。
keybindings.json
を編集するとき、VS Code は誤解を招くキーボードショートカットを強調表示します。これは、標準の US キーボードレイアウトで生成された文字でファイルに表されているが、現在のシステムのキーボードレイアウトでは異なるラベルのキーを押す必要があるものです。たとえば、フランス語 (フランス) キーボードレイアウトを使用する場合のデフォルトのキーボードショートカットルールは次のようになります。
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) にのみ有効になります。
デフォルトの keybinding.json
(プリファレンス: デフォルトのキーボードショートカット (JSON) を開く) で、キーボードショートカットの when 句を直接表示することもできます。
{ "key": "f5", "command": "workbench.action.debug.start",
"when": "debuggersAvailable && !inDebugMode" },
条件演算子
when
句の条件式の場合、次の条件演算子はキーボードショートカットに役立ちます。
演算子 | 記号 | 例 |
---|---|---|
等価 | == |
"editorLangId == typescript" |
不等価 | != |
"resourceExtname != .js" |
または | || |
"isLinux || isWindows" |
かつ | && |
"textInputFocus && !editorReadonly" |
一致 | =~ |
"resourceScheme =~ /^untitled$|^file$/" |
when 句の条件演算子の完全なリストは、when 句コンテキスト リファレンスにあります。
使用可能なコンテキスト
使用可能な when
句コンテキストの一部は、when 句コンテキストリファレンス にあります。
そこにあるリストは網羅的なものではなく、キーボードショートカットエディター (プリファレンス: キーボードショートカットを開く) で検索およびフィルタリングするか、デフォルトの keybindings.json
ファイル (プリファレンス: デフォルトのキーボードショートカット (JSON) を開く) を確認することで、他の when
句コンテキストを見つけることができます。
リファクタリングのカスタムキーボードショートカット
editor.action.codeAction
コマンドを使用すると、特定のリファクタリング (コードアクション) のキーボードショートカットを構成できます。たとえば、次のキーボードショートカットは、関数の抽出 リファクタリングコードアクションをトリガーします。
{
"key": "ctrl+shift+r ctrl+e",
"command": "editor.action.codeAction",
"args": {
"kind": "refactor.extract.function"
}
}
これについては、リファクタリング の記事で詳しく説明しています。ここでは、さまざまな種類のコードアクションと、複数のリファクタリングが可能な場合にそれらを優先順位付けする方法について学ぶことができます。
関連リソース
よくある質問
特定のキーにバインドされているコマンドを調べるにはどうすればよいですか?
キーボードショートカットエディターで、特定のキーストロークでフィルタリングして、どのコマンドがどのキーにバインドされているかを確認できます。次のスクリーンショットでは、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
を選択してみてください。残念ながら、現時点では試行錯誤のプロセスです。