在VS Code中,我知道您可以创建包含全局用户键绑定和设置的文件,并且您可以为键绑定和设置拥有特定于工作空间的文件,但是是否可以定义特定于语言模式的设置或键绑定?
例如,我希望Alt + /表示FSI: Send Line
时,我在f#模式,但不是当我在markdown模式或JS模式。
我希望我的制表符在Elm模式下是2个空格,但在c#模式下是4个空格。
我知道你可以用when
子句定义键绑定,像这样:
{
"key": "alt+/",
"command": "fsi.SendLine",
"when": "resourceLangId == fsharp"
}
这是实现我所追求的东西的唯一方法吗?
似乎能够在自己的文件中为模式X定义设置/键绑定是有意义的。我不喜欢在像这样的大全局文件中分散语言模式行为
要根据编程语言自定义VS Code设置和键绑定,可以使用语言标识符、文件扩展名或扩展标识符。
对于设置,您可以使用语言条目(在settings.json
中):
"[fsharp]": {
"editor.suggest.insertMode": "replace"
}
对于键绑定,您可以使用以下when
子句上下文(在keybindings.json
中):
editorLangId
当编辑器的相关语言Id匹配时为True。
{
"key": "ctrl+e",
"command": "workbench.action.files.saveAs",
"when": "editorLangId == fsharp"
}
resourceLangId
当资源管理器或编辑器标题语言Id匹配时为True。
{
"key": "ctrl+e",
"command": "workbench.action.files.saveAs",
"when": "resourceLangId == fsharp"
}
resourceExtname
当资源管理器或编辑器的文件扩展名匹配时为True。
{
"key": "ctrl+e",
"command": "workbench.action.files.saveAs",
"when": "resourceExtname == .fs"
}
extension
当扩展的ID匹配时为True。
{
"key": "ctrl+e",
"command": "workbench.action.files.saveAs",
"when": "extension == ionide.ionide-fsharp"
}
注意:我没有测试所有这些子句,但editorLangId
和resourceExtname
对我来说很好。
Visual Studio Code已经声明,目前(2016-10-19)不支持语言模式设置,但正在考虑中。(https://twitter.com/code/status/788301380557561857)
在VS Code的Github仓库中有几个问题,需要这个特性的变体。
https://github.com/Microsoft/vscode/issues/13532 https://github.com/Microsoft/vscode/issues/1073