在Visual Studio Code中,有一种方法可以将设置和键绑定范围设置为语言模式



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"
    }

注意:我没有测试所有这些子句,但editorLangIdresourceExtname对我来说很好。

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

最新更新