Skip to main content

Control Neovim instances using "nvr" commandline tool

Project description

Logo

Intro

nvr is a tool that helps controlling nvim processes.

It basically does two things:

  1. adds back the --remote family of options (see man vim)

  2. helps controlling the current nvim from within :terminal

To target a certain nvim process, you either use the --servername option or set the environment variable $NVIM_LISTEN_ADDRESS.

Since $NVIM_LISTEN_ADDRESS is implicitely set by each nvim process, you can call nvr from within Neovim (:terminal) without specifying --servername.

Installation

$ pip3 install neovim-remote

Usage

Start a nvim process (which acts as a server) in one shell:

$ NVIM_LISTEN_ADDRESS=/tmp/nvimsocket nvim

And do this in another shell:

$ # Spares us from using --servername all the time:
$ export NVIM_LISTEN_ADDRESS=/tmp/nvimsocket
$ # This is optional, since nvr assumes /tmp/nvimsocket by default.

$ # Open two files:
$ nvr --remote file1 file2

$ # Send keys to the current buffer:
$ nvr --remote-send 'iabc<esc>'
$ # Enter insert mode, insert 'abc', and go back to normal mode again.

$ # Evaluate any VimL expression, e.g. get all listed buffers:
$ nvr --remote-expr "join(sort(map(filter(range(bufnr('$')), 'buflisted(v:val)'), 'bufname(v:val)')), "\""\n"\"")"
.config/git/config
vim/vimrc
zsh/.zprofile

See nvr -h for all options.

FAQ

How to open directories?

:e /tmp opens a directory view via netrw. Netrw works by hooking into certain events, BufEnter in this case (see :au FileExplorer for all of them).

Unfortunately Neovim’s API doesn’t trigger any autocmds on its own, so simply nvr /tmp won’t work. Meanwhile you can work around it like this:

$ nvr /tmp -c 'doautocmd BufEnter'

Reading from stdin?

Yes! E.g. echo "foo\nbar" | nvr -o - and cat file | nvr --remote - work just as you would expect them to work.

Exit code?

If you use a recent enough Neovim, nvr will use the same exit code as the linked nvim.

E.g. nvr --remote-wait <file> and then :cquit in the linked nvim will make nvr return with 1.

Talking to nvr from Neovim?

Imagine nvr --remote-wait file. The buffer that represents “file” in Neovim now has a local variable b:nvr. It’s a list of channels for each connected nvr process.

If we wanted to create a command that disconnects all nvr processes with exit code 1:

command! Cquit
    \  if exists('b:nvr')
    \|   for chanid in b:nvr
    \|     silent! call rpcnotify(chanid, 'Exit', 1)
    \|   endfor
    \| endif

Demos

(Click on the GIFs to watch them full-size.)

Using nvr from another shell: Demo 1

Using nvr from within :terminal: Demo 2

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

neovim-remote-1.4.1.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

neovim_remote-1.4.1-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file neovim-remote-1.4.1.tar.gz.

File metadata

  • Download URL: neovim-remote-1.4.1.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for neovim-remote-1.4.1.tar.gz
Algorithm Hash digest
SHA256 10a728fe582e14f3edb819714ec3b4aeb77fdb273cd72107fb418dad5a2e4024
MD5 a44b23f766fa5978a9985230c40a24c6
BLAKE2b-256 af638996ca20e6c89315a7dcc850e0a5c2809f10b0c45a28123b9d4f492924bc

See more details on using hashes here.

File details

Details for the file neovim_remote-1.4.1-py3-none-any.whl.

File metadata

File hashes

Hashes for neovim_remote-1.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 80f4195f7d8ee51c0c94acbb05172a1208aecfa931e88fd93fff1c20d001a321
MD5 14ac98dd858d98eec56ac563fb9e0475
BLAKE2b-256 77d3dadd4ba8312770b27753d1ab3018e38472f3e0787541338b4449630aa595

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page