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

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 文件中操作(复制)

vim 复制代码
:10,20y +
  • 10,20:指定行范围
  • y:复制(yank)
  • +:系统剪贴板寄存器

B 文件中操作(粘贴)

vim 复制代码
"+p

方法二:可视模式复制指定行

A 文件中操作(复制)

vim 复制代码
10G         " 跳转到第 10 行  
V           " 启动行选择模式  
20G         " 选择至第 20 行  
"+y         " 复制到系统剪贴板  

B 文件中操作(粘贴)

vim 复制代码
"+p         " 粘贴到光标之后  

复制全文到另一个窗口
方法一:命令复制全文**
vim 复制代码
:%y +
方法二:可视模式复制全文**
vim 复制代码
ggVG"+y

然后在 B 文件中粘贴:"+p


复制当前行到另一个文件(举例)

目标:从 A 文件中复制当前行,将其粘贴到另一个 GVim 窗口打开的 B 文件中。


方法一:命令模式复制当前行

在 A 文件中操作:

vim 复制代码
:.y +
  • . 表示当前行
  • y 表示复制
  • + 表示复制到系统剪贴板

方法二:普通模式操作(更常见)
  1. 将光标放在当前行
  2. 输入:
vim 复制代码
"+yy

切换到 B 文件的 GVim 窗口:

在目标位置输入:

vim 复制代码
"+p

举例操作说明:
  • 在 A 文件第 42 行:

    vim 复制代码
    42G
    "+yy
  • 然后切换到 B 文件,光标移动到目标位置,输入:

    vim 复制代码
    "+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 寄存器使用

vim 复制代码
" 复制到指定寄存器
"ayy        " 复制当前行到寄存器 a
"byiw       " 复制当前单词到寄存器 b
"c3dd       " 剪切3行到寄存器 c

" 从指定寄存器粘贴
"ap         " 粘贴寄存器 a 的内容
"bp         " 粘贴寄存器 b 的内容
"0p         " 粘贴最近复制的内容(不是删除的)

" 查看寄存器内容
:reg        " 查看所有寄存器
:reg a      " 查看寄存器 a 的内容
:reg abc    " 查看寄存器 a、b、c 的内容

5.3 系统剪贴板

vim 复制代码
" 复制到系统剪贴板
"+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 指定行范围操作

vim 复制代码
" 复制指定行范围
: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 模式匹配操作

vim 复制代码
" 复制匹配行
: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 → 选择性粘贴

寄存器管理策略

vim 复制代码
" 常用寄存器配置
let @a = ""  " 清空寄存器a
let @q = "常用文本"  " 预设常用内容

" 实用映射
nnoremap <leader>y "+yy      " 快速复制到系统剪贴板
nnoremap <leader>p "+p       " 快速从系统剪贴板粘贴
vnoremap <leader>y "+y       " 可视模式复制到系统剪贴板

批量操作技巧

vim 复制代码
" 批量复制不连续行
:g/pattern/y A              " 将匹配行追加到寄存器A
:put a                      " 粘贴寄存器a的所有内容

" 交换两行内容
ddp                         " 向下交换
ddkP                        " 向上交换

" 复制粘贴到多个位置
"ayy                        " 复制到寄存器a
移动到目标位置1 → "ap         " 粘贴
移动到目标位置2 → "ap         " 再次粘贴

跨文件操作

vim 复制代码
" 文件间复制粘贴
"ayy                        " 在文件A中复制到寄存器a
:e file_b                   " 打开文件B
"ap                         " 粘贴寄存器a的内容

" 使用系统剪贴板
"+yy                        " 复制到系统剪贴板
在其他应用程序中粘贴          " 可在任意程序使用

性能优化建议

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

10. 学习建议

循序渐进的学习路径

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

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

    • 数字前缀的使用(3yy、5dd)
    • 动作组合(y3j、d5k)
  3. 第三阶段:掌握文本对象

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

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

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

实践建议

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

常见错误避免

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

进阶技巧

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

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

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

相关推荐
老王爱玩车5 小时前
动态内存管理
c语言·开发语言·学习·面试
海绵宝宝转agent5 小时前
2026-10-9 leetcode100刷题+面经整理
笔记·算法·面试
yi0115 小时前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针
笔记·python·算法·leetcode·二分查找·双指针
yi0115 小时前
LeetCode 15:三数之和|排序 + 双指针,如何避免重复答案?
笔记·python·算法·leetcode·双指针
北风toto6 小时前
数据库笔记:Armstrong 公理系统与集合论的深度辨析
数据库·笔记
EasyBr指纹浏览器6 小时前
我的开源项目:小红书笔记归档,把来源和缺项一起留下
笔记·小红书·开源工具·素材管理·内容归档
海海不掉头发6 小时前
图论及其应用_课堂笔记整理_CSDN博客
笔记·图论
志尊宝6 小时前
Vue3 零基础每日笔记(075):图片懒加载与骨架屏
javascript·vue.js·笔记
lvqinglou6 小时前
学习Sql-part1 for婷姐
sql·学习·性能优化
会博通·代码搬运工6 小时前
家装数字化交付笔记:图纸归档、工地采集与档案系统对接的工程实践
笔记·数字化转型·档案管理系统·业务档案系统·家装数字化