How to open files in specific Vim instance
There are some usage scenarios in which one might want to open all/some files
in specific Vim instance. This can be done via Vim client-server facilities
which include means to send file for opening in specific instance. Vim must be
Here only single example is described, one can think of something better/different (binding to process id, terminal multiplexer session, etc.).
How files are opened
Say you have a mapping to open file in Vim which looks like this:
nnoremap o :!gvim --remote-tab-silent %f &<cr>
Same should be applicable to
Here you see mapping, because it is handy to have different ways to open files (in the
same terminal, separate terminal multiplexer window/split, gVim instance).
Amending Vim run command
To bind the command we need to pass
--servername option to Vim.
Let's use environment variable
$VIMARGS for this and put it into
Vim invocation command:
nnoremap o :!gvim $VIMARGS --remote-tab-silent %f &<cr>
$VIMARGS can include anything and we want to put
--servername argument there.
Picking target instance
$VIMARGS is empty, so first found server is used by
remote commands (just as usual). Setting
--servername name makes all consecutive file opens to use Vim with
that server name (if there is none yet, it will be created).
Setting environment variable looks like this:
let $VIMARG='--servername work'
Command to pick target
Having to type something like
let $VIMARG='--servername project'
each time one wants to change target instance is not very good idea. It's
better to add a command which would set target. Here it is:
command! target :let $VIMARGS = '--servername "%a"'
That's it, now simply running
:target project1 will cause all files
to be sent to
project1 instance and after
:target project2 all files will be sent to