Neovim Ruby

Gem Version Travis Coverage Status Code Climate

Ruby bindings for Neovim.

Warning: This project is currently incomplete and unstable.

Installation

Add this line to your application's Gemfile:

gem "neovim"

And then execute:

$ bundle

Or install it yourself as:

$ gem install neovim

Usage

You can control a running nvim process by connecting to $NVIM_LISTEN_ADDRESS. Start it up like this:

$ NVIM_LISTEN_ADDRESS=/tmp/nvim.sock nvim

You can then connect to that socket to get a Neovim::Client:

require "neovim"
client = Neovim.attach_unix("/tmp/nvim.sock")

The client's interface is generated at runtime from the vim_get_api_info RPC call. Refer to the docs for details.

Plugins

The neovim-ruby-host executable can be used to spawn Ruby plugins via the rpcstart command. A plugin can be defined like this:

# $VIMRUNTIME/rplugin/ruby/my_plugin.rb

Neovim.plugin do |plug|
  # Define a command called "SetLine" which sets the current line to the sum of
  # two values. This command is executed asynchronously, so the return value is
  # ignored.
  plug.command(:SetLine, :nargs => 1) do |nvim, str|
    nvim.current.line = str
  end

  # Define a function called "Sum" which adds two numbers. This function is
  # executed synchronously, so the result of the block will be returned to nvim.
  plug.function(:Sum, :nargs => 2, :sync => true) do |nvim, x, y|
    x + y
  end

  # Define an autocmd for the BufEnter event on Ruby files.
  plug.autocmd(:BufEnter, :pattern => "*.rb") do |nvim|
    nvim.command("echom 'Ruby file, eh?'")
  end
end

After a call to :UpdateRemotePlugins, plugins will be auto-loaded from the $VIMRUNTIME/rplugin/ruby directory.

Contributing

  1. Fork it (http://github.com/alexgenco/neovim-ruby/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request