instant.nvim is a collaborative editing plugin for Neovim written in Lua with no dependencies.
Powerful collaborative editing algorithm
Single or multiple buffer sharing
Virtual cursors with username of other clients
Spectate actions of a user
Built-in localhost server
Separated undo/redo for each user
Persistent data on server
Install using a plugin manager such as vim-plug.
let g:instant_username = "USERNAME"
See here for more customization options.
The collaborative editing plugin works with a server which connects together the clients. Thus, a server must be running which must be reachable by all clients.
For a localhost or LAN network, you can simple use the built-in server included in the plugin.
:InstantStartServer [host] [port]
The default is to serve localhost only, on port 8080. For a more advanced (remote server) overview see Deploy a server
To start the client, the first user to connect to the server must initiates the share with a special commands with has the form
InstantStart.... Subsequent joining clients, use a different command
InstantJoin.... Having distinct commands to start and join a server ensures that files are not overwritten by accident on connection.
There are essentially two modes of sharing at the moment.
For single buffer sharing use:
:InstantStartSingle [host] [port]: Host is the URL or IP address. Port is 80 by default. Use this command if you're the first client to connect.
:InstantJoinSingle [host] [port]: Use this command if another client already initiated a single share.
:InstantStop: This will stop the client
For session sharing:
:InstantStartSession [host] [port]: If you're the first client to connect.
:InstantJoinSession [host] [port]: Use this command if another client already initiated a session share
Additional useful sharing commands are:
:InstantStatus: Display the current connected clients as well as their locations
:InstantOpenAll: Open all files in buffers in the current directory. Useful to share the whole directory in session sharing.
:InstantSaveAll: Save all opened buffers automatically. This will also create missing subdirectories.
:InstantMark: Visually mark a region