はじめに
同じ記事あるよね?
同様の目的で投稿された記事が既にあるのですが、対応バージョンが古いのか環境の違いなのか私の環境では動作しませんでした。
よって、現バージョン(1.93.0)で動作する設定について述べています。
何がしたいのか
VSCodeのキーバインディングに特定のワークスペース専用のものを追加したい。
「できること」と「できないこと」
ユーザー単位の設定 「 できる」
ワークスペース単位の設定 「 できない」 こっちをやりたい
VSCodeのキーバインディングはkeybindings.jsonファイルにて設定することができます。
ただしこれはユーザー単位のもので、ワークスペース単位で設定することはできません。
ワークスペースの.vscodeディレクトリ以下にkeybindings.jsonを置いても無駄です。
どういう場合に必要?
例えばある特定のワークスペースにのみ存在するタスクを実行するための専用キーバインディングを指定したい場合などが考えられます。
前述の「できること」の範囲内で設定しようとすると全ワークスペースに跨ってしまうため、該当するタスクが存在しないような別のワークスペースでもそのキーバインディングが有効となり、不都合が生じます。
設定方法
ユーザー単位の共通設定
[
{
"args": "必要なら引数をここに書く",
"command": "実行したいコマンドをここに書く",
"key": "キーの組み合わせをここに書く",
"when": "config.XXX.YYY.ZZZ"
}
]
ワークスペース単位の設定
{
"XXX.YYY.ZZZ": true,
}
ここが違う
keybindings.json の "when" の値には、ワークスペースの settings.json で指定するキーに対して config. を前置した文字列を指定します。
"XXX.YYY.ZZZ" の部分は実在する設定項目名と重複しなければ何でも良さそうです。
settings.json上では「不明な構成設定」扱いされてしまいますけどね
設定例
例として、ある特定のワークスペース(ここではfooとします)でCTRL+SHIFT+Rに続けてBキーが押下されたらbarというタスクを実行したいとします。
[
{
"args": "bar",
"command": "workbench.action.tasks.runTask",
"key": "Ctrl+Shift+R B",
"when": "config.workspaceKeybindings.foo.enabled"
}
]
{
"workspaceKeybindings.foo.enabled": true,
}
{
"tasks": [
{
"command": "echo \"A task, bar, is running in the workspace, foo.\"",
"label": "bar",
"presentation": {
"clear": false,
"close": false,
"echo": true,
"focus": true,
"panel": "shared",
"reveal": "always",
"showReuseMessage": true
},
"problemMatcher": [],
"type": "shell"
}
]
}
参考記事
VSCodeでキーバインドを設定する。keybindings.jsonが無い時の対処法
VSCodeでワークスペースごとに独自のキーバインドを使う裏技
Workspace-custom keybindings for running scripts in VS Code