是否可以将keybindings.json作为工作区设置的一部分而不是用户设置的一部分?
由于我有与我的工作区相关联的特定任务,我也希望能够分配工作区特定的快捷键。因为我会在独立的Windows和Linux环境中使用这些快捷键,所以我不希望看到这些键绑定定义出现在我的环境特定用户设置中。
是否可以将keybindings.json作为工作区设置的一部分而不是用户设置的一部分?
由于我有与我的工作区相关联的特定任务,我也希望能够分配工作区特定的快捷键。因为我会在独立的Windows和Linux环境中使用这些快捷键,所以我不希望看到这些键绑定定义出现在我的环境特定用户设置中。
这不是一个完美的解决方案,但我找到了一种解决方法,可以创建一个可以在工作区级别激活的按键绑定的变通方法。
在工作区.vscode/settings.json
文件中,设置一个新的设置为true。(因为该设置未由VS Code或任何扩展注册,所以它在编辑器中将显示为淡出状态-这没关系):
"workspaceKeybindings.myAwesomeTask.enabled": true // setting can be anything you want
然后在用户的keybindings.json
中创建键盘快捷方式,并为您创建的设置添加一个“when”条件:{
"key": "ctrl+; ctrl+n",
"command": "workbench.action.tasks.runTask",
"args": "My Awesome Task",
"when": "config.workspaceKeybindings.myAwesomeTask.enabled" // Must be "config.{settingName}"
},
这个快捷键可以在您想要的任何工作区中设置为活动状态。
这是不可能的。在这里,Alexandru Dima(alexandrudima)解释了为什么他们不想添加此功能,并建议创建自定义扩展程序,仅贡献按键绑定以共享它们。
.vscode/keybindings.json
,但是可以获取仅在特定文件夹中活动的快捷键绑定:[
{
"key": "...",
"command": "..." ,
"when": "resourceDirname == '/Users/johndoe/path/to/folder'",
...
},
]
您还有所有这些其他上下文:
resource: "vscode-userdata:/Users/johndoe/path/to/file.json"
resourceDirname: "/Users/johndoe/path/to/"
resourceExtname: ".json"
resourceFilename: "file.json"
resourceLangId: "jsonc"
resourcePath: "/Users/johndoe/path/to/file.json"
resourceScheme: "vscode-userdata"
查找所有可能的上下文键:
Developer: Toggle Developer Tools
vscode 命令Developer: Inspect Context Keys
vscode 命令,然后单击任意位置and more...
tasks.json
和自定义的全局键盘快捷方式来实现了这一点。我还写了一篇文章详细介绍了整个设置过程。startDev
,位于.vscode/tasks.json
文件中。例如,要运行npm run dev
命令,可以按照以下方式设置:
{
"label": "startDev",
"type": "npm",
"script": "start:host" // 甚至可以使用shell脚本
}
keybindings.json
文件中添加一个自定义快捷键,如下所示:
{
"key": "ctrl+shift+/",
"command": "workbench.action.tasks.runTask",
"args": "startDev",
},
.vscode/tasks.json
中添加一个具有相同标签的任务,并将其替换为你想要的任务。
tasks.json
的另一个好处是,它具有根据操作系统切换命令的标志,并且还可以使用各种终端。
本文详细介绍了这种方法的过程和好处。tasks.json
中创建任务)并非必需。如果工作区中没有定义具有相同标签的任务,则此任务将作为键绑定的默认任务,但即使没有它,解决方案仍然有效。 - Chris Baintasks.json
没有定义,那么键绑定将无法运行任何任务,对吗? - Gangula.vscode/tasks.json
中为工作区定义任务之外,您还可以通过VS Code用户目录中的tasks.json
定义用户级任务。步骤1没有明确说明正在创建的任务是工作区级任务,我错误地将其视为用户级任务。现在我理解了第一步是要创建一个工作区级任务,您是正确的,可以忽略我之前的评论 :-) - Chris Bain
args
吗?例如,我想在一个工作区运行npm start
,在另一个工作区运行npm run dev
,并使用相同的快捷方式。 - Gangulakeybindings.json
中设置不同的条目即可。一个用于npm start
,另一个用于npm run dev
,并且在when条件中使用不同的settingName。 - Chris Bain