【问题标题】:Can you customize code folding?您可以自定义代码折叠吗?
【发布时间】:2016-08-17 22:13:50
【问题描述】:

是否可以自定义 Visual Studio Code 中代码折叠的工作方式?

我使用一种通用模式来定义各种不同文档类型的代码区域。

  • 因此,对于 XML,我使用 <!-- #region --><!-- #endregion --> 包装文本部分

  • 对于c#,我使用#region#endregion

  • 对于 TypeScript/Javascript,我使用 /* #region *//* #endregion */

在完整的 Visual Studio(不是 VS Code)中,我有一个自定义扩展,它可以跨文档类型窥探模式,并在此基础上创建折叠,允许我创建整洁的自定义文档大纲。我想在 Visual Studio Code 中使用相同的模式。是否可以创建一个自定义 VS Code 扩展来检测这些评论模式,并以某种方式根据这些模式折叠标签?

【问题讨论】:

    标签: visual-studio-code vscode-extensions


    【解决方案1】:

    如果您希望在扩展中贡献自定义折叠逻辑,可以使用FoldingRangeProvider

    请务必将package.jsonengines 中的VS Code 版本设置为1.23,即引入此功能的版本。

    这是你如何使用一个。

    export function activate(context: ExtensionContext) {
        languages.registerFoldingRangeProvider({ scheme: 'file', language: 'markdown' }, new MyFoldingRangeProvider());
    }
    
    class MyFoldingRangeProvider implements FoldingRangeProvider {
        provideFoldingRanges(document: TextDocument, context: FoldingContext, token: CancellationToken): FoldingRange[] {
            return detectRanges().map(({ lineStart, lineEnd }) => new FoldingRange(lineStart, lineEnd));
        }
    }
    

    【讨论】:

      【解决方案2】:

      很遗憾,目前还没有。这个主题有一个open issue in github

      【讨论】:

        【解决方案3】:

        在 VSCode 扩展中实现自定义折叠的三种方式。

        1. 您可以将正则表达式定义为[language-name].configuration.json 文件中的折叠标记。 (但是,我们对这种方法没有太多的自定义)

        {
          "folding": {
            "markers": {
              "start": "starting regex",
              "end": "ending regex"
            }
          }
        }
        1. 您可以在扩展中定义 FoldingRangeProvider,如 answer 中所述。 vscode 包中的FoldingRange 支持使用 startLine、endLine 和 foldKind 进行折叠自定义。

        2. 您可以将语言服务器支持与 textDocument/foldingRange 一起使用。 vscode-languageserver-protocol 中的FoldingRange 支持使用 startLine、endLine、startCharacter、endCharacter 和 foldKind 进行折叠自定义。

        查看this了解更多详情。

        【讨论】:

        • 在哪里可以找到[language-name].configuration.json
        • 就是你扩展代码的package.json中定义的contributes.languages下的configuration。 { "contributes": { "languages": [ { "id": "language-name", "aliases": [], "extensions": [ ".abc" ], "configuration": "./grammar/language -name.configuration.json" } .... }
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-02
        • 1970-01-01
        • 2013-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多