现在编辑器太多了。动不动就弄出来一个。太多重复劳动。既然不同编辑器只是操作界面操作方式上的差异来适应不同的需要。那是否可以把编辑器弄成server+前端的方式。把编辑操作和编辑方式分开。 这样,server负责编辑操作,永恒不变,永远都是字符串添加删除,移动。。。 前端呈现不同的方式。谁愿意搞花样都行。 可以节省一大部分的重复劳动。
这种方式再往下发展,可以server运行在云端。用户在本地有一个前端。或者直接用浏览器作前端。会有很多奇妙的应用场景出现。
各位觉着这种思路怎么样?
现在编辑器太多了。动不动就弄出来一个。太多重复劳动。既然不同编辑器只是操作界面操作方式上的差异来适应不同的需要。那是否可以把编辑器弄成server+前端的方式。把编辑操作和编辑方式分开。 这样,server负责编辑操作,永恒不变,永远都是字符串添加删除,移动。。。 前端呈现不同的方式。谁愿意搞花样都行。 可以节省一大部分的重复劳动。
这种方式再往下发展,可以server运行在云端。用户在本地有一个前端。或者直接用浏览器作前端。会有很多奇妙的应用场景出现。
各位觉着这种思路怎么样?
我觉得不如利用人工智能分析自然语言(语音、文本)+手势/眼动/脑电波,自动生成对应命令,编辑对应文本。如果能支持多语种,人类就跨越巴别塔了。
就像 Siri 都可以回复你问的天气怎么样了,凭什么不可以帮你编辑文本呢?
Server 端是个伪装成聊天机器人的编辑器,你跟它聊着天儿就把事儿办了,想想就很爽啊。
巴别塔是《圣经·旧约·创世纪》第11章故事中人们建造的塔。根据篇章记载,当时人类联合起来兴建希望能通往天堂的高塔;为了阻止人类的计划,上帝让人类说不同的语言,使人类相互之间不能沟通,计划因此失败,人类自此各散东西。此事件,为世上出现不同语言和种族提供解释。
不矛盾。如果有了server。完全可以实现一个siri的前端。这样具体的编辑器操作就不用在实现一遍了。只需要一个ai前端即可。ait的只搞ai。界面的只搞界面,编辑的只搞编辑。
我本来只想一个新的操作界面。结果我还需要自己实现一个文件编辑的实现。这部分本应该有一个类似”:文件编辑引擎“的东西负责。。。
那么 Evil 可不可以认为是 Emacs Server 的 Vim 前端呢?
Neovim 在本地是核心和 GUI 分离的,比如你要用 Neovide 就必须提前安装 Neovim,不像 VimR 内置了一个 Neovim 版本。
编辑器的大量工作都在前端光标移动, 如果有不同的渲染前端, 相当于每个光标移动函数都要适配不同的平台(mac, windows, linux gtk, web javascript), 工作量很大。
如果像 Flutter 那样干, 在各平台统一矢量绘制库, Google这么有钱都干的不咋样, 社区基本上不可能。
编辑器前端分离比后端LSP这种独立难多了, 而且浏览器这么复杂, 只渲染文本不会比 Gtk/Qt/Cairo 画更快。
很多时候做不到, 不是想不到,而是谁去干, 要花多少钱。
你要找的是不是:scintilla 编辑器控件
你的编辑器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: 我认为各编辑器之间的共性太少,还不足以「统一内部实现」。
neovim不就是前后端分离的吗?
vscode也有server, 有remote-development套件.
就是看到这些有分离我才想到这个。
就算不是按我想的那种分隔开,一个后端对多个前端。前后分离还是有好处的,可以一个后端对前端的定制。
已经有一部分插件是 使用websoket通信 了,好处是用任何语言都可以,我理解websoket通信是web的,不需要在本机运行,如果不考虑安全性,这个是不是其实已经是服务端和客户端分离了?
我的 org内容管理系统 也有想用websoket实现,但因为实现的功能都是些比较简单的,用http就够了,也不追求高性能,就没必要非要用上websocket。 感觉http、websocket天生就是服务端和客户端分开的