您可以自定义代码折叠吗?
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.json
中engines
中的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" .... 以上是关于您可以自定义代码折叠吗?的主要内容,如果未能解决你的问题,请参考以下文章