nvr is a tool that helps controlling nvim processes.
It basically does two things:
- adds back the
--remote
family of options (seeman vim
) - 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
.
$ pip3 install neovim-remote
: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 'doau BufEnter'
In one window, create the server process:
$ NVIM_LISTEN_ADDRESS=/tmp/nvimsocket nvim
In another window do this:
$ # Spares us from using --servername all the time:
$ export NVIM_LISTEN_ADDRESS=/tmp/nvimsocket
$ # Open 2 files in the server:
$ nvr --remote file1 --remote file2
$ # Send keys to the current buffer of the server:
$ # Enter insert mode, enter 'abc', and go back to normal mode again:
$ nvr --remote-send 'iabc<esc>'
$ # Evaluate any VimL expression.
$ # 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.
(Click the GIFs to watch them full-size.)
Using nvr from a different window (another tmux pane in this case):