当前位置: 首页 > news >正文

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. 实用技巧和最佳实践

高效工作流程

  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 的复制粘贴系统比传统编辑器更强大,关键在于理解寄存器概念和动作组合。熟练掌握后,文本编辑效率将大幅提升!

http://www.xdnf.cn/news/966349.html

相关文章:

  • java Condition类
  • Alerting中配置多个OpsGenie时,如何匹配同一个条件匹配多个opsgenie的contact points
  • 【WiFi帧结构】
  • python/java环境配置
  • Django的HelloWorld程序
  • 1.4 超级终端
  • vue3 hooks的结构和作用和具体场景例子
  • 业财融合怎么做?如何把握业务与财务的边界?
  • @Configuration原理与实战
  • 【Kafka】消息队列Kafka知识总结
  • iview组件库:关于分页组件的使用与注意点
  • 什么是数据转换?数据转换有哪些方式?
  • 2025年06月10日Github流行趋势
  • Java SE - 数组
  • A 找倍数 (线段树)
  • 凤凰双展翅之七七一五八九五隔位六二五
  • LeetCode 146.LRU缓存
  • Web应用压力测试详解
  • 力扣LFU460
  • FR4 中的色散如何真正影响传播延迟?
  • VSCode主题设计大赛
  • Deepin 25 安装字体
  • 若依使用RedisCache需要注意的事项
  • idea大量爆红问题解决
  • OpenGL学习20250610
  • Docker重启流程解析
  • MySQL中的CONVERT_TZ() 函数
  • C++ 智能指针实现原理
  • [一生一芯] 如何基于iSTA 分析时序
  • 3-存储系统