函数编辑器调研及设计开发

前言:在产品研发中需要一款可嵌入web开发的代码及函数编辑器,本文从功能,扩展,外观/交互,维护/社区,兼容性,开源与否等方面考虑,进行对比筛选

1、编辑器统计数据

市面上编辑器有很多,如下:

根据最后的发版时间,判断编辑器的维护及更新状态,同时判断是否开源

功能列表’:

产品诉求

诉求重要程度详细描述
编辑区域为文本区域重要可以手工输入任意文字
支持@特殊字符触发联想重要联想内容为已有的数据源(计算项)
支持函数高亮(待定)重要
支持括号匹配并有动效重要
支持函数联想重要
选中函数后(添加函数后),可自动补齐函数完整格式次要
支持公式合法性校验重要函数格式及参数校验、运算规则校验(数学运算规则)
换行不影响公式逻辑重要编辑区域可随意换行,但不影响公式逻辑及校验
tab键可快速缩进次要与上一行缩进对齐
支持 -- 注释次要可用 -- 添加注释,并且不影响计算及校验
支持常用运算符重要算术运算符:加(+)、减(-)、乘(*)、除(/)、求余(%)
关系运算符:大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)、不等于(!=)
逻辑运算符:与(&&)、或(||)、非(!)
赋值运算符:=
支持标点符号重要() ,
支持运算符号、标点符号、函数输入等自动校正重要如中文的,自动校正为英文的,等等

作为现代编辑器,语法高亮,自动补全缩进,快捷键操作,搜索和替换等功能必不可少,综合考虑,结合以上需求,筛选主要对比以下3个编辑器,codemirror、ace、monaco editor

2、codemirror

     CodeMirror是一个用JavaScript为浏览器实现的多功能文本编辑器。它专门用于编辑代码,并附带一些实现更高级编辑功能的语言模式和插件。其核心仅提供编辑器功能,其他功能通过丰富的API和插件实现。CodeMirror的使用基于特定的程序语言模式(mode),它对特定的语言进行语法解析(parse),使编辑器能够在解析结果基础上进行语法高亮,实现具有上下文感知(context-aware)的代码补全、缩进等功能。

codemirror通过插件实现了一些特别的功能,例如:

添加widget

CodeMirror: Inline Widget Demo

视图与代码的分离 Multiple Buffer & Split View

CodeMirror: Multiple Buffer & Split View Demo

代码的多路复用 Multiplexing Parser

CodeMirror: Multiplexing Parser Demo

基于Tern(高级javascript解析引擎))的高级智能功能

CodeMirror: Tern Demo

附录:

  • 官网:CodeMirror
  • github(star:13k issue:200): https://github.com/codemirror/CodeMirror/
  • 外部插件: GitHub - codemirror/codemirror5: In-browser code editor (version 5, legacy)
  • 编写mode: CodeMirror 5 User Manual
  • demo: Index of /5/demo/
  • 论坛:discuss.CodeMirror
  • 用户(Adobe Brackets,Chrome DevTools,Firefox Developer Tools): CodeMirror: Real-world Uses

评价:

优点

1.功能总体完备
2.扩展性高
3.官网文档介绍详细,demo覆盖较全,插件也很多
4.有专门的社区,管理维护较为活跃

缺点

1.功能需要配置和引入文件才能实现,功能多的时候需要引入的文件过多,不好管理。
2.部分外观和交互基础显示不好,要通过自定义比较麻烦
3.进行扩展需要一定的学习

3、ace

Ace是一个用JavaScript编写的嵌入式代码编辑器。它与Sublime,Vim和TextMate等原生编辑器的功能和性能相匹配。它可以很容易地嵌入到任何网页和JavaScript应用程序中。作为与codemirror同类的现代编辑器,ACE同样拥有mode进行语法解析,实现编辑器的智能感知型功能。

附录:

官网: Ace - The High Performance Code Editor for the Web
github: https://github.com/ajaxorg/ace star:16k issue:580
编写mode: Ace Mode Creator
demo: Ace Kitchen Sink
社区:https://groups.google.com/forum/#!forum/ace-discuss
用户: Ace - The High Performance Code Editor for the Web

评价:

优点

1.功能完备且集成度高
2.支持的语言丰富
3.支持在线编写mode和配置demo

缺点

1.扩展支持能力较为一般
2.官方demo不支持源码预览

3、monoco editor

monaco是VS Code的代码编辑器,同时也是一个开源代码编辑器,可以嵌入到Web应用程序中。

附录:

学习文档:枚举值(Enumerations) | Monaco-editor 学习文档

评价:

优点

1.集成vscode的编辑功能,使用较为简单
2.使用vscode的外观和交互较为友好
4.原生支持代码diff,typescript

缺点

1.支持语言种类和主题较少
2.扩展性较差
3.独立的引入方式不适合打包
3.不支持移动浏览器或移动Web框架

4、总结

功能点

ACE

CodeMirror

Monaco

代码着色/高亮

主题

√ (内置20+/可扩展)

√ (内置40+)

2种,即vs/vs dark

语言支持

√ (110+/可扩展)

√ (130+)

√ (30+)

代码提示/自动补全

√ (引入tool文件+配置)

√ 引入hint相关文件+配置快捷键命令

√ 默认开启

代码完成/循环结构

代码段

搜索和替换

多光标操作

自动缩进

代码折行

undo/redo

快捷键

代码检查lint

字符集支持

行数显示

代码对比diff

mixed mode混合模式

keymap键盘映射

√  vim and Emacs

√ ( Vim ,  Emacs , and  Sublime Text )

多视图

resize自适应

扩展小部件

文本标记扩展

命令行扩展

鼠标拖放扩展

功能的整体对比来看,CodeMirror的功能比较多,但三者相差不大,基本功能都具备,只是某些特殊功能codemirror可以通过其丰富的扩展实现。

特性

CodeMirror

Ace

monaco

功能

完备

完备

完备

扩展性

插件、主题、mode扩展

插件、主题、mode扩展

mode扩展

外观/交互

支持多款主题和部件
基础UI较为简单

支持多款主题

vscode风格
风格统一交互友好

文档/demo

官网详细的api文档
demo单页展示

官网包含特性支持
mode创建教程
api文档
demo操作区

API文档
可配置demo
功能样例+代码

支持/社区

独立社区
star:13k+ issue:200+

star:16k+ issue:500+
support: Cloud9 IDE

star:7k+ issue:200+ support:Microsoft

兼容性

Firefox 3+, Chrome, Safari 3+, Internet Explorer 8+, Opera 9+

Firefox 3.5+, Safari 4+, Chrome, IE 8+, Opera 11.5+

IE8+, Firefox 4+, Chrome

根据以上调研,结合产品需求,最后选择使用了codemirror,三款编辑器的vue组件封装和扩展

codemirror:
Vue-Codemirror: Codemirror component for Vue.
https://github.com/surmon-china/vue-codemirror
Vue-Codemirror-Lite: Lightweight Codemirror Component for Vue.js
https://github.com/cnu4/vue-codemirror-lite
monaco:
vue-monaco-editor: Monaco Editor Vue Component
https://github.com/matt-oconnell/vue-monaco-editor
monaco-vue: Vue language plugin for the Monaco Editor.
https://github.com/rebornix/monaco-vue/blob/master/test/index.html
Ace:
vue2-ace-editor:A packaging of  ace
https://github.com/chairuosen/vue2-ace-editor

最后使用vue-codemirror-lite,封装成神州云合的插件szyh-codemirror,运行效果如下图所示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/601520.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【管理篇】如何提升管理中的沟通效率?

目录标题 管理沟通那些事如何提升沟通效率?&#x1f525;如何提升沟通技能&#xff1f; 向上沟通、员工激励和团队凝聚力提升 是管理沟通上比较难得问题 管理沟通那些事 管理沟通让技术管理者们痛苦的主因是确定性和规则性的减弱&#xff0c;不确定性的大幅度上升&#xff0c…

微软正在自主构建一个名为 MAI-1 的大型语言模型(不依赖 OpenAI)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

IDEA中向Data Sources导入sql文件

IDEA中向Data Sources导入sql文件 开篇 在学习黑马的课程时&#xff0c;时常需要向数据库中导入sql文件生成数据库表&#xff0c;每次都会忘记导入步骤&#xff0c;折腾许久&#xff0c;于是将过程记录下来。 步骤 在Database中选择你要导入的数据库源&#xff0c;如图我想…

Matlab图像中加入脉冲噪声、高斯噪声并用均值滤波、中值滤波进行滤波处理

一、脉冲噪声和高斯噪声简介 脉冲噪声和高斯噪声是两种常见的信号干扰类型&#xff0c;它们的特性和影响各不相同&#xff1a; 脉冲噪声&#xff08;Impulse Noise&#xff09;&#xff1a; 在图像中&#xff0c;脉冲噪声表现为随机出现的亮点或暗点&#xff0c;这些噪声点通常…

[开发|鸿蒙] DevEco Studio编译构建(笔记,持续更新)

构建体系 编译构建是将应用/服务的源代码、资源、第三方库等&#xff0c;通过编译工具转换为可直接在硬件设备上运行的二进制机器码&#xff0c;然后再将二进制机器码封装为HAP/APP软件包&#xff0c;并为HAP/APP包进行签名的过程。其中&#xff0c;HAP是可以直接运行在模拟器…

FIFO Generate IP核使用——同步复位

在描述FIFO&#xff08;First In First Out&#xff09;或其他存储结构的同步复位&#xff08;Synchronous Reset&#xff09;功能时&#xff0c;srst&#xff08;或wr_rst/rd_rst&#xff0c;即写入和读取时钟域的同步复位信号&#xff09;仅适用于块RAM&#xff08;Block RAM…

企业为什么需要主数据管理工具?十大热门主数据管理工具盘点

主数据管理是一套综合性的策略和技术&#xff0c;用于协调和管理企业内用于识别关键业务实体&#xff08;如客户、产品、供应商和员工&#xff09;的一致性、准确性和统一性的数据。主数据管理的目的是创建一个“单一真相源”&#xff0c;确保在不同部门和系统之间共享的数据保…

AI预警未来:山体滑坡与塌方事故的潜在发现者

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;的应用已经渗透到了我们生活的各个领域。而在防灾减灾的领域中&#xff0c;AI技术的引入无疑为我们打开了一扇新的大门。以梅大高速大埔往福建方向K11900m附近发生的路面塌方灾害为例&#xff0c;我们不禁思…

未授权访问:Redis未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、利用redis未授权写入weshell 5、利用redis未授权反弹shell 6、利用redis未授权实现免密登录 防御手段 从这篇文章开始我就要开始学习各种未授权访问的知识和相关的实操实验了&#xff0c;一共有好多篇&#xff0c;内容主…

navicat premium16.3.9重置

软件下载 官网地址&#xff1a;https://navicat.com.cn/products/ # 准备脚本 1、建一个txt 2、复制以下代码 3、修改文件格式为bat 4、运行bat文件 5、重新打开navicat&#xff0c;试用期重置为14 经测试16.2.3以上版本均可用 echo off set dnInfo set dn2ShellFolder set r…

YOLOv8改进 | 主干篇 | 2024.5全新的移动端网络MobileNetV4改进YOLOv8(含MobileNetV4全部版本改进)

一、本文介绍 本文给大家带来的改进机制是MobileNetV4&#xff0c;其发布时间是2024.5月。MobileNetV4是一种高度优化的神经网络架构&#xff0c;专为移动设备设计。它最新的改动总结主要有两点&#xff0c;采用了通用反向瓶颈&#xff08;UIB&#xff09;和针对移动加速器优化…

用脚本写一个日期样式的字符

现在想要诸如此类样式的语句&#xff1a;&#xff08;过去三个月的&#xff09; 可以用python脚本写&#xff1a; from datetime import date, timedelta# 获取当前日期 current_date date.today()# 定义过去三个月的时间间隔 three_months_ago current_date - timedelta(da…

<网络安全>《79 概念讲解<第十二课 物联网常用协议-(远距离非蜂窝网络)-终端设备>》

协议简称全称名称内容说明ZigBee也称紫蜂低速短距离传输的无线通信协议一种高可靠的无线数传网络&#xff0c;主要特色有低速、低耗电、低成本、支持大量网上节点、支持多种网上拓扑、低复杂度、快速、可靠、安全。ZigBee技术是一种新型技术&#xff0c;主要是依靠无线网络进行…

用一个故事告诉你协程到底是什么

神秘使者 “久闻Java语言跨越平台&#xff0c;框架众多&#xff0c;不过二十年功夫&#xff0c;就已晋升天下第一编程语言&#xff0c;今日一见&#xff0c;果然名不虚传呐&#xff01;” “使者先生您过奖了&#xff0c;咱们快些走&#xff0c;国王陛下已经等候多时了” 今…

电机控制系列模块解析(18)—— 位置观测器

一、简要综述 无传感器控制策略中观测器的分类&#xff0c;主要分为两类&#xff1a;基于模型的方法&#xff08;Model Based&#xff09;和基于显著性的方法&#xff08;Saliency Based&#xff09;。在此借用一张文献综述的图片&#xff0c;下面将列出下面借用图片中的各个分…

电脑(爱好者) :基础知识1 了解你的电脑

读懂cpu 您想了解关于您的电脑的信息吗&#xff1f;CPuz是一款常用的系统信息工具&#xff0c;可以提供关于CPU、主板、内存等硬件信息的详细情况。您可以下载并运行该软件&#xff0c;然后查看您的电脑硬件配置信息。 图片来源于网络 CPU-Z 简介 CPU-Z 是一款功能强大且易于使…

【边东随笔】(2) 北美鳄龟的生存智慧:细心 | 信心 | 狠心 | 耐心

非常谨慎&#xff0c;在水域中会先找到躲避将自身安置于有利地形 ( 细心 &#xff09;。 浮出水面换气&#xff0c;水体稍有异动就会退回水中&#xff0c;优秀掠食者对自身优势牢牢的把握&#xff08; 信心 &#xff09;。 非常优雅&#xff0c;猎食动作不存在任何花里胡哨&a…

Spring Boot3.x集成Disruptor4.0

Disruptor介绍 Disruptor是一个高性能内存队列&#xff0c;研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单&#xff0c;2010年在QCon演讲后&#xff0c;获得了业界关注。2011年&…

css--控制滚动条的显示位置

各种学习后的知识点整理归纳&#xff0c;非原创&#xff01; ① direction属性 滚动条在左侧显示② transform:scaleY() 滚动条在上侧显示 正常的滚动条会在内容超出规定的范围后在区域右侧和下侧显示在有些不正常的需求下会希望滚动条在上侧和左侧显示自己没有想到好的解决方案…

Vue3:menu导航栏出现多个同一跳转路径的菜单处理

文章目录 需求整理实现思路实现过程 需求整理&#xff0c;实现思路 最近公司想将之前老的项目整理出来&#xff0c;因为这个老项目内容太杂什么页面都往里面塞&#xff0c;导致菜单特别多&#xff0c;公司就像将这个老的项目迁出来&#xff0c;这个旧的项目本来是后端PHP写的。…