640?wx_fmt=gif

工欲善其事,必先利其器。除了一些主流的编辑器,在开源界,又有哪些精小却非常实用的文本编辑器呢?

640?wx_fmt=png

作者 | Jure Triglav

译者 | 弯月,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

多年来,我一直在为找到“完美”的协作文本编辑器而坚持不懈地努力。我想找的可不是随随便便的协作文本编辑器,而是开源、实时协作、基于Web、拥有很多丰富功能的文本编辑器(不仅仅是纯文本,还有结构化的内容)。因此,这篇文章只关注非常小众的开源工具以及支持它们的技术,如果你有兴趣进一步研究的话,可以参照这个持续更新的编辑器列表(https://github.com/JefMari/awesome-wysiwyg)。


640?wx_fmt=png

故事的开始

 

以前,我就多次深入不计其数的实时协作资源库中,所以我可以轻车熟路地探索这个资源库的最深处。通常每次刚开始的时候,我都会为那些新的底层技术和研究论文感到非常兴奋和惊奇,后来就会渐渐地感觉呼吸不畅想要喘口气(毕竟水太深了),于是我会转而探索应用方面的研究;再到后来,我的状态大约可以形容成:“我是不是太笨了?”(也许吧),因为文档、演示程序和代码总是不完全匹配或根本讲不通,还有服务器上的协作组件无法启动,或者两个以上的用户输入同一个单词的极端情况,等等……你明白我的意思吧(让我浮出水面喘口气)。从那以后,我一时间无法再继续这个主题,所以后来这个想法就进入了冬眠,我一边写代码一边静静地凛冽的寒冬过去。直到下一次我再次试图研究这个主题,然后一切周而复始!

640?wx_fmt=png

潜水的过程

那是2017年,我对一篇研究论文中描述的算法(CRDT的一种)产生了浓厚的兴趣,我花了几天时间用JavaScript实现了这个算法,结果发现论文本身有一个极端情况没有解决。当时,我联系了作者,却没有得到任何回复。后来我发现另一个团队用类似的算法解决了这个特殊的极端情况,但是他们的实现略有不同,也许我可以把他们的Lisp代码移植过来……,等一下!什么情况?我当然不希望通过一个全新的算法解决研究论文中的问题!我在干嘛?让我们重新整理一下。

我(也许你也是,亲爱的读者)真正想要的是,一个可以在产品中即插即用的编辑器。一个能够解决实时协作问题的解决方案。一个能够让相隔几万里的多个用户编辑同一个文档的编辑器,他们按下键盘上的键就可以编辑结构化文档,并在屏幕上显示彼此的更改。仅此而已。然而,编辑器很难做,而我也从未找到过这样的工具。

直到现在。

现在是2019年,我忍不住再次回归,然而,这次不仅发现了一个神奇的编辑器,而且还有两个势均力敌的编辑器可以满足上门那串长长的要求。我原本打算介绍整体的情况,并列举出每种协作文本编辑器,但这似乎没有太多价值。所以,我们还是看看这两款有望成为最终赢家的编辑器吧。

尽管如此,我们还是能选出两款编辑器,所以你可以从中选择一个,客观地看看哪个更适合自己。我利用以下分类进行了深入的科学分级(我将用*来表示推荐指数):

  1. 开放许可证:加一颗星    (这实际上也是一个排除标准)

  2. 支持图像:加一颗星

  3. 支持表格:加一颗星

  4. 支持列表:加一颗星

  5. 支持数学:加一颗星

  6. 支持实时协作:加一颗星

  7. 后台服务可用:加一颗星

  8. 支持远程光标和远程选择:加一颗星    (表示你可以看到其他用户的光标)

  9. 离线支持:加一颗星    (这个很难判断)

  10. 是否用于产品:加一颗星

  11. 移动支持:加一颗星

因此,根据以上评分机制,编辑器最多可以获得11颗星。下面就让我们一起来看看吧!

 

640?wx_fmt=png

CKEditor 5

 

640?wx_fmt=png

CKEditor 5的界面

首先,让我们来看看CKEditor 5,这是一款新发布的高质量编辑器。CKEditor 5很漂亮。我知道,漂亮不是标准之一,但是漂亮也很重要啊(你也同意,对不对),所以我必须说出来。这个编辑器可以获得很多星星:拥有GPL许可(虽然有一些限制,+1颗星);支持图像、表格、列表(+3颗星);插件支持数学(+1颗星);支持实时协作与远程光标和选择(+2颗星)。CKEditor背后的团队写了一篇关于他们利用操作转换实现了该编辑器的文章(https://ckeditor.com/blog/Lessons-learned-from-creating-a-rich-text-editor-with-real-time-collaboration/)。

然而,我没有看到实时协作所需的后台服务,而且所有文档都指向其云服务——这是一个必须的付费组件,即使在与GPL兼容的项目中也是如此。

离线支持的情况很难判断,但看起来并没有做到完全支持(短暂的中断连接还好,但是如果你离线数天情况就不好说了),所以给半颗星?移动支持也是如此,全面的支持还在开发中(+0.5颗星)。最后一点,肯定有许多产品在使用CKEditor,但我没有找到利用它构建的产品的列表(+0.5颗星)。

这款编辑器还不错,但缺乏可用的开源协作服务器确实让人有点失望。

推荐指数:8.5颗星

 

640?wx_fmt=png

Atlaskit编辑器

 

640?wx_fmt=png

Atlassian的Atlaskit编辑器

大约在一年前,Atlassian推出并开源了Atlaskit设计系统,随之而来的还有其他好东西,其中包括一个成熟的编辑器——基于ProseMirror的Atlaskit编辑器。我真心觉得这可能就是一直以来我苦苦追寻的那个编辑器!这款编辑器拥有Apache 2.0许可的授权(这可以说是一个非常宽松的开源许可,+1颗星)。它可以很好地支持图像、表格和列表(+3颗星)。大多数编辑都非常缺乏表格的实现,特别是做得非常好的就更加寥寥无几了:

640?wx_fmt=gif

Atlaskit编辑器中的表格管理

遗憾的是,这款编辑器不支持数学,但由于编辑器本身是基于ProseMirror的,因此添加现有的解决方案应该不会太困难(+0.5颗星)。它支持实时协作与远程光标和选择(+2颗星),而且它的用户界面是我见过的编辑器实现最好的一个(例如,当远程用户的光标与你自己的重叠时就会变暗,还有其他非常讨人喜欢的细节)。此外,从我的测试中,离线支持似乎非常稳固(+1颗星),这可能是由于ProseMirror使用了绝对权威的的协作方法。现在我们已经有7.5颗星了,我们还有很多项需要考察,继续!不幸的是,现实再一次击碎了我的美梦,与CKEditor一样,实时协作没有后台服务。失望,非常失望。我在想有没有什么办法解决这个问题。无论怎样,让我们先看完评分标准,我只关心星数:肯定有产品在使用它(数百万用户),它确实有移动支持(+2颗星)。就在我打算即将宣布获胜者(总共9.5颗星),并发布本文的时候,却出现了新情况。原来这款编辑器中使用的标志和图标,以及许多其他Atlaskit组件,都使用了非常严格的ADG许可,该许可声明你不能在Atlassian Universe之外的地方使用它们。尤其是编辑器中广泛使用并紧密集成的一些图标。第二点让人太失望了,我要拿走1颗星了。于是,最后这个编辑器拿到了8.5颗星,与上一个编辑器打成了平手。

等等,如果我们可以处理一下这些图标呢......

协作文本编辑器最新的技术发展的今天,我们仅有的两款编辑器,尽管它们拥有非常优异的功能,但我们根本无法在开源项目中使用——由于许可的问题,以及缺乏公开的构建块,或两者兼而有之。如果要真是这样,那我们真是太不走运了。

所以,我首先做了服务器部分(后台使用了PostgreSQL,并利用了PubSweet框架和REST / WebSockets共同提供的支持),点击这里可以获取代码(https://github.com/jure/pubsweet-blogger/blob/master/server/component-atlaskit-collab/src/collab.js)。这些代码很简单,而且也可以达到我们的目的,并提供持久的文档和实时通信渠道。令人惊讶的是,在庞大的ProseMirror社区的帮助下,我在没有准确的接口规范的情况下,居然搞清楚了这些东西的工作方式(+1颗星)。

接下来,我用Feather套件中的图标替换了该编辑器使用的图标。具体来说,这需要替换三个软件包,而且由于ADG许可禁止任何类型的衍生作品,我们只能从头开始重做这些软件包。由于这个原因,该编辑器可能会丢失一些功能,主要体现在可访问性方面,但它为进一步开发提供了良好的开放基础。例如,在某些情况下,图标本身缺少更好的替代品,如果你希望为此项目做出贡献的话,这可以成为你的第一个目标(+1颗星)!

经历了以上种种之后,我们现在距离一个完美的评分只差半颗星了,当初刚开始这样的探索时,我根本无法想象能走到今天这一步。这也意味着,在这场比拼中有一个明显的赢家,我宣布:最终Atlaskit的编辑器因其多样化、开放和强大的ProseMirror社区而获胜。点击这里,查看这个项目的文档(https://github.com/jure/pubsweet-blogger)。如果你刚刚开始做一个新项目,而且也在考虑实时协作的功能,那么就可以从这里开始积极的探索了。最后,提醒你一些注意事项(https://github.com/jure/pubsweet-blogger/blob/master/README.md)。

 

Atlaskit编辑器的实时编辑功能演示

推荐指数:10.5颗星

 

640?wx_fmt=png

值得一提

 

还有两款编辑器非常值得一提,即使它们现在还没有自带的实时协作,但是它们背后都有强大的支持库,因此有可能会添加,也有可能已经在计划中了。

640?wx_fmt=png

Wax编辑器(基于ProseMirror的文字处理器)

首先是Wax(以古老的蜡片命名),Coko Foundation的编辑器,准确来说应该是文字处理器,最开始是在Substance库之上构建的,现在使用ProseMirror重新构建过了,功能绝对非常丰富。虽然与我们给星的标准不完全相同,但该文字处理器拥有一些非常棒的功能。 Wax最初是为书籍制作应用程序而构建的,它支持笔记(书籍中常用的编号注释)、跟踪更改、查找和替换等。或许这些功能我们可以给圈圈?如果是这样的话,Wax将获得4颗星(开放许可证,支持图像、列表,还可用于产品)和4个圈圈。

 

640?wx_fmt=png

Texture

 

640?wx_fmt=png

Texture,一款基于Substance的编辑器

最后,还有一个很重要的编辑器,这是一款非常特殊且专业的开源编辑器,可用于以JATS格式(期刊文章的XML标准)生成科学内容。如果我们也采用给星或给圈圈的方式的话,那么就要数不过来了:开放许可,支持表格、图像,深入支持数学,支持参考和交叉引用、列表、元数据等等。重申一下,Wax和Texture都是非常出众的编辑器,我之所以没有把它们纳入给星排名是因为它们缺乏实时协作功能,而实时协作才是本文重点关注的功能。

 

640?wx_fmt=png

总结

 

如果你正在构建一个系统,而编辑器中的实时协作是关键组件,那么希望这篇对你有所帮助。在过去的一年里,该领域已经发展成熟,而且现在我们有很多即插即用的开放式解决方案。也许在你的帮助下,明年的这个时候我们将有一整套开放项目可供学习。也许,我们还会在不知不觉中使用建立在这些开放层之上的工具。

原文:https://juretriglav.si/open-source-collaborative-text-editors/

本文为 CSDN 翻译,转载请注明来源出处。

太嚣张了!拿到这份Python学习资料的人!

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

【END】

640?wx_fmt=jpeg

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

640?wx_fmt=jpeg

 热 文 推 荐 

 Wi-Fi 联盟撤销华为资格;华为已熟练掌握 ARM 架构修改;苹果 2020 年或推 5G 手机 | 极客头条

如何打造工业物联网帝国?

Python 爬取 620 首虾米歌曲,揭秘五月天为什么狂吸粉?!

☞编程机器人哪家好?灵跃模组机器人硬核评测!

薪水超过程序员,身为“经理”却挨打,产品经理究竟是怎样一种存在?

震惊! 原来黑客洗钱的套路竟如此简单! 被盗的1600万美元就这样没了?

全球再迎超级飓风,黑客可利用微软“蠕虫级”高危漏洞暴击全球

☞10个数据科学家常犯的编程错误(附解决方案)

技术引路:机器学习仍大有可为,但方向在哪里?

☞大神!这段代码让程序员躺赚200W,源码简单,你怎么看?

640?wx_fmt=gif点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐