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. 第一阶段:掌握基础三剑客

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

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

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

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

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

实践建议

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

常见错误避免

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

进阶技巧

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

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

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

相关推荐
递归不收敛7 分钟前
Conda 常用命令汇总(新手入门笔记)
笔记·conda
前端橙一陈43 分钟前
Salesforce Developer Edition(开发者版) 搭建测试环境
经验分享·笔记·其他
电子小子洋酱1 小时前
BearPi小熊派 鸿蒙入门开发笔记(4)
笔记·华为·harmonyos
Han.miracle1 小时前
数据结构——排序的学习(一)
java·数据结构·学习·算法·排序算法
摇滚侠1 小时前
Spring Boot 3零基础教程,WEB 开发 通过配置类代码方式修改静态资源配置 笔记32
java·spring boot·笔记
电子云与长程纠缠2 小时前
Blender入门学习01
学习·blender
qiuiuiu4132 小时前
正点原子RK3568学习日志12-注册字符设备
linux·开发语言·单片机·学习·ubuntu
聪明的笨猪猪3 小时前
Java JVM “内存(1)”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
_dindong3 小时前
Linux网络编程:Socket编程TCP
linux·服务器·网络·笔记·学习·tcp/ip
金士顿3 小时前
ethercat网络拓扑详细学习
学习