Vim 寄存器:剪贴板、系统剪贴板与多槽暂存
更新时间:2026-08-30。本文是
languages/vim/主题入门层第 8 篇。
本文要回答的问题
- 为什么我
yy复制后,又删了一段,再p贴出来的是刚删的而不是刚复制的? - 怎么在 Vim 里和系统(终端/远程桌面)共享剪贴板?
- 能不能同时暂存好几段内容?
一、寄存器是什么
普通编辑器的"剪贴板"在 Vim 里叫无名寄存器("")。但 Vim 还有几十个寄存器槽,每个存一段内容。你每次 y/d/x 都写入了某个寄存器。
二、最常用的几个寄存器
| 寄存器 | 写法 | 存什么 |
|---|---|---|
无名 "" | 默认 | 最后一次 yank / delete |
数字 0 | "0 | 最近一次 yank(复制) |
数字 1~9 | "1 | 最近 9 次 delete("删除历史") |
小删除 - | "- | 短删除(<1 行) |
命名 a~z | "a | 你自己指定的暂存槽 |
系统 * | "* | 系统主选区(Linux 中键) |
系统 + | "+ | 系统剪贴板 |
三、为什么复制会被"吃掉"
yy 复制 → 写入 "" 和 "0;接着 dd 删除一行 → 写入 "" 和 "1。"无名寄存器 """ 被覆盖了,所以再 p 贴出的是刚删的行。
解决:要贴回刚才复制的内容,用 "0p(贴"0 号寄存器"=最近一次复制)。
四、命名寄存器暂存多段
vim
"ayy " 把当前行复制到 a 寄存器
"byw " 把当前词复制到 b 寄存器
"ap " 贴出 a 寄存器内容
"bp " 贴出 b 寄存器内容这样你能同时持有好几段,互不覆盖。
五、和系统剪贴板打通
在服务器上,最实用的是把 Vim 复制内容贴到终端外面(或反过来):
vim
"+yy " 复制到系统剪贴板
"+p " 从系统剪贴板粘贴前提:Vim 编译时带 +clipboard 特性(:version 看,显示 +clipboard 才行)。若没有,可用 :w !xclip -selection clipboard 之类 workaround。Neovim 默认集成更好。
远程 SSH 场景下,系统剪贴板是你本地机器的,不是服务器的——这点要分清。
六、查看与清空
vim
:reg " 列出所有寄存器当前内容
:reg a b " 只看 a、b七、与本站主线衔接
一句话总结
Vim 不是单剪贴板,而是一组寄存器:无名 "" 总被覆盖,最近复制在 "0,删除历史在 "1~9;用 "a~"z 暂存多段,"+/"* 连系统剪贴板——复制被吃掉时记得 "0p。
上一篇:Vim 缓冲区 / 多窗口 / 标签页 下一篇:Vim 快捷键速查总表