Vim 复制/剪切/粘贴命令完整学习笔记
Vim 复制/剪切/粘贴命令完整学习笔记
目录
文章目录
- Vim 复制/剪切/粘贴命令完整学习笔记
- 目录
- 1. 核心概念
- 2. 复制命令(Yank)
- 2.1 基础复制操作
- 2.2 范围复制操作
- 2.3 文本对象复制
- 2.4 高级复制技巧
- 3. 剪切命令(Delete/Cut)
- 3.1 基础剪切操作
- 3.2 范围剪切操作
- 3.3 精确剪切操作
- 4. 粘贴命令(Paste)
- 4.1 基础粘贴操作
- 4.2 重复粘贴操作
- 4.3 寄存器粘贴
- 5. 寄存器系统
- 5.1 寄存器类型
- 5.2 寄存器使用
- 5.3 系统剪贴板
- 6. 可视模式操作
- 6.1 字符可视模式
- 6.2 行可视模式
- 6.3 块可视模式
- 7. Ex命令模式操作
- 7.1 指定行范围操作
- 7.2 模式匹配操作
- 8. 命令速查表
- 9. 实用技巧和最佳实践
- 高效工作流程
- 寄存器管理策略
- 批量操作技巧
- 跨文件操作
- 性能优化建议
- 10. 学习建议
- 循序渐进的学习路径
- 实践建议
- 常见错误避免
- 进阶技巧
1. 核心概念
Vim 的复制、剪切、粘贴操作基于强大的寄存器系统,与传统编辑器的剪贴板概念有所不同。
核心特点:
- Yank(复制) :y + motion,内容保存到寄存器
- Delete(剪切) :d + motion,删除内容同时保存到寄存器
- Put(粘贴) :p/P,从寄存器取出内容
基本格式:
{register}{operator}{motion}
- 寄存器+操作+动作{count}{operator}{motion}
- 数量+操作+动作
2. 复制命令(Yank)
2.1 基础复制操作
-
yy
- 复制当前行(等同于Y
) -
Y
- 复制当前行(等同于yy
) -
yw
- 复制一个单词 -
y$
- 复制到行尾 -
y0
- 复制到行首 -
y^
- 复制到第一个非空字符
2.2 范围复制操作
-
2yy
- 复制当前行及下一行(2行) -
3yy
- 复制当前行及下两行(3行) -
5yy
- 复制当前行及下四行(5行) -
y2j
- 复制当前行及下两行 -
y3k
- 复制当前行及上三行 -
yG
- 复制到文件末尾 -
ygg
- 复制到文件开头
2.3 文本对象复制
-
yiw
- 复制当前单词(不含空格) -
yaw
- 复制当前单词(含空格) -
yi"
- 复制引号内内容 -
ya"
- 复制引号及其内容 -
yi)
- 复制圆括号内内容 -
ya)
- 复制圆括号及其内容 -
yi}
- 复制花括号内内容 -
ya}
- 复制花括号及其内容
2.4 高级复制技巧
-
y{
- 复制到上一个段落开始 -
y}
- 复制到下一个段落开始 -
y/pattern
- 复制到匹配模式处 -
yfx
- 复制到字符 x(包含 x) -
ytx
- 复制到字符 x(不含 x)
💡 记忆技巧:y = yank(拉取、复制),所有 delete 命令的 d 都可以替换为 y 进行复制
3. 剪切命令(Delete/Cut)
3.1 基础剪切操作
-
dd
- 剪切当前行 -
D
- 剪切到行尾(等价于d$
) -
d$
- 剪切到行尾 -
d0
- 剪切到行首 -
dw
- 剪切一个单词 -
x
- 剪切当前字符
3.2 范围剪切操作
-
2dd
- 剪切当前行及下一行 -
3dd
- 剪切当前行及下两行 -
d3d
- 剪切当前行及下两行(等价于3dd
) -
d5j
- 剪切当前行及下五行 -
d3k
- 剪切当前行及上三行 -
dG
- 剪切到文件末尾 -
dgg
- 剪切到文件开头
3.3 精确剪切操作
-
diw
- 剪切当前单词(不含空格) -
daw
- 剪切当前单词(含空格) -
di"
- 剪切引号内内容 -
da"
- 剪切引号及其内容 -
d{
- 剪切到上一个段落开始 -
d}
- 剪切到下一个段落开始
4. 粘贴命令(Paste)
4.1 基础粘贴操作
-
p
- 粘贴到光标后/下一行 -
P
- 粘贴到光标前/上一行 -
gp
- 粘贴后光标移到粘贴内容末尾 -
gP
- 粘贴前光标移到粘贴内容末尾
4.2 重复粘贴操作
-
3p
- 粘贴 3 次到光标后 -
3P
- 粘贴 3 次到光标前 -
5p
- 粘贴 5 次到光标后
4.3 寄存器粘贴
-
"ap
- 粘贴寄存器 a 的内容 -
"0p
- 粘贴最近一次复制的内容 -
"+p
- 粘贴系统剪贴板内容 -
"*p
- 粘贴系统选择缓冲区内容
5. 寄存器系统
5.1 寄存器类型
- 无名寄存器
""
- 默认寄存器,最近的删除/复制内容 - 编号寄存器
"0-9
- 数字寄存器,保存历史操作 - 命名寄存器
"a-z
- 字母寄存器,用户指定保存 - 系统寄存器
"+
- 系统剪贴板 - 选择寄存器
"*
- 系统选择缓冲区
5.2 寄存器使用
" 复制到指定寄存器
"ayy " 复制当前行到寄存器 a
"byiw " 复制当前单词到寄存器 b
"c3dd " 剪切3行到寄存器 c" 从指定寄存器粘贴
"ap " 粘贴寄存器 a 的内容
"bp " 粘贴寄存器 b 的内容
"0p " 粘贴最近复制的内容(不是删除的)" 查看寄存器内容
:reg " 查看所有寄存器
:reg a " 查看寄存器 a 的内容
:reg abc " 查看寄存器 a、b、c 的内容
5.3 系统剪贴板
" 复制到系统剪贴板
"+yy " 复制当前行到系统剪贴板
"+yiw " 复制当前单词到系统剪贴板" 从系统剪贴板粘贴
"+p " 粘贴系统剪贴板内容
<C-r>+ " 在插入模式下粘贴系统剪贴板内容" 配置自动使用系统剪贴板
set clipboard=unnamedplus " Linux
set clipboard=unnamed " macOS
6. 可视模式操作
6.1 字符可视模式
-
v
- 进入字符可视模式 -
v{motion}
- 选择后按y
复制或d
剪切 -
vy
- 复制选中内容 -
vd
- 剪切选中内容
6.2 行可视模式
-
V
- 进入行可视模式 -
V3j
- 选择当前行及下3行 -
Vy
- 复制选中行 -
Vd
- 剪切选中行
6.3 块可视模式
-
Ctrl-v
- 进入块可视模式 -
Ctrl-v{motion}
- 选择矩形块 - 块模式 +
y
- 复制矩形块 - 块模式 +
d
- 剪切矩形块
7. Ex命令模式操作
7.1 指定行范围操作
" 复制指定行范围
:1,5y " 复制第1-5行
:.,+3y " 复制当前行及下3行
:10,$y " 复制第10行到文件末尾" 删除指定行范围
:1,5d " 删除第1-5行
:.,+3d " 删除当前行及下3行
:10,$d " 删除第10行到文件末尾" 复制到指定寄存器
:1,5y a " 复制第1-5行到寄存器a
:.,+3y b " 复制当前行及下3行到寄存器b
7.2 模式匹配操作
" 复制匹配行
:g/pattern/y A " 复制所有匹配行到寄存器A(追加模式)
:g/TODO/y a " 复制所有包含TODO的行到寄存器a" 删除匹配行
:g/pattern/d " 删除所有匹配行
:v/pattern/d " 删除所有不匹配行
8. 命令速查表
命令 | 功能 | 范围 | 备注 |
---|---|---|---|
复制命令(Yank) | |||
yy /Y | 复制当前行 | 行级 | 两者等价 |
2yy | 复制当前行及下一行 | 行级 | 复制2行 |
3yy | 复制当前行及下两行 | 行级 | 复制3行 |
yw | 复制一个单词 | 单词级 | 到下个单词开始 |
yiw | 复制当前单词 | 单词级 | 不含空格 |
yaw | 复制当前单词 | 单词级 | 含空格 |
y$ | 复制到行尾 | 行内 | 等价于yE |
y0 | 复制到行首 | 行内 | 从行首到光标 |
y{ | 复制到上一个段落开始 | 段落级 | 段落级复制 |
y} | 复制到下一个段落开始 | 段落级 | 段落级复制 |
yG | 复制到文件末尾 | 文件级 | 大范围复制 |
ygg | 复制到文件开头 | 文件级 | 大范围复制 |
剪切命令(Delete) | |||
dd | 剪切当前行 | 行级 | 最常用剪切 |
2dd | 剪切当前行及下一行 | 行级 | 剪切2行 |
3dd | 剪切当前行及下两行 | 行级 | 剪切3行 |
d5j | 剪切当前行及下五行 | 行级 | 剪切6行 |
D | 剪切到行尾 | 行内 | 等价于d$ |
d$ | 剪切到行尾 | 行内 | 常用行内剪切 |
d0 | 剪切到行首 | 行内 | 从行首到光标 |
dw | 剪切一个单词 | 单词级 | 到下个单词开始 |
diw | 剪切当前单词 | 单词级 | 不含空格 |
daw | 剪切当前单词 | 单词级 | 含空格 |
d{ | 剪切到上一个段落开始 | 段落级 | 段落级剪切 |
d} | 剪切到下一个段落开始 | 段落级 | 段落级剪切 |
粘贴命令(Paste) | |||
p | 粘贴到光标后/下一行 | - | 最常用粘贴 |
P | 粘贴到光标前/上一行 | - | 反向粘贴 |
3p | 粘贴3次到光标后 | - | 重复粘贴 |
3P | 粘贴3次到光标前 | - | 重复粘贴 |
gp | 粘贴后移动光标 | - | 光标到末尾 |
gP | 粘贴前移动光标 | - | 光标到末尾 |
"ap | 从寄存器a粘贴 | - | 指定寄存器 |
"+p | 从系统剪贴板粘贴 | - | 系统剪贴板 |
9. 实用技巧和最佳实践
高效工作流程
- 复制编辑模式:
yy
→ 移动 →p
→ 编辑 - 剪切重组模式:
dd
→ 移动 →p
- 多重备份模式:
"ayy
→"byy
→ 选择性粘贴
寄存器管理策略
" 常用寄存器配置
let @a = "" " 清空寄存器a
let @q = "常用文本" " 预设常用内容" 实用映射
nnoremap <leader>y "+yy " 快速复制到系统剪贴板
nnoremap <leader>p "+p " 快速从系统剪贴板粘贴
vnoremap <leader>y "+y " 可视模式复制到系统剪贴板
批量操作技巧
" 批量复制不连续行
:g/pattern/y A " 将匹配行追加到寄存器A
:put a " 粘贴寄存器a的所有内容" 交换两行内容
ddp " 向下交换
ddkP " 向上交换" 复制粘贴到多个位置
"ayy " 复制到寄存器a
移动到目标位置1 → "ap " 粘贴
移动到目标位置2 → "ap " 再次粘贴
跨文件操作
" 文件间复制粘贴
"ayy " 在文件A中复制到寄存器a
:e file_b " 打开文件B
"ap " 粘贴寄存器a的内容" 使用系统剪贴板
"+yy " 复制到系统剪贴板
在其他应用程序中粘贴 " 可在任意程序使用
性能优化建议
- 合理使用寄存器:为不同类型内容分配专用寄存器
- 避免过度复制:只复制真正需要的内容
- 定期清理:使用
:reg
查看并清理无用寄存器 - 快捷键配置:为常用操作配置快捷键
10. 学习建议
循序渐进的学习路径
-
第一阶段:掌握基础三剑客
yy
、dd
、p
的熟练使用- 理解复制、剪切、粘贴的基本概念
-
第二阶段:学习范围操作
- 数字前缀的使用(
3yy
、5dd
) - 动作组合(
y3j
、d5k
)
- 数字前缀的使用(
-
第三阶段:掌握文本对象
yiw
、yaw
、yi"
、ya"
等- 理解 inside 和 around 的概念
-
第四阶段:深入寄存器系统
- 命名寄存器的使用
- 系统剪贴板的配置和使用
-
第五阶段:高级技巧应用
- Ex命令模式的批量操作
- 可视模式的灵活应用
实践建议
- 日常训练:在实际编辑中替换传统的复制粘贴操作
- 情景练习:模拟重构代码、整理文档等实际场景
- 速度测试:定期测试操作速度,追求流畅度
常见错误避免
- 不要混淆
p
和P
的区别 - 记住复制不会移动光标,剪切会删除内容
- 理解行级操作和字符级操作的粘贴差异
- 注意寄存器内容的覆盖规则
进阶技巧
" 宏录制结合复制粘贴
qa " 开始录制宏到寄存器a
yy移动p编辑 " 录制复制粘贴编辑操作
q " 停止录制
@a " 执行宏
@@ " 重复执行" 表达式寄存器
"=2+3<CR>p " 计算结果粘贴
"=system('date')<CR>p " 命令输出粘贴
📝 核心提示:Vim 的复制粘贴系统比传统编辑器更强大,关键在于理解寄存器概念和动作组合。熟练掌握后,文本编辑效率将大幅提升!