12

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

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

  • 所以,对于 XML,我用<!-- #region --><!-- #endregion -->

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

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

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

4

3 回答 3

9

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

请务必将您的 VS Code 版本设置为engines,即引入此功能的版本。package.json1.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));
    }
}
于 2018-05-30T19:36:36.300 回答
2

不幸的是,目前不是。对于这个主题,github中有一个未解决的问题。

于 2016-06-08T14:53:45.720 回答
2

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

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

{
  "folding": {
    "markers": {
      "start": "starting regex",
      "end": "ending regex"
    }
  }
}

  1. 您可以按照此答案中的描述从扩展中定义FoldingRangeProvidervscode包中的FoldingRange支持使用 startLine、endLine 和 foldKind 进行折叠自定义。

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

检查以获取更多详细信息。

于 2020-11-19T03:15:22.280 回答