Vim 复制/剪切/粘贴命令完整学习笔记

发布于:2025-06-12 ⋅ 阅读:(23) ⋅ 点赞:(0)

Vim 复制/剪切/粘贴命令完整学习笔记

目录


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 表示复制
  • + 表示复制到系统剪贴板

方法二:普通模式操作(更常见)
  1. 将光标放在当前行
  2. 输入:
"+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         " 粘贴系统剪贴板内容
<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. 实用技巧和最佳实践

高效工作流程

  1. 复制编辑模式yy → 移动 → p → 编辑
  2. 剪切重组模式dd → 移动 → p
  3. 多重备份模式"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                        " 复制到系统剪贴板
在其他应用程序中粘贴          " 可在任意程序使用

性能优化建议

  1. 合理使用寄存器:为不同类型内容分配专用寄存器
  2. 避免过度复制:只复制真正需要的内容
  3. 定期清理:使用 :reg 查看并清理无用寄存器
  4. 快捷键配置:为常用操作配置快捷键

10. 学习建议

循序渐进的学习路径

  1. 第一阶段:掌握基础三剑客

    • yyddp 的熟练使用
    • 理解复制、剪切、粘贴的基本概念
  2. 第二阶段:学习范围操作

    • 数字前缀的使用(3yy5dd
    • 动作组合(y3jd5k
  3. 第三阶段:掌握文本对象

    • yiwyawyi"ya"
    • 理解 inside 和 around 的概念
  4. 第四阶段:深入寄存器系统

    • 命名寄存器的使用
    • 系统剪贴板的配置和使用
  5. 第五阶段:高级技巧应用

    • Ex命令模式的批量操作
    • 可视模式的灵活应用

实践建议

  1. 日常训练:在实际编辑中替换传统的复制粘贴操作
  2. 情景练习:模拟重构代码、整理文档等实际场景
  3. 速度测试:定期测试操作速度,追求流畅度

常见错误避免

  • 不要混淆 pP 的区别
  • 记住复制不会移动光标,剪切会删除内容
  • 理解行级操作和字符级操作的粘贴差异
  • 注意寄存器内容的覆盖规则

进阶技巧

" 宏录制结合复制粘贴
qa                          " 开始录制宏到寄存器a
yy移动p编辑                  " 录制复制粘贴编辑操作
q                           " 停止录制
@a                          " 执行宏
@@                          " 重复执行

" 表达式寄存器
"=2+3<CR>p                  " 计算结果粘贴
"=system('date')<CR>p       " 命令输出粘贴

📝 核心提示:Vim 的复制粘贴系统比传统编辑器更强大,关键在于理解寄存器概念和动作组合。熟练掌握后,文本编辑效率将大幅提升!