在 Visual Studio Code 中,有没有办法将设置和键绑定范围限定为语言模式?

Pet*_*ter 5 keyboard-shortcuts 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"
}
Run Code Online (Sandbox Code Playgroud)

这是实现我所追求的目标的唯一方法吗?

似乎能够在自己的文件中的某处定义模式 X 的设置/键绑定是有意义的。我不喜欢将语言模式行为分散在像这样的大型全局文件中。

Pao*_*ska 9

要根据编程语言自定义 VS Code 设置和键绑定,您可以使用语言标识符、文件扩展名或扩展标识符。

对于设置,您可以使用语言输入(在 中settings.json):

    "[fsharp]": {
        "editor.suggest.insertMode": "replace"
    }

Run Code Online (Sandbox Code Playgroud)

对于键绑定,您可以使用以下when子句上下文(在keybindings.json):

editorLangId 当编辑器的关联语言 ID 匹配时为 True。

    {
        "key": "ctrl+e",
        "command": "workbench.action.files.saveAs",
        "when": "editorLangId == fsharp"
    }
Run Code Online (Sandbox Code Playgroud)

resourceLangId 当资源管理器或编辑器标题语言 ID 匹配时为 True。

    {
        "key": "ctrl+e",
        "command": "workbench.action.files.saveAs",
        "when": "resourceLangId == fsharp"
    }
Run Code Online (Sandbox Code Playgroud)

resourceExtname当资源管理器或编辑器文件扩展名匹配时为 true。

    {
        "key": "ctrl+e",
        "command": "workbench.action.files.saveAs",
        "when": "resourceExtname == .fs"
    }

Run Code Online (Sandbox Code Playgroud)

extension 当扩展的 ID 匹配时为 True。

    {
        "key": "ctrl+e",
        "command": "workbench.action.files.saveAs",
        "when": "extension == ionide.ionide-fsharp"
    }

Run Code Online (Sandbox Code Playgroud)

注意: 我没有测试所有这些条款,但对我来说工作得很好editorLangIdresourceExtname


Pet*_*ter 0

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