Neovim client library and GUI, in Qt5.
C++ C CMake Python Other
Latest commit c208c1a Feb 11, 2017 @major-kolz major-kolz committed with Rui Abreu Ferreira recognize keypad

Neovim client library and GUI, in Qt5.

Build Status Build status Build Status Coverage Status Downloads


  • Qt5
  • Neovim


You can build using CMake and your build system of choice. It should build in any system where Qt5 and Msgpack can build.

For Unix call

$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make

for Windows both MSVC and Mingw are supported. Use the following

$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ cmake --build .

For MSVC build you may have to specify the VS version and build type. Always make sure the VS versions matches your Qt libraries.

$ mkdir build
$ cd build
$ cmake -G "Visual Studio 14" -DCMAKE_BUILD_TYPE=Release ..
$ cmake --build . --config Release --target install

The binaries will be under build/bin/. The GUI binary is called nvim-qt.

Using the GUI

Run nvim-qt, the nvim binary must be in your $PATH. Check nvim-qt --help for additional options.

Commands for interacting with the GUI are regular commands, available in the documentation :help neovim-gui-shim. For example to change the font call

:Guifont DejaVu Sans Mono:h13

You can set GUI options on startup, in the GUI configuration file (:help ginit.vim).


The NeovimConnector class is used to setup the connection to Neovim. It also provides you with low level methods for RPC - in general you should be using the signals/slots in the QObject returned by NeovimConnector::neovimObject()

  1. To call a function call the corresponding slot
  2. The result of the call is delivered by the corresponding signal, by convention these signals are named 'on_' + slot_name
  3. The Neovim() class is automagically generated from the Neovim metadata
  4. For Neovim functions that take the Object type we use QVariant
  5. To catch Neovim Notifications connect to the Neovim::neovimNotification signal

To Update the RPC bindings

Part of the code is auto-generated by calling Neovim to get the API metadata, and generating C++ code. This is done using a python script ( if you just want to use neovim-qt as is you don't need to worry about this, I already include the generated code in the repository.

The bindings source templates are stored under the bindings/ folder the generated code is in src/auto/.

To generate the bindings yourself you need

  • python
  • python-msgpack
  • jinja2

Just run make bindings in Unix or the equivalent build command in Windows.