【VSCode】キーボードショートカットを編集してみる
更新日:2023/02/06
VSCodeは様々なコマンドが定義されています。
コマンドの一部はキーボードからのショートカットキーで実行できます。
キーを押すだけで実行できるので、ラクチンですね。
しかしショートカットが設定されていないものは、メニューやコマンドパレットを経由して実行します。
たまに使うものなら気にならないのですが、よく使うものは手間に感じますね。
そこで今回は、ショートカットとして登録されていないコマンドにショートカットキーを登録したり、設定済みのコマンドを変更する方法をお伝えします。
キーボードショートカット編集画面を開く
VSCodeはキーボードショートカットを編集する画面が用意されています。
サクッと表示してみましょう。
メニュー:ファイル → ユーザー設定 → キーボードショートカット の順でクリックしていきます。
これで、キーボードショートカット編集画面が表示されます。
ここまでできれば、後は説明不要だと思いますが、一応使い方を解説していきます。
キーボードショートカット編集画面の項目
キーボードショートカット編集画面には、4つの項目があります。
項目 | 内容 |
---|---|
コマンド(command) | ショートカットで実行されるコマンド |
キーバインド(key) | コマンドを実行するショートカットキー |
いつ(when) | ショートカットキーを使用できる条件 |
ソース | 「規定」または「ユーザー」 |
「キーバインド」に何も表示されていないものは、ショートカットキーが登録されていません。
「キーバインド」または「いつ」の内容を変更すると、「ソース」は「規定」から「ユーザー」へ変更されます。
いつ(when)については、この記事のいつ(when)の値と条件演算子を見てください。
拡張機能が登録したコマンドの「ソース」は「拡張機能」と表示されます。
コマンドの検索
変更するコマンドは、キーボードショートカット編集画面内の検索欄で検索できます。
現在登録されているショートカットキーで、コマンドを検索することもできます。
検索欄の右側にあるキーボードアイコンをクリックします。
「キーを記録しています」が表示されている状態で、ショートカットキーをキーボードに入力します。
検索欄に入力したショートカットが文字で表示され、「キーバインド」と一致する項目が表示されます。
検索の終了は、再度キーボードアイコンを押すか、キーボードでescキーを入力します。
検索欄の文字を消そうとしてキーボードdeleteキーを押すと、deleteキーが検索候補になります。
「検索が終了しない!」とパニックになる人がたまにいる(僕です)ので、注意しましょう。
「キーを記録しています」状態でなくても、キーを表現する文字列をダブルコーテーションで囲うと「キーバインド」が検索されます。
キーバインドの変更
キーバインドの変更は、コマンドを選択して左側の鉛筆アイコンをクリックするか、項目上をダブルクリックします。
キー入力パネルが表示されます。
設定したいキーを入力して、エンターを押すと登録されます。
「既存のコマンドがこのキーボードを使用しています」と表示されているときは、ショートカットキーが重複しています。
重複していても、エンターを押すと登録されます。
間違えて登録したときは、現在登録されているショートカットキーでコマンド検索して修正しましょう。
変更内容の登録先
キーボードショートカット編集画面で登録した内容は、keybindings.json に書き込まれています。
VSCodeを起動すると、規定値が読み込まれた後に keybindings.json の内容が上書きされます。
keybindings.jsonは、キーボードショートカット編集画面の「キーボードショートカットを開く」アイコンをクリックすると表示できます。
コマンド名がわかれば、手作業でキーボードショートカットを変更できますね。
ただし規定でショートカットが登録されているものは、変更前のキーからのコマンド削除が必要です。
次のようにコマンド名の前に "-" を記述すると削除になるようです。
"-" がないものは、追加ですね。
[
{
"key": "ctrl+s",
"command": "editor.action.selectAll"
},
{
"key": "ctrl+a",
"command": "-editor.action.selectAll"
}
]
キーバインドの削除とリセット
変更したショートカットキーを規定に戻すときは、コンテキストメニューから「キーバインドのリセット」を実行します。
コマンドからショートカットキーを取り除きたいときは、コンテキストメニューから「キーバインドの削除」を実行します。
全てを規定値に戻したいときは、全ての変更した項目に「キーバインドのリセット」を実行します。
「それはめんどうだ!」という人は、keybindings.jsonを開いて内容を全て消去後、上書きします。
ラクチンなので、こちらがおススメ。
いつ(when)の値と条件演算子
キーボードショートカット編集画面の「いつ」項目は様々なコンテキスト(ここでは変数のようなもの)を指定でき、条件演算子で細かい条件付けができます。
一覧で挙げておきます。
条件演算子
「いつ」項目は、次のような条件演算子が使用できます。
条件演算子 | 意味 | 例 |
---|---|---|
== | 一致 | "editorLangId == javascript" |
!= | 不一致 | "editorLangId != javascript" |
|| | OR | "editorLangId == javascript || editorLangId == typescript" |
&& | AND | "editorLangId == javascript && resourceExtname == .js" |
! | 否定 | "!editorFocus" |
=~ | 正規表現マッチ | "editorLangId =~ /^javascript$|^typescript$/" |
>、>= | より大きい、以上 | "workspaceFolderCount > 1" |
in | 含む | 左辺はオブジェクトまたは配列。 右辺の値と、オブジェクトのキーまたは配列の要素のどれかが一致するときtrue。 例: settings.json { "abc.def":{
"test.js" : true ,
"test2.js" : false
}
}
keybindings.json "when": "resourceFilename in config.abc.def"
現在のエディターのフィル名が test.js または test2.js のとき、ショートカットが有効になります。 |
コンテキスト
VS Codeのドキュメントで挙げられている、「いつ」項目で使用できるコンテキストの一覧です。
キーボードショートカット編集画面にはこれ以外にも設定されていますが、一部はVSCode内部で使用するのが目的で将来変更される可能性があるようです。
エディター関連
コンテキスト | 値 | 意味 |
---|---|---|
editorFocus | 真偽値 | テキストまたはウィジェットにフォーカスがある |
editorTextFocus | 真偽値 | テキストにフォーカスがある |
textInputFocus | 真偽値 | エディターにもフォーカスがある |
inputFocus | 真偽値 | テキスト入力領域 (エディターまたはテキスト ボックス) にフォーカスがある |
editorHasSelection | 真偽値 | テキストが選択されいる |
editorHasMultipleSelections | 真偽値 | 複数のテキスト領域が選択されている |
editorReadonly | 真偽値 | エディターが読み取り専用 |
editorLangId | 文字列 | エディターに関連付けられた言語 ID。 typescript、javascript、cppなど |
isInDiffEditor | 真偽値 | 差分エディターかどうか |
isInEmbeddedEditor | 真偽値 | フォーカスが埋め込みエディター内にある |
エクスプローラー関連
コンテキスト | 値 | 意味 |
---|---|---|
explorerViewletVisible | 真偽値 | エクスプローラーが表示されている |
explorerViewletFocus | 真偽値 | エクスプローラーにフォーカスがある |
filesExplorerFocus | 真偽値 | ファイルエクスプローラーセクションにフォーカスがある |
openEditorsFocus | 真偽値 | オープンエディターセクションにフォーカスがある |
explorerResourceIsFolder | 真偽値 | エクスプローラーでフォルダーが選択されている |
エディター ウィジェット関連
コンテキスト | 値 | 意味 |
---|---|---|
findWidgetVisible | 真偽値 | エディター検索ウィジェットが表示されている |
suggestWidgetVisible | 真偽値 | 提案ウィジェット (IntelliSense) が表示されている |
suggestWidgetMultipleSuggestions | 真偽値 | 複数の候補が表示されている |
renameInputVisible | 真偽値 | 名前変更入力テキストボックスが表示されている |
referenceSearchVisible | 真偽値 | Peek References のピーク ウィンドウが開いている |
inReferenceSearchEditor | 真偽値 | Peek References のピークウィンドウエディターにフォーカスがある |
config.editor.stablePeek | 真偽値 | ピークエディターを開いたまま (editor.stablePeek設定で制御) |
quickFixWidgetVisible | 真偽値 | Quick Fixウィジェットが表示されている |
parameterHintsVisible | 真偽値 | パラメーターのヒントが表示表示されている (editor.parameterHints.enabled設定によって制御) |
parameterHintsMultipleSignatures | 真偽値 | 複数のパラメーターのヒントが表示されている |
デバッガ―関連
コンテキスト | 値 | 意味 |
---|---|---|
debuggersAvailable | 真偽値 | 適切なデバッガ拡張機能が利用可能 |
inDebugMode | 真偽値 | デバッグセッション実行中 |
debugState | 文字列 | デバッガーの状態。inactive、initializing、stopped、runningのどれか |
debugType | 文字列 | デバッグタイプ。 launch.jsonのタイプ? |
inDebugRepl | 真偽値 | フォーカスはデバッグコンソールREPL(式を入力できるところ)にある |
OS判定
コンテキスト | 値 | 意味 |
---|---|---|
isLinux | 真偽値 | OSがLinux |
isMac | 真偽値 | OSがmacOS |
isWindows | 真偽値 | OSがWindows |
isWeb | 真偽値 | Web からエディターにアクセス |
リスト関連
コンテキスト | 値 | 意味 |
---|---|---|
listFocus | 真偽値 | リストにフォーカスがある |
listSupportsMultiselect | 真偽値 | リストが複数選択をサポートしている |
listHasSelectionOrFocus | 真偽値 | リスが選択またはフォーカスがある |
listDoubleSelection | 真偽値 | リストは2つの要素が選択されている |
listMultiSelection | 真偽値 | リストは複数の要素が選択されている |
モード関連
コンテキスト | 値 | 意味 |
---|---|---|
inSnippetMode | 真偽値 | エディターがスニペットモード |
inQuickOpen | 真偽値 | Quick Openドロップダウンにフォーカスがある |
リソース関連
コンテキスト | 値 | 意味 |
---|---|---|
resourceScheme | 文字列 | リソースのUriスキーム。file,httpなど |
resourceFilename | 文字列 | エクスプローラーまたはエディターのファイル名 |
resourceExtname | 文字列 | クスプローラーまたはエディターのファイル名拡張子 |
resourceDirname | 文字列 | エクスプローラーまたはエディターのリソースの絶対フォルダーパス |
resourcePath | 文字列 | エクスプローラーまたはエディターのリソースの絶対パス |
resourceLangId | 文字列 | エクスプローラーまたはエディターの言語 ID |
isFileSystemResource | 真偽値 | エクスプローラーまたはエディターのファイルがファイルシステムプロバイダーで処理可能 |
resourceSet | 真偽値 | エクスプローラーまたはエディターにファイルが設定されている |
resource | 文字列 | エクスプローラーまたはエディターのファイルの完全なURI |
統合ターミナル関連
コンテキスト | 値 | 意味 |
---|---|---|
terminalFocus | 真偽値 | 統合ターミナルにフォーカスがある |
terminalIsOpen | 真偽値 | 統合ターミナルが開いている |
タイムライン ビュー関連
コンテキスト | 値 | 意味 |
---|---|---|
timelineFollowActiveEditor | 真偽値 | タイムライン ビューがアクティブなエディターに従っている |
timelineItem | 文字列 | タイムラインアイテムの値 |
拡張機能関連
コンテキスト | 値 | 意味 |
---|---|---|
extension | 文字列 | 拡張機能のID |
extensionStatus | 真偽値 | 拡張機能がインストールされている |
extensionHasConfiguration | 真偽値 | 拡張機能に構成がある |
グローバルUI関連
コンテキスト | 値 | 意味 |
---|---|---|
notificationFocus | 真偽値 | 通知にキーボードフォーカスがある |
notificationCenterVisible | 真偽値 | 通知センターが VS Codeの右下に表示されている |
notificationToastsVisible | 真偽値 | VS Code の右下に通知トーストが表示されている |
searchViewletVisible | 真偽値 | 検索ビューが開いている |
sideBarVisible | 真偽値 | サイドバーが表示されている |
sideBarFocus | 真偽値 | サイドバーにフォーカスがある |
panelFocus | 真偽値 | パネルにフォーカスがある |
inZenMode | 真偽値 | ウィンドウは禅モード(集中モード) |
isCenteredLayout | 真偽値 | エディタは中央配置 |
workbenchState | 文字列 | empty、folder(1 フォルダ)、または workspaceのどれか |
workspaceFolderCount | 数値 | ワークスペースフォルダーの数 |
replaceActive | 真偽値 | 検索ビュー置換テキストボックスが開いている |
view | 文字列 | ビュー識別子 |
viewItem | 文字列 | viewItem コンテキスト |
isFullscreen | 真偽値 | ウィンドウが全画面表示 |
focusedView | 文字列 | 現在フォーカスされているビューの識別子 |
canNavigateBack | 真偽値 | 戻ることができるかどうか |
canNavigateForward | 真偽値 | 前方にナビゲートできるかどうか |
canNavigateToLastEditLocation | 真偽値 | 最後の編集場所に移動できるかどうか |
グローバルエディターUI関連
コンテキスト | 値 | 意味 |
---|---|---|
textCompareEditorVisible | 真偽値 | 1つ以上の差分 (比較) エディターが表示されている |
textCompareEditorActive | 真偽値 | 差分 (比較) エディターがアクティブ |
editorIsOpen | 真偽値 | エディターが1つ開いている |
groupEditorsCount | 文字列 | グループ内の編集者の数 |
activeEditorGroupEmpty | 真偽値 | アクティブな編集者グループに編集者がいない |
activeEditorGroupIndex | 数値 | エディターグリッド内のエディター グループの位置を反映して始まる番号。 (インデックス1を持つグループは左上隅の最初) |
activeEditorGroupLast | 真偽値 | エディターグリッドの最後のエディターグループかどうか |
multipleEditorGroups | 真偽値 | 複数のエディター グループが存在するかどうか |
activeEditor | 文字列 | グループ内のアクティブなエディターの識別子 |
activeEditorIsDirty | 真偽値 | グループ内のアクティブなエディターがダーティかどうか |
activeEditorIsNotPreview | 真偽値 | グループ内のアクティブなエディターがプレビューモードでない |
activeEditorIsPinned | 真偽値 | グループ内のアクティブなエディターが固定されているかどうか |
inSearchEditor | 真偽値 | フォーカスが検索エディター内にあるかどうか |
構成設定の値
setteing.jsonなどで設定されている構成設定の名前の前に "config."を付けることで いつ(when)の値として使用できます。
例:
editor.autoIndent → config.editor.autoIndent
引数が必要なコマンド
キーボードショートカット編集画面は引数が必要なコマンドの設定ができませんが、keybindings.jsonを直接編集することで引数を渡すことができます。
引数は、"args"で指定します。
次のコードは、Ctrl+Shift+Alt+pを押すと5行スクロールするショートカット定義です。
[
{
"key": "Ctrl+Shift+Alt+p",
"command": "editorScroll",
"args": {
"to": "down",
"by": "line",
"value": 5
},
},
]
コマンドについては、次のリンク先を読んでみてください。
更新日:2023/02/06
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。