【发布时间】:2020-09-29 10:30:51
【问题描述】:
我正在开发一个调用 let regEx = new RegExp(somePattern) 的扩展程序,然后执行以下操作
while ((match = regEx.exec(text))) {
// This loop runs till there is no more match left in the entire text
// When match found It colored the selected text to red
}
只要活动编辑器中发生某些活动,就会调用上述方法。问题是,当模式第一次匹配时,它会将文本颜色更改为红色,可以正常工作。
但是现在,如果我对原始文本进行更改以使正则表达式不再匹配,我想将颜色设置回其默认值。
我将如何处理这种情况?有没有内置 vscode 装饰器的方法来处理我的情况?
一种可能的解决方案:如果我运行另一个正则表达式,它将返回所有与正则表达式不匹配的文本,然后我可以在它们上应用默认颜色。但这种方法可行吗?我认为这不是一个性能友好的解决方案。欢迎任何帮助、建议、提示。
解释和期望:
// 邮箱:abc@test.com
在文本编辑器中,只要有人键入上述句子,正则表达式就会检测到 // 电子邮件:,因此它将文本的背景颜色更改为红色。
现在稍后,如果有人进行任何更改,例如: // 一些东西:abc@test.com
我想恢复为默认颜色,因为它不再匹配正则表达式。
目前,即使在将 // Email: 移除/更改为不同的文本后,仍会显示我之前设置的颜色。
实际代码:
while ((match = regEx.exec(text))) {
const startPos = activeEditor.document.positionAt(match.index);
const endPos = activeEditor.document.positionAt(match.index + match[0].length);
/* Ranges */
let singleRange: vscode.Range = new vscode.Range(startPos, endPos);
ranges.push(singleRange);
}
activeEditor.setDecorations(fontColorDecorator, ranges);
【问题讨论】:
-
据我说;您可以在每次对文档或特定文本(如果看起来)进行编辑时调用该方法
-
此方法从 onDidChangeActiveTextEditor()、onDidChangeTextDocument() 中调用。
-
显示你使用的代码到
color the text red -
不要在每次编辑时重新创建装饰器,每次调用
setDecorations时使用相同的装饰器
标签: visual-studio-code vscode-extensions