monaco-editor/react 自定义高亮

前言

最近需要用 monaco-editor/react 自定义高亮日志信息,记录一下。

这是日志开始的样子,比较丑

这是日志改造后的样子

步骤

贴一下相关代码

html 复制代码
<Editor
   loading={loading}
   value={logList.join('\n')}
   height="500px"
   onMount={handleEditorDidMount} // 加上初始化
   options={{
     minimap: { enabled: false },
     scrollBeyondLastLine: false,
     automaticLayout: true,
     readOnly: true,
     padding: { top: 10, bottom: 20 },
     wordWrap: 'on',
   }}
/>

加上初始化以后,只需要简单再写个初始化函数即可

js 复制代码
// 编辑器初始化时设置高亮
  const handleEditorDidMount = (editorInstance: any, monaco: any) => {
    setEditor(editorInstance);

    // 注册新语言
    monaco.languages.register({ id: 'log-language' });

    // 定义标记提供者
    monaco.languages.setMonarchTokensProvider('log-language', {
      tokenizer: {
        root: [
          // 匹配时间戳格式 [YYYY-MM-DD HH:MM:SS]
          [/\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\]/, 'timestamp'],
          // 匹配INFO, ERROR, WARNING等日志级别
          [/\b(INFO|ERROR|WARNING|DEBUG)\b/, 'loglevel'],
        ],
      },
    });

    // 设置主题
    monaco.editor.defineTheme('log-theme', {
      base: 'vs-dark',
      inherit: true,
      rules: [
        { token: 'timestamp', foreground: '#a0cded', fontStyle: 'bold' },
        { token: 'loglevel', foreground: '#00a700' },
      ],
      colors: {},
    });

    // 应用主题和语言
    monaco.editor.setTheme('log-theme');
    editorInstance.getModel().setLanguage('log-language');
  };

需要什么规则,先将其正则匹配出来并标记为 tokenizer,然后样式直接往 rules 里塞就行。

相关推荐
harrain16 分钟前
什么!vue3.4开始,v-model不能用在prop上
前端·javascript·vue.js
fanruitian6 小时前
uniapp android开发 测试板本与发行版本
前端·javascript·uni-app
rayufo6 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
RANCE_atttackkk6 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
摘星编程6 小时前
React Native + OpenHarmony:Timeline垂直时间轴
javascript·react native·react.js
2501_944525547 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 支出分析页面
android·开发语言·前端·javascript·flutter
jin1233228 小时前
React Native鸿蒙跨平台完成剧本杀组队详情页面,可以复用桌游、团建、赛事等各类组队详情页开发
javascript·react native·react.js·ecmascript·harmonyos
李白你好8 小时前
Burp Suite插件用于自动检测Web应用程序中的未授权访问漏洞
前端
刘一说9 小时前
Vue 组件不必要的重新渲染问题解析:为什么子组件总在“无故”刷新?
前端·javascript·vue.js
jin1233229 小时前
基于React Native鸿蒙跨平台移动端表单类 CRUD 应用,涵盖地址列表展示、新增/编辑/删除/设为默认等核心操作
react native·react.js·ecmascript·harmonyos