nvimhost 1.1.1

Nvim (neovim) host provider and API client library.


To use this package, run the following command in your project's root directory:

pipeline status DUB Package

nvimhost-d

Neovim (nvim) host plugin provider and API client library in D.

nvimhostd-logo

Docs

The following snippets show how you can use this library, check out the examples for more information. This GIF shows the demo-plugin below in action:

screencast

Goals

  • Provide a library for high-performance plugins (it takes between 2-4ms on average via msgpack RPC to call a function).
  • Provide an API for other projects to integrate with nvim.

Plugin snippet demo

import nvimhost.plugin;
import nvimhost.api;

struct DemoPlugin {

    NvimAPI nvim;

    this(ref NvimAPI nvim) {
        this.nvim = nvim;
    }

    // sync function with one argument
    @NvimFunc("Greet")
    string greet(string name) {
        return "Hello " ~ name;
    }

    // sync function with multiple arguments
    @NvimFunc("SumBeginToEnd")
    int sumBeginToEnd(int begin, int end) {
        import std.range;
        import std.algorithm.iteration;
        import std.stdio;

        return cast(int) iota(begin, end).sum();
    }

    // sync function calling async (non blocking) nvim functions
    @NvimFunc("SetVarValueSync")
    int setVarValue(int i) {
        import std.conv;

        nvim.commandAsync("let g:test_var_value=" ~ i.to!string);
        return i;
    }

    // async function calling both async and sync nvim functions
    @NvimFunc("SetVarValueAsync", Async)
    void setVarValueAsync(int i) {
        import std.conv;

        nvim.commandAsync("let g:testasync_var_value=" ~ i.to!string);
        nvim.command("echomsg 'hello world sync!'");
    }

}

void main() {

    // make sure you source this .vim file in neovim, since this will bootstrap
    // the binary and register the plugin
    auto pluginDstFile = "~/.config/nvim/settings/demo-plugin.vim";
    // template instantiate DemoPlugin
    auto plugin = NvimPlugin!(DemoPlugin)("demo-plugin", pluginDstFile);
    // keep it running
    scope (exit) {
        plugin.keepRunning();
    }
}

API client snippet demo

void main() {
    import std.stdio;
    import nvimhost.api : NvimAPI;
    auto nvim = NvimAPI();
    nvim.enableLog();

    // Calling a simple command on Neovim
    nvim.command("echomsg 'hello world!'");

    // Iterating over loaded buffers
    auto buffers = nvim.vimGetBuffers();
    foreach (buffer; buffers) {
        writeln("buffer #", buffer);
    }
}

You can find the code documentation generated by the dub registry here.

How to install and build

  • Fetch it using dub, and use it as a library in your source code by importing the nvimhost package:

dub fetch nvimhost
dub build --build=release

For more information about building binaries, check out the .gitlab-ci.yml file

Testing

Both unit tests and system tests (end-to-end) testing with nvim have been automated in the CI.

Authors:
  • @viniarck
  • viniarck@gmail.com
  • Vinicius S. Arcanjo
Dependencies:
msgpack-d, vibe-core
Versions:
1.1.1 2019-Jan-08
1.1.0 2019-Jan-06
1.0.0 2018-Dec-31
~master 2019-Jan-08
Show all 4 versions
Download Stats:
  • 0 downloads today

  • 0 downloads this week

  • 1 downloads this month

  • 5 downloads total

Score:
0.4
Short URL:
nvimhost.dub.pm