您可以自定义代码折叠吗?

Posted

技术标签:

【中文标题】您可以自定义代码折叠吗?【英文标题】: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 扩展来检测这些评论模式,并以某种方式根据这些模式折叠标签?

【问题讨论】:

【参考方案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 扩展中实现自定义折叠的三种方式。

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


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

    您可以在扩展中定义 FoldingRangeProvider,如 answer 中所述。 vscode 包中的FoldingRange 支持使用 startLine、endLine 和 foldKind 进行折叠自定义。

    您可以将语言服务器支持与 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" ....

以上是关于您可以自定义代码折叠吗?的主要内容,如果未能解决你的问题,请参考以下文章

eclipse自定义代码块折叠

自定义可折叠视图

json 用于代码的自定义快捷键在Brackets中展开/折叠

为 Python 代码使用 Vim 折叠的推荐方法是啥

VIM 代码折叠

您如何看待代码折叠? [关闭]