有没有可能实现一个编辑器server,和前端分开....

现在编辑器太多了。动不动就弄出来一个。太多重复劳动。既然不同编辑器只是操作界面操作方式上的差异来适应不同的需要。那是否可以把编辑器弄成server+前端的方式。把编辑操作和编辑方式分开。 这样,server负责编辑操作,永恒不变,永远都是字符串添加删除,移动。。。 前端呈现不同的方式。谁愿意搞花样都行。 可以节省一大部分的重复劳动。

这种方式再往下发展,可以server运行在云端。用户在本地有一个前端。或者直接用浏览器作前端。会有很多奇妙的应用场景出现。

各位觉着这种思路怎么样?

我觉得不如利用人工智能分析自然语言(语音、文本)+手势/眼动/脑电波,自动生成对应命令,编辑对应文本。如果能支持多语种,人类就跨越巴别塔了。

就像 Siri 都可以回复你问的天气怎么样了,凭什么不可以帮你编辑文本呢?

Server 端是个伪装成聊天机器人的编辑器,你跟它聊着天儿就把事儿办了,想想就很爽啊。

附录

  • 语音控制领域的 Emacs 探索:
  • 巴别塔

巴别塔是《圣经·旧约·创世纪》第11章故事中人们建造的塔。根据篇章记载,当时人类联合起来兴建希望能通往天堂的高塔;为了阻止人类的计划,上帝让人类说不同的语言,使人类相互之间不能沟通,计划因此失败,人类自此各散东西。此事件,为世上出现不同语言和种族提供解释。

不矛盾。如果有了server。完全可以实现一个siri的前端。这样具体的编辑器操作就不用在实现一遍了。只需要一个ai前端即可。ait的只搞ai。界面的只搞界面,编辑的只搞编辑。

我本来只想一个新的操作界面。结果我还需要自己实现一个文件编辑的实现。这部分本应该有一个类似”:文件编辑引擎“的东西负责。。。

那么 Evil 可不可以认为是 Emacs Server 的 Vim 前端呢?

Neovim 在本地是核心和 GUI 分离的,比如你要用 Neovide 就必须提前安装 Neovim,不像 VimR 内置了一个 Neovim 版本。

1 个赞

编辑器的大量工作都在前端光标移动, 如果有不同的渲染前端, 相当于每个光标移动函数都要适配不同的平台(mac, windows, linux gtk, web javascript), 工作量很大。

如果像 Flutter 那样干, 在各平台统一矢量绘制库, Google这么有钱都干的不咋样, 社区基本上不可能。

编辑器前端分离比后端LSP这种独立难多了, 而且浏览器这么复杂, 只渲染文本不会比 Gtk/Qt/Cairo 画更快。

很多时候做不到, 不是想不到,而是谁去干, 要花多少钱。

3 个赞

你要找的是不是:scintilla 编辑器控件

1 个赞

你的编辑器server可能是vcs,例如git。 你的前端就是正常的,所有的可用的editor。 你需要做的是写一个crontab,隔一秒git push一次。

不太了解这个。听你这么一说,是有点那个意思了,

比如emacs vim 其实都可以用我说那种编辑引擎…

就算不这么实现。编辑器也需要跨平台。这部分活省不下。

这个我不知道。

我想的更像是一个term终端 或者浏览器和webserver。

有没有可能,其实流行的编辑器也就5种左右

它们唯一能共同的部分,其实稍微学过数据结构的人就能写出来,能写得再好点也就写到 scintilla 这种程度。

然后 scintilla 题主都没听说过也算了,实际上功能和 emacs 之类也完全不能比

没有啥技术是跨所有平台的,因为各平台也是在发展。

也许你需要的其实就是vscode,但是要所有编辑器都遵循一套规则,那其实是反人性的。

谁去定统一所有编辑器的规则协议?任何组织都没有足够能力去预见未来的创新,即使像LSP这种只是定制补全都要花费很多精力,你说的所有编辑器能力真是耗费无穷精力和金钱。

巴比伦塔不是没有能力造起来,只是很多事情和人性相冲突。

OP 假设了「不同编辑器除了操作方式 (ie. 接口) 以外没有实质区别」,但实际上不同的功能往往需要非常不同的内部实现。甚至相同的功能仅仅是不同的实现,在用户体验上都会有很大的区别。如 Emacs 的 display engine 高度可定制(参见 (elisp) Display Property),如果强行把它与 Lisp 剥离,会失掉很多玩法。

编辑器至少有 buffer 这一个共性,对吧?但即使是 buffer,也有不同的数据结构 (gap buffer, rope 等)。一个最简单的例子:一些编辑器支持超大文件编辑,而这几乎一定是要特殊实现的。

tl;dr: 我认为各编辑器之间的共性太少,还不足以「统一内部实现」。

2 个赞

neovim不就是前后端分离的吗?

vscode也有server, 有remote-development套件.

就是看到这些有分离我才想到这个。

就算不是按我想的那种分隔开,一个后端对多个前端。前后分离还是有好处的,可以一个后端对前端的定制。

已经有一部分插件是 使用websoket通信 了,好处是用任何语言都可以,我理解websoket通信是web的,不需要在本机运行,如果不考虑安全性,这个是不是其实已经是服务端和客户端分离了?

我的 org内容管理系统 也有想用websoket实现,但因为实现的功能都是些比较简单的,用http就够了,也不追求高性能,就没必要非要用上websocket。 感觉http、websocket天生就是服务端和客户端分开的