Appearance
寄存器系统:剪贴板的终极形态
Vim 的寄存器系统远超普通剪贴板——你可以同时保存多段内容,随时粘贴任意一段。
寄存器基础
什么是寄存器
寄存器是 Vim 的"命名剪贴板"。普通编辑器只有一个剪贴板,Vim 有几十个。
查看寄存器内容
vim
:reg " 查看所有寄存器
:reg a " 查看寄存器 a
:reg ab " 查看寄存器 a 和 b寄存器类型
命名寄存器 a-z
"ayy 复制当前行到寄存器 a
"ap 粘贴寄存器 a 的内容
"byiw 复制单词到寄存器 b
"bp 粘贴寄存器 b 的内容大写追加 A-Z
大写字母表示追加到寄存器:
"ayy 复制第一行到 a
"Ayy 追加另一行到 a(不是覆盖)这在收集多处内容时非常有用。
默认寄存器 "
yy 默认复制到 " 寄存器
p 默认从 " 寄存器粘贴系统剪贴板 + 和
"+yy 复制到系统剪贴板
"+p 从系统剪贴板粘贴
"*yy 复制到选择剪贴板(X11)
"*p 从选择剪贴板粘贴在 Windows/Mac,+ 和 * 通常相同,都是系统剪贴板。
数字寄存器 0-9
"0:最近一次复制(yank)的内容"1-9:最近的删除历史,1 是最近的
"0p 粘贴最近复制的内容(不受删除影响)
"1p 粘贴最近删除的内容特殊寄存器
| 寄存器 | 内容 |
|---|---|
"- | 小删除(少于一行) |
". | 最近插入的文本 |
"% | 当前文件名 |
"# | 上一个文件名 |
": | 最近执行的命令 |
"/ | 最近的搜索模式 |
实用操作
复制到指定寄存器
"ayy 复制当前行到 a
"a3yy 复制 3 行到 a
"ayiw 复制单词到 a
"ay$ 复制到行尾到 a粘贴指定寄存器
"ap 在光标后粘贴 a
"aP 在光标前粘贴 a从不同寄存器粘贴
"ap 粘贴 a
"bp 粘贴 b
"0p 粘贴最近复制的内容
"+p 粘贴系统剪贴板实战场景
场景 1:保留复制内容不被删除覆盖
1. yy 复制某行
2. dd 删除另一行
3. "0p 粘贴复制的行(不是删除的)"0 寄存器只存复制的内容,不受删除影响。
场景 2:同时保存多段内容
1. 移到第一处,"ayy 复制到 a
2. 移到第二处,"byy 复制到 b
3. 移到第三处,"cyy 复制到 c
4. 移到目标位置,"ap 粘贴 a
5. "bp 粘贴 b
6. "cp 粘贴 c场景 3:收集分散的内容
1. 移到第一处,"ayy 复制到 a
2. 移到第二处,"Ayy 追加到 a
3. 移到第三处,"Ayy 继续追加
4. "ap 一次粘贴所有收集的内容场景 4:与系统剪贴板交互
从浏览器复制代码:
1. 浏览器中 Ctrl+C 复制
2. VSCode 中 "+p 粘贴系统剪贴板内容复制代码到其他程序:
1. VSCode 中 "+yy 复制当前行到系统剪贴板
2. 在其他程序 Ctrl+V 粘贴VSCode Vim 配置
使用系统剪贴板作为默认
json
{
"vim.useSystemClipboard": true
}启用后,y 和 p 直接使用系统剪贴板,无需 "+。
在可视模式下也使用系统剪贴板
json
{
"vim.visualstar": true,
"vim.useSystemClipboard": true
}键位映射简化剪贴板操作
json
{
"vim.normalModeKeyBindingsNonRecursive": [
// Y 复制到行尾(更一致的行为)
{ "before": ["Y"], "after": ["y", "$"] },
// 快速复制到系统剪贴板
{ "before": ["<leader>", "y"], "after": ["\"", "+", "y"] },
{ "before": ["<leader>", "Y"], "after": ["\"", "+", "y", "$"] },
// 快速粘贴系统剪贴板
{ "before": ["<leader>", "p"], "after": ["\"", "+", "p"] },
{ "before": ["<leader>", "P"], "after": ["\"", "+", "P"] }
],
"vim.visualModeKeyBindingsNonRecursive": [
// 可视模式下复制到系统剪贴板
{ "before": ["<leader>", "y"], "after": ["\"", "+", "y"] },
// 粘贴时不覆盖剪贴板
{ "before": ["p"], "after": ["\"", "_", "d", "P"] }
]
}解释可视模式粘贴技巧
默认情况下,可视选中后 p 粘贴会把选中的文本放入默认寄存器,覆盖你复制的内容。
使用 "_dP:
"_d:删除到黑洞寄存器(不保存)P:粘贴
这样粘贴后,原来复制的内容还在,可以继续粘贴。
寄存器在宏中的应用
宏本身存储在寄存器中:
qa ... q 宏存储在寄存器 a
:reg a 查看宏内容
"ap 可以粘贴宏内容(即操作序列)编辑宏:
1. "ap 粘贴宏内容
2. 编辑这行文本
3. "ayy 重新存回寄存器 a
4. @a 执行修改后的宏常用寄存器速查
| 寄存器 | 用途 |
|---|---|
"a-z | 自定义命名存储 |
"0 | 最近复制的内容 |
"+ | 系统剪贴板 |
"_ | 黑洞寄存器(删除不保存) |
". | 最近插入的文本 |
"% | 当前文件名 |
黑洞寄存器
"_ 是黑洞寄存器,发送到这里的内容会消失:
"_dd 删除行,不保存到任何寄存器
"_diw 删除单词,不保存用途:删除内容时不想覆盖剪贴板。
本章收获:
- ✅ 理解 Vim 寄存器系统
- ✅ 掌握命名寄存器的使用
- ✅ 熟练使用系统剪贴板集成
- ✅ 学会实用的粘贴技巧
效率提升:多寄存器让你同时保存多段内容,不再为"复制后被覆盖"烦恼。