4

听说 NeoVim 的优点之一是更灵活的插件架构。是否有用于在 JS 中编写插件的 API?

有一些项目似乎与此相关: neovim/node-hostneovim/node-clientfritzy/node-neovimrhysd/promised-neovim-client ,但我不知道如何使用它们。我如何访问Vim 函数或命令,或等效功能(以及这在哪里记录)?


promise-neovim-client 通过附加到它的标准输入和标准输出来与 NeoVim 进程交互。所以也许从 NeoVim 内部,我可以启动一个 promise-neovim-client 脚本,并将正在运行的 NeoVim 进程的 pid 传递给它,并且该脚本可以附加到它的标准输入和标准输出?

4

2 回答 2

6
  1. 安装节点客户端
    • npm install -g neovim
    • 运行:checkhealth确认。
  2. quickstart中,将示例代码(如下)粘贴到rplugin/node/index.jsNvim 运行时路径的某个位置例如~/.config/nvim/rplugin/node/index.js)。
  3. 运行:UpdateRemotePlugins
  4. 重启 Nvim。
  5. 尝试:SetMyLine命令(在上面的代码示例中定义)。

示例代码

function onBufWrite() {
  console.log('Buffer written!');
}

module.exports = (plugin) => {
  function setLine() {
    plugin.nvim.setLine('A line, for your troubles');
  }
  plugin.registerCommand('SetMyLine', [plugin.nvim.buffer, setLine]);
  plugin.registerAutocmd('BufWritePre', onBufWrite, { pattern: '*' });
};
于 2017-01-17T19:27:15.620 回答
1

你绝对可以用 javascript 编写 neovim 插件。来自https://github.com/neovim/neovim/blob/master/runtime/doc/remote_plugin.txt#L7

可扩展性是 Nvim 的主要目标。任何编程语言都可以用于
扩展 Nvim,而无需更改 Nvim 本身。
这是通过远程插件、与Nvim 进程具有直接通信通道(通过 |RPC|)的协同进程来实现的。

即使这些插件在单独的进程中运行,它们也可以调用、被调用
和接收事件,就像插件的代码在主进程中执行一样。

你只需要和远程 api 对话

Neovim 远程插件 (rplugin) 是通过远程 API 与 nvim 对话的任何程序(可以通过任意传输机制访问:TCP 地址、命名管道、标准输入/标准输出,...)。

我也找不到远程 API 文档。中有一些例子neovim/node-client

你也可以看看这个文件吗

于 2016-12-16T05:34:27.113 回答