惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
Blog — PlanetScale
Blog — PlanetScale
腾讯CDC
A
About on SuperTechFans
Vercel News
Vercel News
I
InfoQ
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
V
Visual Studio Blog
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
美团技术团队

Oskyla 烹茶室

修复 Joplin on KDE 菜单栏显示问题 Copy Fail:Linux 内核 2017 年至今的高危漏洞(附临时缓解方案) | CVE-2026-31431 Hermes Agent — 在 K3s / K8s 中运行指南 在 K3s 节点上安装并使用 nerdctl Mouser:轻量开源的罗技鼠标驱动替代方案 Claude Opus 4.7:优缺点与评测信息汇总 openFuyao NPU-Operator故障排查 openFuyao 2603 共测测试报告 openFuyao InferNex AI推理集成部署 310P(300I Pro) 环境问题记录及解决 ceph mon Operation not permitted 问题解决 Ascend 310P + openFuyao + NPU-Operator 故障排查 KDE Plasma6 禁用全局菜单,恢复正常应用菜单 终极指南:在 Linux 裸机服务器上快速部署 Moltbot (原 Clawbot) 并集成飞书 Windows 配置 Claude Code 解决 settings.json 不生效 Windows 配置 Claude Code 全流程 2025-12-31 | 年终总结 AI 生图精品提示词|第二期:城市星球 AI 生图精品提示词|第一期 Kubernetes kubectl --raw 使用指南 彻底解决阿里云和 tailscale 冲突 2025-10-21 | 沉淀思维 macOS 单独为鼠标或触控板开启自然滚动 2025-10-16 | 负载高低 2025-10-15 | 睡眠周期 2025-10-14 | 转换情绪与独立观点 go 拉取 gitcode.com 私有 mod Git 将某个文件恢复到其他分支的状态 SSH 通过跳板机连接 lxc 使用 chronyc 构建 ntp 服务 2025-10-13 | 独立思考于未来能源
Vim 使用系统剪切板
Tianlun Song · 2025-02-23 · via Oskyla 烹茶室

本文 首发于 🌱 煎茶转载 请注明 来源

来源:Vim 使用系统剪切板

Vim 是运行在 Terminal 里的 Shell 程序,所以要把内容拷贝出来可以通过 Terminal,也可以通过 Vim 自己。不配置 Vim 剪切板时只能通过 Shell 来拷贝粘贴:

  • 通过 Shell 拷贝(比如在 iTerm 里按住 Alt 选取内容)会有问题:比如会包含 Vim 左侧行号、折行变成了换行。
  • 通过 Shell 粘贴有类似的问题:相比于 p 命令,在插入模式下 Ctrl+V 时 Vim 会把内容当作字符键入,触发 Vim 的所有处理键入的插件,比如自动补全、语法检查等。不仅会很慢,而且可能会破坏你的内容(比如粘贴一对括号,可能 Vim 会再帮你自动补全一个多余的右括号)。

所以完美的拷贝粘贴一定要通过 Vim 本身。Vim 中 p(paste)、d(delete)、y(yank)等拷贝粘贴操作使用的是 匿名寄存器 ""(unnamed register),本文就来解释怎么在 Mac/Windows/Linux 上把 Vim 的 匿名寄存器 映射到操作系统的剪切板。

TL; DR

  1. 确保你的 vim 支持剪切板,通过 vim --version | grep clipboard 检查。
  2. 确定你的剪切板寄存器是 "+(XA_SECONDARY)还是 "*(XA_PRIMARY)。
  3. 同步剪切板和匿名寄存器,在 ~/.vimrc 添加配置比如 set clipboard=unnamed

你的 Vim Build 没有支持 clipboard,那么无论怎样配置都不会生效。 可以用如下命令检查:

vim --version | grep clipboard

如果输出包含 +clipboard+xterm_clipboard 就支持,如果这两项都是 - 则不支持。例如我的 Vim 输出为(MacOS 上的 macvim):

+clipboard         +keymap            +printer           +vertsplit
+emacs_tags        -mouse_gpm         -sun_workshop      -xterm_clipboard

如果你的 Vim 不支持剪切板,则需要重新安装一个带 clipboard 的 Vim:

重新安装后再执行 vim --version 来查看 clipboard 是否支持。注意:如果安装到了其他路径你需要改 PATH 或重启 Terminal。

确定你的剪切板寄存器

Vim 有 48 个寄存器,y, d, p 等命令一般使用匿名寄存器 "", 支持剪切板的 Vim 会支持额外的选区寄存器 "*"+。 更多 Vim 寄存器的信息,可以参考这篇文章:Vim 寄存器完全手册

"*"+ 在 Mac 和 Windows 中,都是指系统剪切板(clipboard),例如 "*yy 即可复制当前行到剪切板。 其他程序中复制的内容也会被存储到这两个寄存器中。 在 X11 系统中(绝大多数带有桌面环境的 Linux 发行版),二者是有区别的:

  • "* 指 X11 中的 PRIMARY 选区,即鼠标选中区域。在桌面系统中可按鼠标中键粘贴。
  • "+ 指 X11 中的 CLIPBOARD 选区,即系统剪切板。在桌面系统中可按 Ctrl+V 粘贴。

上述哪个寄存器对应于你的剪切板和 Linux 发行版有关,在配置 Vim 前可以测试一下。 比如用 Vim 打开一个文件,在 normal 模式下(进入 Vim 后默认的模式)键入 gg"*yG, 来把当前文件内容拷贝到 "* 寄存器。键入 gg"+yG 拷贝到 "+ 寄存器。

到目前为止,你已经可以通过命令来拷贝粘贴内容了。接下来我们希望通过 Vim 配置, 让匿名寄存器和系统剪切板同步。

同步剪切板和匿名寄存器

以下配置可以让主选区寄存器 "* 和匿名寄存器 "" 保持同步(即共享剪切板), 一般适用于 Windows 和 MacOS,Linux 下的表现是共享 X11 剪切板、PRIMARY 选区(鼠标中键粘贴)。

set clipboard=unnamed

Vim 7.3.74 及以上支持了 unnamedplus:

set clipboard=unnamedplus

即让剪切板寄存器 "+ 和匿名寄存器 "" 保持同步, Linux 下一般对应于桌面系统的剪切板,比如 GNOME 的系统剪切板、以及 SECONDARY 选区(Ctrl+V 粘贴)。

不支持 clipboard 的情况

如果你的 Vim 不支持 clipboard 且没法升级或其他 clipboard 选项不好使的情况, 可以调用外部命令来实现拷贝粘贴,在 Vim 里直接调用,或设置快捷键调用。 比如 让 Tmux 远程 Vim 使用本地系统的剪切板

如果在 MacOS 下,可以用 pbcopy/pbpaste 命令来实现。

  • 拷贝一段文本:先按 v 进入 visual 模式选中后执行 :w !pbcopy。拷贝整个文件可以 :%w !pbcopy
  • 粘贴一段文本:把光标移动到要插入的行,执行 :r !pbpaste

如果在 Linux 下,可以借由 xclip 来实现。用 xclip -i -sel c 代替上面的 pbcopy,用 xclip -o -sel -c 代替上面的 pbpaste

References