vim-jp / vimdoc-en / wayland

wayland - Vim Documentation

Return to main English | 日本語
wayland.txt   For Vim version 9.2.  Last change: 2026 Apr 20


                  VIM REFERENCE MANUAL    by Bram Moolenaar


Wayland Protocol Support                                wayland

1. Useful Wayland information   wayland-useful
2. Wayland selections           wayland-selections

==============================================================================
1. Useful Wayland information                           wayland-useful

                                                        wayland-seat
Functionality such as the clipboard for Wayland requires a seat to use.  A
Wayland seat can consist of a keyboard, pointer, and touch device(s).  The
seat to use can be set with the 'wlseat' option.  Only useful if you use
multiple Wayland seats in the same Wayland session.  If you don't know what
this is means, then it likely does not matter for you.

                                                        wayland-gui
See gui-wayland.  Please note that when using the GUI, Vim uses the toolkit
such as GTK for accessing the clipboard, and does not access the clipboard
though Wayland.  You can check this though the v:clipmethod variable, which
should equal to "none" when running the GUI.

Wayland commands:
                                                        :wlrestore :wl
:wl[restore] [display]  Reinitializes the connection to the Wayland
                        compositor.
                        Useful when running Vim in a screen/tmux session that
                        continues running after the Wayland compositor
                        restarts.

                        [display] should be in the format of the
                        $WAYLAND_DISPLAY environment variable (e.g.
                        "wayland-0").  If [display] is omitted, then it
                        reinitializes the connection using the same value as
                        was used for the previous execution of this command.
                        If the value was never specified, then it uses the
                        value of $WAYLAND_DISPLAY environment variable.  This
                        will also update v:clipmethod.
                        {only available when compiled with the +wayland
                        feature}

Wayland errors:
                                                        E1548
Vim failed communicating with the Wayland compositor.  This is likely due to
the Wayland compositor process being killed.  Try the :wlrestore command to
try connecting again.

==============================================================================
2. Wayland Selections                                   wayland-selections

Vim supports the wlr-data-control-unstable-v1 and ext-data-control-v1
protocols, for accessing the current Wayland selection. Selection in this case
essentially means the "clipboard."  You can check if your Wayland compositor
supports either of these protocols by running the wayland-info command, which
should be bundled with libwayland on your system:
        wayland-info | grep -E '(ext_data_control|zwlr_data_control)'
If grep finds a match, then you have either or both protocols on your system.

Some compositors that are known to support either or both protocols:
    1. KWin (KDE)
    2. wlroots based (Sway, Labwc)
    3. Niri
    4. Hyprland
    5. Wayfire

If you come from X11, then the regular Wayland selection is equivalent to the
CLIPBOARD selection in X11, and the primary Wayland selection equates to the
X11 PRIMARY selection.  Accessing these selections is the same as X11 in Vim,
in which the + register is the regular selection, and the * register is the
primary selection.  Note that your compositor may not support primary
selections, see wayland-primary-selection for more details.

                                                        wayland-persist
If you use X11 cut buffers, no such things exist on Wayland.  Instead to
emulate such functionality, a separate clipboard manager must be used in order
to persist selection data when a Wayland client exits.

                                                        wayland-and-x11
If your version of Vim comes compiled with both X11 and Wayland support, then
Vim determines which one to use when accessing the clipboard using the
'clipmethod' option.

                                                wayland-primary-selection
If you find X11 style primary selections useful, Wayland also implements this
feature using the protocols that Vim supports.  This is unless you are using
version 1 (not the same as the 'v1' in the protocol name), of the
wlr-data-control protocol, then primary selection will not be supported. You
can check this using
        wayland-info | grep -E '(ext_data_control|zwlr_data_control)'
If the "version:" entry for "zwlr_data_control_manager_v1" is "2" or greater,
then primary selection is supported.  If you also get
"ext_data_control_manager_v1", then Vim will use that protocol instead, which
has primary selection support builtin into it.

If your Wayland compositor does not support the wlr-data-control-v1 or the
ext-data-control-v1 protocol, Vim cannot access the clipboard directly through
the Wayland protocol.  External tools such as wl-clipboard can be used instead
via a user-defined clipboard-providers.

Example: define a provider that shells out to wl-copy and wl-paste: >vim9

    vim9script

    def Available(): bool
        return executable('wl-copy') && executable('wl-paste')
    enddef

    def Copy(reg: string, type: string, str: list<string>)
        var args = "wl-copy"

        if reg == "*"
            args ..= " -p"
        endif

        system(args, str)
    enddef

    def Paste(reg: string): tuple<string, list<string>>
        var args = "wl-paste --type text/plain;charset=utf-8"

        if reg == "*"
            args ..= " -p"
        endif

        return ("", systemlist(args))
    enddef

    v:clipproviders["wl_clipboard"] = {
        available: Available,
        copy: {
            "+": Copy,
            "*": Copy
        },
        paste: {
            "+": Paste,
            "*": Paste
        }
    }

    set clipmethod=wl_clipboard


This relies on the wl-clipboard package being installed
(https://github.com/bugaevc/wl-clipboard).

 vim:tw=78:ts=8:noet:ft=help:norl