花最少的,用最好的:用服务的理念去看待软件的一次尝试👉🏻EVS: [E]macs [V]SCode [S]erver

EVS: [E]macs [V]SCode [S]erver

详见👉🏻为啥要EVS?EVS是个啥?那我该怎么做?

叫Server的意思就是编辑文件是一个“服务”,这种“服务”用什么编辑器合适?不同的情景会产生不同的答案,其实就跟我们在Emacs里通常说的什么什么mode是类似的概念,不过这种理念被我拓展到应用上了。

我很喜欢Emacs,大学开始接触它,2014年就开始在工作里面用。

我同样很喜欢VSCode,开箱即用,简直就是哄着你去用它。

个人是从事Unity游戏开发的,一直都很想把Emacs真正用到工作里面。无奈Emacs的LSP用起来的感觉简直就是一言难尽,OmniSharp对于Unity的支持也仅仅限于VSCode支持良好。所以就萌生了把两个编辑器融合为一体的想法。所以就开发了这一套插件。

EVS主要分为三个部分,Emacs插件部分,VSCode插件部分,系统环境支持部分

第一次写VSCode插件,有好多坑,似乎EVS的VSCode部分插件安装包还需要现编译才能支持😅慢慢来吧

目前为止,这个系统开发时间已经超过80个小时了,因为是把两个编辑器混在一起,有很多坑,我自己填了好久,目前已经够我用了,喜欢的话可以试试看。

18 个赞

很酷啊,紫薯布丁

喜欢可以试试看😁,欢迎填坑,现在不是有EVAL嘛,有个EVS其实也可以啊

1 个赞

喜欢Emacs又喜欢VSCode怎么办?

VSCode里面的emacs-mode实在看不下去,Emacs高仿VScode又感觉很蹩脚

怎么办呢?忍痛选一个吗??

1 个赞

小孩子才做选择呢,大人全都要!!

qdy

1 个赞

只要把一种软件看成一种服务,那就好办了,所以也就有了这个EVS了😁

也就是所谓的EVS: [E]macs [V]SCode [S]erver

成年人嘛!格局大一点,不要什么什么mode!拿现成软件直接接上!

把自己的编辑能力当成一种“服务”贡献出来(就像LSP那种)!

其实主要就是奔这个理念去的,发现自己着了魔一样,停不下来,然后就开发了这个EVS了😂

脑洞好大!!!!

可惜目前只适配mac os

蹲着等大佬把cliclick移植到linux上 :stuck_out_tongue_closed_eyes:

就是一种Server的理念去理解各种软件,我以前其实想做的是把XCode跟Emacs给串起来的…后来去搞Unity了,刚刚好VSCode又特别讨我的欢心,所以就搞了这个EVS了

其实最难的那部分是VSCode快速回调外部命令,因为VSCode对于命令行的调用太敷衍了,那个插件我已经写好了,不过我们的大Emacs对于命令行调用非常友好,用emacsclient做就行了,对接部分我也给写好了。项目其实很简单,Mac和Linux的区别应该就两个了,一个是cliclick命令(模拟键盘事件),还有一个是open命令(用来指定特定App快速打开某个文件),open相关的代码就三处:

1 个赞

lol 我已经很久没用过 VSC 了,不过公司里面全部是用的它,所以可能还是会有接触到,感觉有机会用到这个包。

我其实是第一次用它,拿它打VSCode那端的插件

就是同时开Emacs和VSCode,可以打开同一个文件来回跳转。不知我的理解对吗?

理论上只要VSCode支持,用LSP在emacs中也能使用才对,不知道你说的是什么问题?

你有尝试过lsp-bridge

妈妈呀,我的脑洞打开了

有Server是好的,理论上有客户端支持,Win端的记事本都能拿来当IDE,不过这个客户端呢…是有很大的开发量的…VSCode就做的很好,因为用户群体很大,所以,坑总在挖,也总在填…目前已经是可以用的非常舒服了

Unity开发的LSP支持呢…是C#,不过Unity端的C#项目文件搭配起来…有客户端支持吗?作为一个Emacs十年的老用户,我并不介意Emacs的LSP慢,能弹个窗我就很开心了,关键问题不是LSP慢,而是没有支持啊。

简单来说,没有相关领域的LSP客户端的支持…比如说Unity,那就是理论上能做到,实际上工作量没人分,那还是没法在生产环境里面使用。理论上我们还能设计量子计算机呢…那现状呢?

没法在生产环境里面用,那就是没法用。是开Emacs和VSCode,在一个文件之间来回跳,不过你知道没有一个系统的支持,打开同一个文件,停留同一个光标上面,那需要花多少时间吗?2秒算快吗?用EVS的话1秒不到就切过去了,一般使用体验切换是在0.5秒内的…

很不错的创意呀!

没有相关领域的LSP客户端的支持

lsp 客户端不存在“相关领域”,lsp (language sever protocol)只定义通用的交互接口,只要 ls(language server)支持你要的功能,emacs/vscode/vim/… 的 lsp client 效果应该是相同的,不存在你说的情况。

我猜测楼主没有在 emacs 这边配置这个 “OmniSharp Unity language server”,开箱即用 emacs-lsp client 自然没有达到楼主想要的效果。 甚至也许它就没有对应的 ls,而只有 vscode plugin。

简单来说,你有本事拿Emacs开发Unity,再拿Emacs点开MonoBehaviour的定义,我就同意你的说法。软件一开始就是设计拿来给人用,不是让人为了个软件把自己的需求给拧歪,那不就是本末倒置了嘛