WezTerm `CopyTo(destination)` 配置详解:把选区复制到系统剪贴板与主选择缓冲
2026/9/12 21:12:32 网站建设 项目流程

WezTermCopyTo(destination)配置详解:把选区复制到系统剪贴板与主选择缓冲

【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/wezterm

CopyTo(destination)是 WezTerm 中用于将当前选区文本复制到指定剪贴板缓冲区的按键分配(KeyAssignment)。本指南以docs/config/lua/keyassignment/CopyTo.md为核心,讲解ClipboardPrimarySelectionClipboardAndPrimarySelection三种目标缓冲区的语义与适用平台,给出可直接复制的 Lua 配置,并结合仓库源码说明其底层执行链路,帮助你按平台习惯定制复制行为。

CopyTo 是什么

在 WezTerm 的按键分配系统中,CopyTo(destination)的作用是把当前选中的文本写入指定的剪贴板缓冲区。它最常见的用法是绑定到快捷键:先通过鼠标或 Copy Mode 选中文本,再触发该动作完成复制。

从源码看,CopyTo是 config/src/keyassignment.rs 中KeyAssignment枚举的一个变体,携带一个ClipboardCopyDestination参数:

// config/src/keyassignment.rs pub enum KeyAssignment { // ... CopyTo(ClipboardCopyDestination), // ... }

ClipboardCopyDestination的定义如下(config/src/keyassignment.rs):

pub enum ClipboardCopyDestination { Clipboard, PrimarySelection, ClipboardAndPrimarySelection, } impl_lua_conversion_dynamic!(ClipboardCopyDestination);

由于该类型实现了FromDynamic/ToDynamic的 Lua 转换(impl_lua_conversion_dynamic!),你才能在 Lua 配置中直接写wezterm.action.CopyTo 'Clipboard'这样的字符串形式。

destination 的三种取值

destination参数决定选中文本被写入哪个剪贴板缓冲区,可选值如下:

取值含义适用平台
Clipboard复制到系统剪贴板(clipboard),即常规的“复制到剪贴板”所有平台
PrimarySelection复制到主选择缓冲区(primary selection)仅 X11 及部分 Wayland 系统
ClipboardAndPrimarySelection同时复制到剪贴板与主选择缓冲区所有平台

这里需要区分两个容易混淆的概念:

  • 系统剪贴板(Clipboard):由 Ctrl+C / Ctrl+V 这类组合键读写,显式地“复制—粘贴”,内容不会随选择消失而丢失。
  • 主选择缓冲区(PrimarySelection):源自 X11 的传统机制,文本随鼠标选中即时生效,通常通过鼠标中键粘贴,不依赖显式复制动作。

在 Wayland 上,主选择支持取决于合成器实现:自 WezTerm 版本20220319-142410-0fcdea07起,只要 Wayland 合成器支持primary-selection-unstable-v1协议或较旧的 Gtk primary selection 协议,PrimarySelection也能正常工作(见原文档的since标注)。

值得注意的默认值:ClipboardCopyDestinationDefault实现是ClipboardAndPrimarySelection(config/src/keyassignment.rs)。这意味着凡是“默认复制到何处”依赖该类型的动作(例如后面会提到的CharSelectArgumentscopy_to字段),在不显式指定时都会同时写入剪贴板和主选择缓冲区。

基础配置示例

CopyTo绑定到快捷键的最简配置如下(与 docs/config/lua/keyassignment/CopyTo.md 中的示例一致):

local wezterm = require 'wezterm' local config = {} config.keys = { { key = 'C', mods = 'CTRL', action = wezterm.action.CopyTo 'ClipboardAndPrimarySelection', }, } return config

在这个配置中:

  • key = 'C'配合mods = 'CTRL'表示 Ctrl+C;
  • wezterm.action.CopyTo 'ClipboardAndPrimarySelection'会覆盖 WezTerm 默认的复制行为,将选区同时写入系统剪贴板和主选择缓冲区;
  • 在 X11 桌面环境中,这样配置后,中键粘贴和 Ctrl+V 都能取到刚复制的文本。

如果只想使用常规系统剪贴板,把动作改为wezterm.action.CopyTo 'Clipboard'即可;如果是在 Linux 上希望选区仅对主选择生效(例如完全不依赖剪贴板管理器),则使用wezterm.action.CopyTo 'PrimarySelection'

底层执行链路:CopyTo 被触发后发生了什么

在 GUI 端,CopyTo的按键分配由 wezterm-gui/src/termwindow/mod.rs 中的perform_key_assignment处理:

CopyTo(dest) => { let text = self.selection_text(pane); self.copy_to_clipboard(*dest, text); }

执行流程分两步:

  1. 调用self.selection_text(pane)取出当前 pane 的选中文本;
  2. 调用self.copy_to_clipboard(*dest, text),按dest指定的目标缓冲区写入剪贴板。

也就是说,CopyTo只负责“把当前选区写出去”,它本身不改变选区状态,也没有弹出任何确认界面——是一个干净利落的动作,非常适合直接绑到快捷键上。

从复制模式的角度看,CopyToCompleteSelection是同一族的能力:CompleteSelection(ClipboardCopyDestination)同样携带目标缓冲区参数(config/src/keyassignment.rs),区别在于CompleteSelection除了复制外还会结束当前的鼠标选择动作,而CopyTo纯粹执行复制。在 Copy Mode 中,WezTerm 默认就把CopyTo(ClipboardAndPrimarySelection)作为复制键的动作之一(见 wezterm-gui/src/overlay/copy.rs 附近的默认键表定义)。

在 Command Palette 中的呈现

CopyTo也出现在 WezTerm 的命令面板(Command Palette)中。wezterm-gui/src/commands.rs 为三种目标缓冲区分别注册了命令项:

  • CopyTo(ClipboardCopyDestination::PrimarySelection)→ 显示为 Copy to Primary Selection;
  • CopyTo(ClipboardCopyDestination::Clipboard)→ 显示为 Copy to Clipboard;
  • CopyTo(ClipboardCopyDestination::ClipboardAndPrimarySelection)→ 显示为 Copy to Clipboard and Primary Selection。

同时,在 wezterm-gui/src/commands.rs 附近,默认的命令列表中还预置了CopyTo(PrimarySelection)CopyTo(Clipboard)两个条目。这意味着即使你不在config.keys里显式配置,也可以通过命令面板按名称搜索并执行“Copy to Clipboard”等动作,方便在忘记快捷键时兜底使用。

与其他剪贴板相关动作的关系

CopyTo属于 WezTerm 剪贴板动作家族的一部分,理解它与相邻动作的区别有助于选择合适的绑定:

动作作用典型用途
CopyTo(destination)将当前选区写入指定缓冲区覆盖默认复制行为,一键同时复制到剪贴板与主选择
CompleteSelection(destination)复制选区并结束选择动作鼠标/复制模式中的“复制即结束”体验
CopyTextTo { text, destination }将指定的任意文本写入缓冲区脚本或自定义动作中复制固定字符串
PasteFrom(source)从指定缓冲区粘贴用快捷键从中键缓冲区粘贴文本

其中CopyTextToCopyTo共用同一个ClipboardCopyDestination类型与copy_to_clipboard底层实现(wezterm-gui/src/termwindow/mod.rs),只是文本来源不同:前者来自显式传入的text字段,后者来自当前选区。

小结

  • CopyTo(destination)把当前选区复制到指定缓冲区,destination支持ClipboardPrimarySelectionClipboardAndPrimarySelection三种取值,其中PrimarySelection仅适用于 X11 与支持 primary selection 协议的 Wayland 系统。
  • 通过config.keys绑定快捷键即可覆盖默认复制行为;不配置时也能从命令面板中找到对应的 Copy 命令。
  • 源码层面,该动作由perform_key_assignmentselection_textcopy_to_clipboard两步完成(wezterm-gui/src/termwindow/mod.rs),语义明确、无额外副作用,适合直接作为快捷键动作。
  • 如果你的日常使用以 Linux 为主且习惯中键粘贴,ClipboardAndPrimarySelection是最贴近桌面习惯的默认选择。

【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/wezterm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询