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

前言:在产品研发中需要一款可嵌入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,运行效果如下图所示

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

软考是否存在包过班?

国家考试&#xff0c;虽然有人喊着包过&#xff0c;但你也别轻易相信啊&#xff0c;姐妹&#xff0c;要好好保护好你的钱包啊&#xff01;这种考试是没有所谓的包过的。 给你一些学习软考需要注意的要点&#xff1a; 1、深入理解考试内容&#xff1a; 在准备软考之前&#xf…

【redis】redis持久化分析

目录 持久化Redis持久化redis持久化的方式持久化策略的设置1. RDB&#xff08;快照&#xff09;fork(多进程)RDB配置触发RDB备份自动备份手动执行命令备份&#xff08;save | bgsave&#xff09;flushall命令主从同步触发动态停止RDB RDB 文件恢复验证 RDB 文件是否被加载 RDB …

面试中算法(删去n个数字后的最小值)

有一个整数&#xff0c;从该整数中去掉n个数字&#xff0c;要求剩下的数字形成的新整数尽可能小。 分析&#xff1a;使用栈的特性&#xff0c;在遍历原整数的数字时&#xff0c;让所有数字一个一个入栈&#xff0c;当某个数字需要被删除时&#xff0c;&#xff08;即栈顶数字&g…

期权扫盲贴:基础知识汇总,如何开通低佣期权账户(建议收藏)

一、什么是场内期权&#xff1f; 场内期权&#xff0c;也被称为交易所期权&#xff0c;是指在证券交易所内进行交易的标准化期权合约。 场内期权的交易是由证券交易所发布和监管的&#xff0c;具有统一的合约规格和交易规则&#xff0c;因此方便投资者进行交易。 以中国证券…

智慧公厕建设,打造智慧城市基础设施新亮点

公共厕所是城市基础设施的重要组成部分&#xff0c;而智慧公厕的建设则是现代城市管理的创新之举。为了实现公厕的精细化管理和提供更便捷的服务&#xff0c;推进智慧公厕建设必须要实现技术融合、业务融合、数据融合的目标&#xff0c;跨越层级、地域、系统、部门和业务的限制…

【C语言】——联合体与枚举

【C语言】——联合体与枚举 一、联合体1.1、联合体类型的声明1.2、联合体的特点1.3、相同成员的结构体和联合体对比1.4、联合体的大小计算1.5、联合体的应用举例 二、枚举2.1、枚举类型的声明2.2、枚举类型的优点 一、联合体 1.1、联合体类型的声明 联合体也叫做共用体   与…

每日OJ题_贪心算法三②_力扣553. 最优除法

目录 力扣553. 最优除法 解析代码 力扣553. 最优除法 553. 最优除法 难度 中等 给定一正整数数组 nums&#xff0c;nums 中的相邻整数将进行浮点除法。例如&#xff0c; [2,3,4] -> 2 / 3 / 4 。 例如&#xff0c;nums [2,3,4]&#xff0c;我们将求表达式的值 "…

冲突:故事型游戏的燃料

在故事型游戏中&#xff0c;冲突是推动情节发展的关键因素。没有冲突&#xff0c;故事就会变得平淡无奇&#xff0c;缺乏吸引力。在这篇博客中&#xff0c;我将探讨冲突在故事型游戏中的重要性&#xff0c;以及如何利用冲突为游戏增色添彩。 首先&#xff0c;让我们来了解一下冲…

【Ajax零基础教程】-----第一课 Ajax简介

一、什么是ajax ajax即 Asynchronous javascript And XML (异步 javaScript 和 XML) 是一种创建交互式&#xff0c;快速动态应用的网页开发技术&#xff0c;无需重新加载整个网页的情况下&#xff0c;能够更新页面局部数据的技术。 二、为什么使用Ajax 通过在后台与服务器进行少…

水表集中抄表器是什么?什么叫水表集中抄表器?

1.简述 水表集中抄表器是一种智能化的智能设备&#xff0c;主要运用于高效率、清晰地收集管理方法住户或商业客户的用水数据信息。它摒弃了传统的人工抄表方法&#xff0c;完成了远程控制全自动抄表&#xff0c;大大提高了水务管理的效率和精确性。 2.功能特点 2.1实时数据分…

抖音短视频矩阵系统技术源头/源代码开发部署/SaaS贴牌/源码api代开发

抖音短视频矩阵系统技术源头/源代码开发部署/SaaS贴牌/源码官方平台api授权代开发 一、短视频矩阵系统源码开发步骤 短视频矩阵系统的源头开发步骤通常包括以下几个关键阶段&#xff1a; 1.需求分析&#xff1a;明确系统的目标用户、功能需求、性能要求等。 2.系统设计&…

网络机顶盒哪个好?2024畅销网络机顶盒排行榜

因买网络机顶盒踩雷的人不在少数&#xff0c;许多不懂网络机顶盒哪个好的消费者在挑选时会参考网络机顶盒排行榜&#xff0c;这次小编带来了业内最新发布的热销网络机顶盒排行榜&#xff0c;想买网络机顶盒可以看看入围的以下品牌&#xff0c;是目前最受消费者欢迎的品牌。 一&…

python菜鸟级安装手册-上篇

python安装教程 电脑-右键-属性&#xff0c;确认系统类型和版本号&#xff0c;比如本案例系统是64位 win10 点击python官网&#xff0c;进行下载 适用于 Windows 的 Python 版本 |Python.org 选择第一个安装程序64位即可满足需要&#xff0c; 嵌入式程序包是压缩包版本&…

19.删除链表的倒数第N个结点

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&#xff1a;…

纯血鸿蒙APP实战开发——自定义安全键盘案例

介绍 金融类应用在密码输入时&#xff0c;一般会使用自定义安全键盘。本示例介绍如何使用TextInput组件实现自定义安全键盘场景&#xff0c;主要包括TextInput.customKeyboard绑定自定义键盘、自定义键盘布局和状态更新等知识点。 效果图预览 实现思路 1. 使用TextInput的cu…

借势母亲节h5小游戏的作用是什么

企业商家往往喜欢借势节日开展营销&#xff0c;母亲节作为5月的重要节日自然不可错过&#xff0c;不同行业商家都有自己开展互动想要实现的效果&#xff0c;如品牌宣传曝光、引流及渠道跳转等。 基于微信社交属性&#xff0c;有利于品牌发展&#xff0c;在【雨科】平台拥有多款…

stm32和树莓派的区别?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「stm32的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;Stm32和树莓派是两个不同的领域…

MyCat安装

MyCat安装 官网下载地址打不开说明采用站点的方式进行下载基础包 &#xff1a;程序包&#xff1a; 配置原型库数据源root.user.json 配置文件说明&#xff08;默认配置&#xff09; Mycat启动授权启动mycat启动mycat查看mycat日志连接Mycat 官网下载地址打不开说明 官网可能受…

二维码怎么播放视频?视频快速转二维码的方法

现在分享视频时&#xff0c;很多人都会采用视频生成二维码的方式&#xff0c;来让其他人通过扫描二维码查看视频。选择使用这种方式可以让更多人同时扫码查看视频&#xff0c;不需要传输或者下载存储&#xff0c;提升视频传播的速度&#xff0c;而且用户的体验效果更好。 那么…

ICC2:如何解决pin density过高引起的绕线问题

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 为了追求极致的利用率,综合往往会使用大量的AOI/OAI等多pin cell,然而后端实现过程中,工具为了解决绕线难题,又会通过降低local density的方法实现反向奔赴,即便如此,绕线后仍会残留不少问题,…