如何在运行时使用Ace代码编辑器添加新的突出显示规则?
How do I add new highlight rules at runtime with Ace Code Editor?
我正试图将自定义关键字注入编辑器上设置的任何模式。我尝试了以下操作:
rules = editor.session.getMode().$highlightRules
startRules = rules.$rules.start
startRules.push({
regex: "''w+"
onMatch: rules.createKeywordMapper({customToken: "one|two"})
})
rules.addRules({start: startRules})
editor.session.bgTokenizer.start(0)
我想要完成的是能够在单词"two"中写入,并将其包裹在自定义标记
我迟到了几年,但我最近发现了一个解决方案,可能会帮助你和其他人。看看我在他们的Github repo (Ace Editor repo)上打开的这个问题。使用此解决方案,您可以像我在运行时那样定义自己的令牌。在我的例子中,我创建了一个名为"my_token"的令牌。编辑器将把它包装在一个div中,这个div的类名与您的令牌名称匹配,前缀为"ace_"。比如"ace_my_token"
请注意,我的部分解决方案要求我以最高优先级突出显示我的新规则,因为我需要它以不同的方式突出显示,即使在字符串中,这就是为什么我把它放在规则集中的第一个。您可能需要根据您希望的突出显示方式来调整插入规则的位置。
this.editor = ace.edit(this.editorId);
var session = this.editor.session;
this.language = this.language || 'text';
session.setMode('ace/mode/' + this.language, function() {
var rules = session.$mode.$highlightRules.getRules();
for (var stateName in rules) {
if (Object.prototype.hasOwnProperty.call(rules, stateName)) {
rules[stateName].unshift({
token: 'my_token',
regex: 'two'
});
}
}
// force recreation of tokenizer
session.$mode.$tokenizer = null;
session.bgTokenizer.setTokenizer(session.$mode.getTokenizer());
// force re-highlight whole document
session.bgTokenizer.start(0);
});
下面是一个演示:https://jsbin.com/yogeqewehu/edit?html,css,console,output
相关文章:
- 从桌面读取python文件时高亮显示代码
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何在生成下载文件时显示加载动画
- React重新渲染但未显示正确的组件
- nodejs-expressjs上传图像并显示它们
- 使用JSP从服务器检索和显示图像
- 音频控件在mouseover上显示,在mouseout上淡出
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 显示5秒后隐藏潜水
- 画廊图像未显示
- 不显示带有本地json文件数据的谷歌地图脚本
- 如何将json数据显示为html
- 王牌编辑器 - 多字突出显示规则
- 如何在ace中向mode-xml.js中添加一个新的突出显示规则
- 在文本区域中显示带有id的元素的CSS规则,当单击该元素时
- Pure reactJS:游戏的生活规则显示错误,由于浮动:左网格建设不对应于2d数组
- ACE编辑器自定义突出显示规则
- 如何在运行时使用Ace代码编辑器添加新的突出显示规则?
- jQuery动态加载不工作的图像,向多个规则图像显示如何替换src=而不附加到它