如何让 VSCode 缩进 if 语句而不用括号?

eee*_*gnu 7 c++ visual-studio-code

我希望 VSCode 在以下情况下创建换行符时自动缩进:

if(statement)
    func();
Run Code Online (Sandbox Code Playgroud)

当点击换行符时,默认功能会执行以下操作:

if(statement)
func();
Run Code Online (Sandbox Code Playgroud)

这是 VSCode 中长期存在的问题:https ://github.com/microsoft/vscode/issues/43244

我很感激任何可以完成此行为的黑客/扩展。github 问题链接中还有其他缩进被破坏的情况,但我只关心这个简单的情况。

eee*_*gnu 1

弄清楚如何在不安装扩展的情况下做到这一点。可能有更好的方法可以完成,settings.json但我找不到。您可以直接从源代码修改语言配置,对我来说是C:\Program Files\Microsoft VS Code\resources\app\extensions\cpp\language-configuration.json. 这些文件设置有一个指南。我将以下内容添加到我的 C++ 语言配置中:

"onEnterRules": [
        {
            "beforeText": "^\\s*(?:if|while)\\(.*\\)\\s*$",
            "action": {
                "indent": "indent"
            }
        },
        {
            "beforeText": "(?=)",
            "previousLineText": "^\\s*(?:if|while)\\(.*\\)\\s*$",
            "action": {
                "indent": "outdent"
            }
        }
    ]
Run Code Online (Sandbox Code Playgroud)

这是可行的,但不幸的是官方 c++ vscode 扩展C/C++ for Visual Studio Code由于某种原因破坏了它。

下面是我最初的方法,它破坏了太多有用的东西。

"indentationRules": {
        "increaseIndentPattern": "^\\s*if\\(.*\\)\\s*$",
        "decreaseIndentPattern": "(?!)"
    }
Run Code Online (Sandbox Code Playgroud)

必须设置该字段decreaseIndentPattern(这里正则表达式永远不会捕获任何内容),否则它会忽略该indentationRules字段(我猜他们从未测试过是否只设置一个字段?)请注意,这些编辑需要使用管理权限来完成,我发现 VSCode制作它们非常方便。此外,这些更改只有在 VSCode 关闭后才会生效。

事实证明,我遇到了此 PR 中提到的相同问题: https: //github.com/microsoft/vscode/pull/115454。此修复破坏了太多其他 vscode 缩进行为,例如在 if 语句中第一个正确缩进的行之后取消缩进。

  • 我不介意花点时间来正确配置编辑器,但我发现我必须使用 vscode 进行太多此类脑部手术。 (2认同)