Что я узнал: 1. Регулярные выражения begin
и end
применяются построчно. 2. Регулярное выражение tmLanguage start / end будет работать на пустых строках, но в настоящее время свертывание языковой конфигурации не работает на пустых строках.
И так как пустые строки в этом случае являются хаком для окончания в следующем разделе начала:
Чтобы решить проблему сворачивания раздела в следующий аналогичный раздел, я использовал FoldingRangeProvider .
disposable = vscode.languages.registerFoldingRangeProvider('myExt', {
provideFoldingRanges(document, context, token) {
//console.log('folding range invoked'); // comes here on every character edit
let sectionStart = 0, FR = [], re = /^## /; // regex to detect start of region
for (let i = 0; i < document.lineCount; i++) {
if (re.test(document.lineAt(i).text)) {
if (sectionStart > 0) {
FR.push(new vscode.FoldingRange(sectionStart, i - 1, vscode.FoldingRangeKind.Region));
}
sectionStart = i;
}
}
if (sectionStart > 0) { FR.push(new vscode.FoldingRange(sectionStart, document.lineCount - 1, vscode.FoldingRangeKind.Region)); }
return FR;
}
});
Set "editor.foldingStrategy": "auto"
. Вы можете сделать его более сложным, чтобы сохранить пустое пространство между разделами.