折腾了一个简陋的 Neovim 的 Emacs Lisp 库

Neovim API 用 Unix domain socket 通信,Emacs make-network-process 就支持,数据格式采用 MessagePack RPC,用了我自己写的 GitHub - xuchunyang/msgpack.el: MessagePack Emacs Lisp library 。作用据我理解就是控制 Neovim,文档有提到做 GUI、remote plugin 的,我也不了解究竟怎么个用法,毕竟 vim、neovim 我都算是是新手

Many clients use the API: user interfaces (GUIs), remote plugins, scripts like “nvr” (GitHub - mhinz/neovim-remote: Support for --remote and friends.).

这个 Emacs Lisp 库很原始,没把 vim buffer, window, tab 封装成对象,一来对 vim 不熟悉,而来对 OOP 也不熟悉。

给出一个例子:

(nvim command "echo 'hello'")

表示连接 Neovim(如果还没有连过的话),调用 Neovim API 的 nvim_command 方法,参数是 "echo 'hello'",前面提到 API 是个 RPC 格式,RPC 请求需要提供方法和参数。


相关讨论:

4 个赞

Emacs控制nvim?比Evil还Evil,太邪恶了(惊喜

你呀, 总是能给我玩出点新花样.jpg

1 个赞

微服务的理念现在都开始影响 emacs 了呀 :rofl:

在emacs里调用nvim 是证明了emacs的强大呢?还是证明了nvim的强大?

前几天正讨论到因为 coc-tsserver 应用了 nvim api 而不能替代被抛弃的 typescript-language-server。现在好啦!有可能用 msgpack 曲线救国吗?

你想太多。用了coc的api 。

我记得 Neovim 已经有了一个 cl 版的 API 绑定?

可以尝试参照 nvr 仓库,实现启动/attach Neovim instance、remote-send、remote-expr 等功能,有一定适用场景。

其实没什么想太多的,我看了 coc-tsserver 的代码,引用nvim api的地方并不多,有时间准备fork一个玩玩。

当然在这讨论不合适,跑题了

有啊,https://github.com/neovim/neovim 写道:

API access from any language including C/C++, C#, Clojure, D, Elixir, Go, Haskell, Java, JavaScript/Node.js, Julia, Lisp, Lua, Perl, Python, Racket, Ruby, Rust

其中 Lisp 应该指 Common Lisp(不知道为什么大家老是把 Common Lisp 「简写」成 Lisp)。


我本来是想模仿 https://docs.racket-lang.org/nvim-client/index.html 的,这个是用 OOP 的。