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

.dir-locals.el 也可以考虑,使两者既可以独立,又可以针对一个 project 进行协作。 这种协作,在 Mac 下使用多桌面的切换,会显得方便些。

想起了 edit-server.elatomic-chrome,这些在浏览器输入框中跳转到emacs编辑后又返回的工具,EVS是不是也和这些工具原理有相同之处,只是把浏览器换成了vsc

我希望有一天可以把自己的 meow 移植到 vscode 上面。

1 个赞

有个 Dance,就是貌似不是很好用。

我觉得可以 通过 vscode-neovim 写 lua 配置可以写一个简单的实现

虽然c#后端有OmniSharp 但是开发unity的体验还是挺差的。另外,今天vscode写了一点unity的代码,发现vscode 真的就非常的流畅,就算是emacs上最快的lsp-bridge也没法媲美。

差距在哪? 是 VSCode 在 LSP 之外还有额外的功能?

移植的话就肯定是要零依赖,不然就很重量级

在查找函数定义,还有引用那边。这个就比较复杂了,因为unity里面有的代码存在meta里面?lsp 在查找函数定义的时候就会找不到(lsp 返回空)。流畅的话,其实去试试就能感知出来了。

vscode 的c#插件似乎走的不是lsp那一套.

虽然lsp协议是微软提出来的,但是微软自己家给vscode使用的插件很多都是夹带私货的,很多都不遵循自家的lsp协议和dap协议。

比如python,vscode使用的插件是由pylance提供的服务,pylance闭源而且不允许非vscode以外的编辑器使用。pylance比pyright的一点显著的大进步是,它可以同时显示类型签名以及文档,pyright的话,如果一个函数有类型签名,那么就不会显示文档。微软官方将之视为pylance的feature,明确表示不会给pyright提供。Show documentation when entering arguments of a function · Issue #1280 · microsoft/pyright · GitHub

vscode官方的typescript插件是tsserver,而不是type-script-languga-server,它并不遵循lsp协议,typescript-language-server有性能问题,体验要比tsserver差很多. tsserver should implement the Language Server Protocol · Issue #39459 · microsoft/TypeScript · GitHub

同时,vscode-js-debug这个插件也并不遵循dap协议,因此别的编辑器也不能直接使用。help setting up vscode-js-debug · Issue #82 · mfussenegger/nvim-dap · GitHub 比如这个 issue 的问题,vscode原先支持 dap 的 node-debug2 插件已经停止维护。

不过这个毕竟是微软,这种名义上搞开源,实际上夹带私货这种事情,一点都并不奇怪。作为对比,谷歌推出的 gopls 就是标准的 lsp,并不搞私货,主要由苹果维护的 clangd 也是标准的 lsp。

7 个赞

这种开源的形式,结果就是微软自己开发的语言服务器其他编辑器不兼容,社区、语言开发的语言服务器 VSCode 能完美兼容,VSCode 成最大受益者,只能说不愧是微软

1 个赞

是的,我觉得python微软搞个pylance也就罢了,毕竟python还有pylsp是社区维护的,typescript作为微软自己维护的语言,做个tsserver只有vscode能用是最搞笑的。别的公司自己维护的语言咋都支持标准的lsp。苹果的swift基本上只用来做GUI所以基本上只用xcode来写,它们也做了一个标准的sourcekit-lsp。

看来已经有类似的扩展了,oomotion,不知道能不能符合你的需求。另外类似的还有 Dance ,Kakoune Mode

hi,请问这个配色叫什么呀?

挺有趣的概念,我可以具体的理解为“在emacs和vscode中同步打开的文件和编辑位置并互相跳转”吗?

那么或许可以实现一个协议,通过插件等方式,接入各种编辑器和IDE,获取当前打开的文件和编辑位置,并在其中同步。

如果是单纯的跳转,没必要搞一套协议那么麻烦。

从 VSCode 到 Emacs(或从 Emacs 到 VSCode):

从 Obsidian 到 Emacs:

2 个赞

:+1:强啊,这样对我个人来说就算打通两个软件了,理论上提供了API或者能通过参数打开到指定行列的编辑器/IDE都能用这方法吧?

是的,VSCode 和 Obsidian 都是通过第三方插件获取的光标位置(私有 API?),传递给命令行中的 Emacs。

1 个赞

我的想法也是跟你一样,想办法执行类似

# mac
open -a /Applications/Emacs.app; emacsclient --eval "(progn (find-file \"$file\") (goto-line $line) (forward-char $column) (recenter))" --no-wait