remote.txt For Vim version 7.4. Last change: 2008 May 24LINK

VIM REFERENCE MANUAL by Bram Moolenaar

Vim client-server communication client-serverLINK

1. Common functionality clientserver

2. X11 specific items x11-clientserver

3. MS-Windows specific items w32-clientserver

{Vi does not have any of these commands}

==============================================================================

1. Common functionality clientserverLINK

When compiled with the +clientserver option, Vim can act as a command

server. It accepts messages from a client and executes them. At the same

time, Vim can function as a client and send commands to a Vim server.

The following command line arguments are available:

argument meaning

--remote [+{cmd}] {file} ... --remoteLINK

Open the file list in a remote Vim. When

there is no Vim server, execute locally.

There is one optional init command: +{cmd}.

This must be an Ex command that can be

followed by "|".

The rest of the command line is taken as the

file list. Thus any non-file arguments must

come before this.

You cannot edit stdin this way --.

The remote Vim is raised. If you don't want

this use

vim --remote-send "<C-\><C-N>:n filename<CR>"

--remote-silent [+{cmd}] {file} ... --remote-silentLINK

As above, but don't complain if there is no

server and the file is edited locally.

--remote-wait [+{cmd}] {file} ... --remote-waitLINK

As --remote, but wait for files to complete

(unload) in remote Vim.

--remote-wait-silent [+{cmd}] {file} ... --remote-wait-silentLINK

As --remote-wait, but don't complain if there

is no server.

--remote-tabLINK

--remote-tab Like --remote but open each file in a new

tabpage.

--remote-tab-silentLINK

--remote-tab-silent Like --remote-silent but open each file in a

new tabpage.

--remote-tab-waitLINK

--remote-tab-wait Like --remote-wait but open each file in a new

tabpage.

--remote-tab-wait-silentLINK

--remote-tab-wait-silent Like --remote-wait-silent but open each file

in a new tabpage.

--servernameLINK

--servername {name} Become the server {name}. When used together

with one of the --remote commands: connect to

server {name} instead of the default (see

below).

--remote-sendLINK

--remote-send {keys} Send {keys} to server and exit. The {keys}

are not mapped. Special key names are

recognized, e.g., "<CR>" results in a CR

character.

--remote-exprLINK

--remote-expr {expr} Evaluate {expr} in server and print the result

on stdout.

--serverlistLINK

--serverlist Output a list of server names.

Examples

Edit "file.txt" in an already running GVIM server:

gvim --remote file.txt

Edit "file.txt" in an already running server called FOOBAR:

gvim --servername FOOBAR --remote file.txt

Edit "file.txt" in server "FILES" if it exists, become server "FILES"

otherwise:

gvim --servername FILES --remote-silent file.txt

This doesn't work, all arguments after --remote will be used as file names:

gvim --remote --servername FOOBAR file.txt

Edit file "+foo" in a remote server (note the use of "./" to avoid the special

meaning of the leading plus):

vim --remote ./+foo

Tell the remote server "BLA" to write all files and exit:

vim --servername BLA --remote-send '<C-\><C-N>:wqa<CR>'

SERVER NAME

By default Vim will try to register the name under which it was invoked (gvim,

egvim ...). This can be overridden with the --servername argument. If the

specified name is not available, a postfix is applied until a free name is

encountered, i.e. "gvim1" for the second invocation of gvim on a particular

X-server. The resulting name is available in the servername builtin variable

v:servername. The case of the server name is ignored, thus "gvim" and

"GVIM" are considered equal.

When Vim is invoked with --remote, --remote-wait or --remote-send it will try

to locate the server name determined by the invocation name and --servername

argument as described above. If an exact match is not available, the first

server with the number postfix will be used. If a name with the number

postfix is specified with the --servername argument, it must match exactly.

If no server can be located and --remote or --remote-wait was used, Vim will

start up according to the rest of the command line and do the editing by

itself. This way it is not necessary to know whether gvim is already started

when sending command to it.

The --serverlist argument will cause Vim to print a list of registered command

servers on the standard output (stdout) and exit.

Win32 Note: Making the Vim server go to the foreground doesn't always work,

because MS-Windows doesn't allow it. The client will move the server to the

foreground when using the --remote or --remote-wait argument and the server

name starts with "g".

REMOTE EDITING

The --remote argument will cause a :drop command to be constructed from the

rest of the command line and sent as described above.

The --remote-wait argument does the same thing and additionally sets up to

wait for each of the files to have been edited. This uses the BufUnload

event, thus as soon as a file has been unloaded, Vim assumes you are done

editing it.

Note that the --remote and --remote-wait arguments will consume the rest of

the command line. I.e. all remaining arguments will be regarded as filenames.

You can not put options there!

FUNCTIONS

E240 E573LINK

There are a number of Vim functions for scripting the command server. See

the description in eval.txt or use CTRL-] on the function name to jump to

the full explanation.

synopsis explanation

remote_expr( server, string, idvar) send expression

remote_send( server, string, idvar) send key sequence

serverlist() get a list of available servers

remote_peek( serverid, retvar) check for reply string

remote_read( serverid) read reply string

server2client( serverid, string) send reply string

remote_foreground( server) bring server to the front

See also the explanation of CTRL-\_CTRL-N. Very useful as a leading key

sequence.

The {serverid} for server2client() can be obtained with expand("<client>")

==============================================================================

2. X11 specific items x11-clientserverLINK

E247 E248 E251 E258 E277LINK

The communication between client and server goes through the X server. The

display of the Vim server must be specified. The usual protection of the X

server is used, you must be able to open a window on the X server for the

communication to work. It is possible to communicate between different

systems.

By default, a GUI Vim will register a name on the X-server by which it can be

addressed for subsequent execution of injected strings. Vim can also act as

a client and send strings to other instances of Vim on the same X11 display.

When an X11 GUI Vim (gvim) is started, it will try to register a send-server

name on the 'VimRegistry' property on the root window.

A non GUI Vim with access to the X11 display (xterm-clipboard enabled), can

also act as a command server if a server name is explicitly given with the

--servername argument.

An empty --servername argument will cause the command server to be disabled.

To send commands to a Vim server from another application, read the source

file src/if_xcmdsrv.c, it contains some hints about the protocol used.

==============================================================================

3. Win32 specific items w32-clientserverLINK

Every Win32 Vim can work as a server, also in the console. You do not need a

version compiled with OLE. Windows messages are used, this works on any

version of MS-Windows. But only communication within one system is possible.

Since MS-Windows messages are used, any other application should be able to

communicate with a Vim server. An alternative is using the OLE functionality

ole-interface.

When using gvim, the --remote-wait only works properly this way:

start /w gvim --remote-wait file.txt

vim:tw=78:sw=4:ts=8:ft=help:norl: