Vim 复制/剪切/粘贴命令完整学习笔记_vim 粘贴
Vim 复制/剪切/粘贴命令完整学习笔记
目录
文章目录
- Vim 复制/剪切/粘贴命令完整学习笔记
-
- 目录
- 1. 核心概念
- 2. 复制命令(Yank)
-
- 2.1 基础复制操作
- 2.2 范围复制操作
- 2.3 文本对象复制
- 2.4 高级复制技巧
- 2.5 跨窗口(两个 GVim 实例)复制粘贴
-
- 复制粘贴:指定范围行
-
- 方法一:命令模式复制指定行
- 方法二:可视模式复制指定行
- 复制全文到另一个窗口
-
- 方法一:命令复制全文**
- 方法二:可视模式复制全文**
- 复制当前行到另一个文件(举例)
-
- 方法一:命令模式复制当前行
- 方法二:普通模式操作(更常见)
- 举例操作说明:
- 注意事项
- 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 进行复制
2.5 跨窗口(两个 GVim 实例)复制粘贴
复制粘贴:指定范围行
- 分别在两个 独立的 GVim 实例 中打开了 A 文件 和 B 文件
- 需要从 A 文件复制指定行范围(如第 10~20 行)到 B 文件中
- 要求系统支持剪贴板功能(Vim 编译含有
+clipboard
)
方法一:命令模式复制指定行
A 文件中操作(复制)
:10,20y +
10,20
:指定行范围y
:复制(yank)+
:系统剪贴板寄存器
B 文件中操作(粘贴)
\"+p
方法二:可视模式复制指定行
A 文件中操作(复制)
10G \" 跳转到第 10 行 V \" 启动行选择模式 20G \" 选择至第 20 行 \"+y \" 复制到系统剪贴板
B 文件中操作(粘贴)
\"+p \" 粘贴到光标之后
复制全文到另一个窗口
方法一:命令复制全文**
:%y +
方法二:可视模式复制全文**
ggVG\"+y
然后在 B 文件中粘贴:
\"+p
复制当前行到另一个文件(举例)
目标:从 A 文件中复制当前行,将其粘贴到另一个 GVim 窗口打开的 B 文件中。
方法一:命令模式复制当前行
在 A 文件中操作:
:.y +
.
表示当前行y
表示复制+
表示复制到系统剪贴板
方法二:普通模式操作(更常见)
- 将光标放在当前行
- 输入:
\"+yy
切换到 B 文件的 GVim 窗口:
在目标位置输入:
\"+p
举例操作说明:
-
在 A 文件第 42 行:
42G\"+yy
-
然后切换到 B 文件,光标移动到目标位置,输入:
\"+p
即完成当前行的跨窗口复制粘贴。
注意事项
- 粘贴命令
\"+p
必须在普通模式或命令行执行 +clipboard
支持可通过:version
检查 或者终端输入gvim --version | grep clipboard
- 若无效,需安装如
gvim
,vim-gtk3
,vim-gnome
等支持剪贴板的版本
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 \" 粘贴系统剪贴板内容+ \" 在插入模式下粘贴系统剪贴板内容\" 配置自动使用系统剪贴板set clipboard=unnamedplus \" Linuxset 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. 命令速查表
yy
/Y
2yy
3yy
yw
yiw
yaw
y$
y0
y{
y}
yG
ygg
dd
2dd
3dd
d5j
D
d$
d0
dw
diw
daw
d{
d}
p
P
3p
3P
gp
gP
\"ap
\"+p
9. 实用技巧和最佳实践
高效工作流程
- 复制编辑模式:
yy
→ 移动 →p
→ 编辑 - 剪切重组模式:
dd
→ 移动 →p
- 多重备份模式:
\"ayy
→\"byy
→ 选择性粘贴
寄存器管理策略
\" 常用寄存器配置let @a = \"\" \" 清空寄存器alet @q = \"常用文本\" \" 预设常用内容\" 实用映射nnoremap y \"+yy \" 快速复制到系统剪贴板nnoremap p \"+p \" 快速从系统剪贴板粘贴vnoremap 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 \" 开始录制宏到寄存器ayy移动p编辑 \" 录制复制粘贴编辑操作q \" 停止录制@a \" 执行宏@@ \" 重复执行\" 表达式寄存器\"=2+3p \" 计算结果粘贴\"=system(\'date\')p \" 命令输出粘贴
📝 核心提示:Vim 的复制粘贴系统比传统编辑器更强大,关键在于理解寄存器概念和动作组合。熟练掌握后,文本编辑效率将大幅提升!