wayland

wayland.txt 适用于 Vim 9.2 版本。 最近更新: 2026年5月 VIM 参考手册 by Bram Moolenaar 译者: Willis Wayland 协议支持 wayland 1. Wayland 相关有用信息 wayland-useful 2. Wayland 选区 wayland-selections

1. Wayland 相关有用信息 wayland-useful

wayland-seat Wayland 的剪贴板这类功能需要指定一个座位 (seat)。一个 Wayland 座位包含键盘、指 针和触摸板等元素。可通过 'wlseat' 选项指定所用座位。仅当在单个 Wayland 会话中 使用多个 Wayland 座位时才需要显式设置。如果不理解此概念,则一般也无需关心。 wayland-gui 参见 gui-wayland 。请 注意 GUI 版 Vim 使用 GTK 这类工具包访问剪贴板,而不会直 接通过 Wayland 访问剪贴板。可通过 v:clipmethod 变量检查,GUI 里运行时该值应 为 "none"。 Wayland 命令: :wlrestore :wl :wl[restore] [display] 重新初始化到 Wayland 合成器的连接。适用于 Vim 在 screen/tmux 会话中长期运行,且在 Wayland 合成器重启后 仍需继续运行的情况。 [display] 应使用 $WAYLAND_DISPLAY 环境变量的格式 (如 "wayland-0")。省略 [display] 时,默认使用上次本命令所 用值。从未指定过则使用环境变量 $WAYLAND_DISPLAY 值。 同时也会更新 v:clipmethod 。 {仅当编译时加入 +wayland 特性才有效} Wayland 错误: E1548 Vim 试图与 Wayland 合成器连接时失败。常见原因是 Wayland 合成器进程被终止。可尝 试执行 :wlrestore 命令重新连接。

2. Wayland 选区 wayland-selections

Vim 支持 wlr-data-control-unstable-v1 和 ext-data-control-v1 协议,用于访问当 前 Wayland 选区。此处选择区本质上就是 "剪贴板"。可通过运行 wayland-info 命令检 测当前 Wayland 合成器是否支持这些协议,该命令应随系统 libwayland 库分发: wayland-info | grep -E '(ext_data_control|zwlr_data_control)' grep 匹配成功时,表示系统支持其中一个或两个协议。 已知支持至少一种协议的合成器有: 1. KWin (KDE) 2. 基于 wlroots (Sway、Labwc) 3. Niri 4. Hyprland 5. Wayfire 如果熟悉 X11,Wayland 的常规选区等价于 X11 的 CLIPBOARD 选区,而 Wayland 主选 区等价于 X11 PRIMARY 选区。在 Vim 中的访问方式和 X11 一致,+ 寄存器对应常规选 区,而 * 寄存器对应主选区,注意 部分合成器可能不支持主选区,详见 wayland-primary-selection 。 wayland-persist X11 有剪切缓冲区,但 Wayland 不存在对应机制。要模拟此功能,可使用独立的剪贴板 管理器,才能在 Wayland 客户端退出后保留选区数据。 wayland-and-x11 Vim 版本编译时同时加入 X11 和 Wayland 支持时,Vim 会通过 'clipmethod' 选项选择 访问剪贴板的后端。 wayland-primary-selection 如果需要 X11 风格的主选区 (primary selection),Wayland 通过 Vim 支持的协议也实 现了该功能。但 wlr-data-control 协议第 1 版 (与协议名称中的 'v1' 不是同一概念) 不支持主选区。可通过以下命令检测协议版本: wayland-info | grep -E '(ext_data_control|zwlr_data_control)' 其中 "zwlr_data_control_manager_v1" 的 "version:" 字段为 2 或更高时,则所用协 议版本支持主选区。同时存在 "ext_data_control_manager_v1" 时,Vim 优先使用后 者,因为该协议原生支持主选区。 如果 Wayland 合成器不支持 wlr-data-control-v1 或 ext-data-control-v1 协议,Vim 无法直接通过 Wayland 协议访问剪贴板。此时可通过自定义 clipboard-providers , 搭配 wl-clipboard 等外部工具实现。 示例: 定义调用外壳命令 wl-copy 和 wl-paste 的剪贴板提供者: 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 这需要提前安装 wl-clipboard 软件包 (https://github.com/bugaevc/wl-clipboard)。 vim:tw=78:ts=8:noet:ft=help:norl