【Vim Masterclass 笔记07】S05L19:Vim 剪切、复制、粘贴操作同步练习

文章目录

  • S05L19 Vim 剪切、复制、粘贴操作同步练习(Exercise 05 - Cut, Copy and Paste)
    • 1 训练目标
    • 2 操作指令
      • 2.1 打开 dyp.txt 文件
      • 2.2 交换文件的头两行
      • 2.3 将文件首行 put 到文件其他为止
      • 2.4 练习在光标位置的上方粘贴文本行
      • 2.5 通过交换字符顺序更正存在的笔误
      • 2.6 交换单词
      • 2.7 重复某一行
      • 2.8 重复某个单词
      • 2.9 使用数字寄存器(register)
      • 2.10 使用命名寄存器
      • 2.11 撤销与重做练习
    • 3 自由练习
    • 4 退出 Vim
  • S05L20 同步练习点评课(Exercises 05 - Cut, Copy and Paste - Walkthrough)

写在前面
本篇为第五章前两课内容(剪切复制粘贴+寄存器)的同步练习。全文已翻译成中文,方便快速回顾与练习。熟用 Vim 的关键在于大量的刻意练习。

S05L19 Vim 剪切、复制、粘贴操作同步练习(Exercise 05 - Cut, Copy and Paste)

1 训练目标

练习 Vim 中的剪切、复制、粘贴;熟悉 register 寄存器。1

2 操作指令

2.1 打开 dyp.txt 文件

用 Vim 打开源码包内的练习文件 dyp.txt(默认解压到 Downloads 文件夹下):

cd Downloads
cd vimclass
vim dyp.txt

2.2 交换文件的头两行

首先,用 DD 删除文件首行。该行会进入默认寄存器。然后使用 p 命令将该行粘贴到新的这行下面。

操作前,这两行应该像这样:

This was originally the first line in the file.
This was originally the second line in the file.

操作后应该变为这样:

This was originally the second line in the file.
This was originally the first line in the file.

2.3 将文件首行 put 到文件其他为止

切记:默认寄存器的内容可以多次使用。将文件最初的首行放到这一行下面:

What was the first line in the file originally?  Place it below:

方法:先定位到这一行,然后按 P 执行 put 命令。

2.4 练习在光标位置的上方粘贴文本行

将最初的首行内容粘贴到这一行的上方:

What was the first line in the file originally?  Place it above:

方法:先定位到这一行,然后按下 Shift + P

2.5 通过交换字符顺序更正存在的笔误

光标定位到这一行的字母 e 上:

teh

交换 eh 的位置,让其变为 the。方法:输入 X 删除 e,然后输入 P 将其粘贴到紧挨当前光标后面的位置。

重复上述流程更正下面四行拼错或输错的内容:

psell = spell
vmi = vim
wrod = word
taht = that

2.6 交换单词

将如下这行由:

second, First, third.

变为:

First, second, third.

方法:光标移至行首位置、即单词 seconds 上;然后使用 dW 命令(注意 W 是大写形式)将该单词连同后面的逗号一并删除;再用 W 令光标移至单词 third 的开头位置;最后使用 Shift + P 在当前光标位置的前方粘贴默认寄存器内的文本内容。

2.7 重复某一行

重复下面这一行,并将其复制到它的下方:

Duplicate this line.

方法:光标定位到该行,使用 yy 将其 yank 到默认寄存器。接着使用 p 命令粘贴到该行的下方。

2.8 重复某个单词

重复下面这一行的单词 really, really,

I really, really, love vim!

方法:光标定位到第一个单词 really 的字母 r 上;再用 y2W 命令将这两个单词(包括标点)复制到默认寄存器;然后用 Shift + P 粘贴到当前光标的前方。此时这行文本应该变成这样:

I really, really, really, really, love vim!

2.9 使用数字寄存器(register)

将文本 TODO 粘贴到文件中所有以 Fix this 开头的文本行上方;同时,删除所有标注了 Delete this 的行;从光标当前位置开始,向下浏览文件,交替执行删除与粘贴操作。

方法:先用 yy 复制 TODO 那行文本;再用 2dd 删除两行标有 Delete this 的文本行;光标定位到含有 Fix this 的行,然后将 TODO 粘贴到它的上方。这一步需要用到 0 号寄存器中保存的上一次复制的文本,输入 "0P 即可。重复上述操作,直到所有以 Fix 开头的行上方都有一个 TODO、同时所有包含 Delete 的行都被删除。

2.10 使用命名寄存器

先将以下这行文本存到 "j 寄存器中:

Yank this line into the "j register.

方法:光标定位到该行任意位置,输入 "jyy

然后再将下面这行内容放入 "f 寄存器。

Yank this line into the "f register.

方法:光标定位到该行任意位置,输入 "fyy

然后使用命令 "jp,将 "j 寄存器中的内容粘贴到下面这行的下方:

Put the contents of the "j register below:

再用 "fp"f 寄存器中的文本内容粘贴到下面这一行的下方:

Put the contents of the "f register below:

将下面这行内容追加到 "j 寄存器内:

Append this line to the "j register.

方法:光标定位到该行任意位置,并输入命令 "Jyy(注意 J 为大写字母)。

再将下列一行文本追加到 "f 寄存器内:

Append this line to the "f register.

方法:光标定位到该行任意为止,输入命令 "Fyy(注意 F 为大写字母)。

使用 :reg + Enter 查看所有寄存器中的内容。例如查看 "j"f 寄存器,使用命令 :reg jf + Enter

然后使用 "jp 命令,将 "j 寄存器中的内容粘贴到下面这行文字的下方:

Put the contents of the "j register below:

接着,使用 "fp 命令,将 "f 寄存器中的内容粘贴到下面这行文字的下方:

Put the contents of the "f register below:

2.11 撤销与重做练习

删除以下三行内容:

ONE)
TWO)
THREE)

方法:光标定位到第一行,输入 3dd;使用 u 命令撤销删除;注意看三行内容是怎么还原的。

通过 Ctrl + R 重复执行刚才的删除命令,此时这三行又被重新删除。

向文件插入一个新行:先使用 i 命令进入插入模式;然后在 Vim 中输入一些句子,例如下面这句话:

Vim is fun!

按下 Escape 键返回正常模式。使用 u 命令撤销刚才输入的文本。然后使用 Ctrl + R 重新插入刚才的文本内容。

3 自由练习

鼓励自行尝试一些组合练习。最好是有个现成的文件需要修改,然后用 Vim 打开,用学到的删除、复制、粘贴去操作文件内容。

4 退出 Vim

若要放弃文件变更以便下次重新练习,使用退出命令 :q! + Enter


S05L20 同步练习点评课(Exercises 05 - Cut, Copy and Paste - Walkthrough)

没有值得提炼的补充知识点。多思多练,熟能生巧。

练习题使用文件:vimclass/dyp.txt


  1. 本节练习另附精美排版 PDF 格式,阅读体验更佳,详见:vimclass/Exercise-05-CutCopyPaste.pdf ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Rust自学】10.6. 生命周期 Pt.2:生命周期的语法与例子

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 10.6.1. 生命周期标注语法 生命周期的标注并不会改变引用的生命周期长度。如果某个函数它制定了泛型生命周期参数,那么它就可…

HTML 显示器纯色亮点检测工具

HTML 显示器纯色亮点检测工具 相关资源文件已经打包成html等文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Html相关程序案例,秉着开源精神的想法,望大家喜欢&#…

服务器虚拟化:现代 IT 基础架构的核心技术

服务器虚拟化:现代 IT 基础架构的核心技术 随着云计算和大规模数据中心的快速发展,服务器虚拟化已成为现代 IT 基础架构中的核心技术。通过虚拟化,企业可以在同一台物理服务器上运行多个虚拟机(VM),从而提…

晨辉面试抽签和评分管理系统之一:考生信息管理和编排

晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

PHP7和PHP8的最佳实践

php 7 和 php 8 的最佳实践包括:使用类型提示以避免运行时错误;利用命名空间组织代码并避免命名冲突;采用命名参数、联合类型等新特性增强可读性;用错误处理优雅地处理异常;关注性能优化,如避免全局变量和选…

Hadoop、Flink、Spark和Kafka

Hadoop、Flink、Spark和Kafka是大数据处理领域中的四个重要工具,它们在架构、数据处理方式以及性能等方面都存在区别。以下是具体分析: 架构 Hadoop:Hadoop的核心是HDFS(Hadoop Distributed File System)和MapReduce编…

C++和OpenGL实现3D游戏编程【2.1】——游戏基类Object的构建

欢迎来到zhooyu的专栏。 主页网址:【zhooyu】 专栏网址:【C++和OpenGL实现3D游戏编程】 🌟🌟🌟这里将通过一个OpenGL实现3D游戏编程实例教程,带大家深入学习OpenGL知识。知识无穷而人力有限,专题能够帮助您在有限的时间内快速了解并掌握OpenGL编程,深入掌握知识精华…

vue-i18n报错

1. 开发环境报错Uncaught (in promise) TypeError: ‘set’ on proxy: trap returned falsish for property ‘$t’ legacy需要设置为false const i18n createI18n({legacy: false,// 默认语言locale: lang,// 设置语言环境messages, })2. 打包配置tsc --noEmit时报错&#…

Vue 项目自动化部署:Coding + Jenkins + Nginx 实践分享

前言 本文详细记录如何使用 Coding (以 Jenkinsfile 为核心) 和 Nginx 部署 Vue 项目,包含完整流程、配置细节及注意事项,为开发者提供一个高效的实践参考。 准备工作 这里借用一个优秀的开源项目做演示:芋道源码/yudao-ui-admin-vue2。 以…

基于Arduino的FPV头部追踪相机系统

构建FPV头部追踪相机:让你置身于遥控车辆之中! 在遥控车辆和模型飞行器的世界中,第一人称视角(FPV)体验一直是爱好者们追求的目标。通过FPV头部追踪相机,你可以像坐在车辆或飞行器内部一样,自由…

C# 服务生命周期:Singleton、Scoped、Transient

文章目录 1、概念:服务生命周期单例 (Singleton) :作用域 (Scoped) :瞬态 (Transient) : 2、对 Scoped 和 Transient 进一步辨析Scoped 生命周期Transient 生命周期选择哪种生命周期 1、概念:服务生命周期 单例 (Singleton) : 整个应用程序生命周期中只有一个实例被创建并共享…

【QT-QTableView实现鼠标悬浮(hover)行高亮显示+并设置表格样式】

1、自定义委托类 HoverDelegate hoverdelegate.h #ifndef HOVERDELEGATE_H #define HOVERDELEGATE_H#include <QObject> #include <QStyledItemDelegate>class hoverdelegate : public QStyledItemDelegate {Q_OBJECT // 添加 Q_OBJECT 宏public:explicit hoverde…

高并发场景下的秒杀系统架构设计与实现

引言 秒杀系统是一种高并发场景的典型应用&#xff0c;广泛存在于电商平台、抢票系统和促销活动中。秒杀活动的特点是短时间内吸引大量用户同时访问并尝试抢购商品&#xff0c;这对系统的高并发处理能力、稳定性和用户体验提出了极高的要求。 在秒杀系统中&#xff0c;常见的…

【渗透测试术语总结】

Top 渗透测试常用专业术语 相信大家和我一样&#xff0c;搞不清这些专业名词的区别&#xff0c;所以我来整理一下。 1. POC、EXP、Payload与Shellcode POC&#xff1a;全称 Proof of Concept &#xff0c;中文 概念验证 &#xff0c;常指一段漏洞证明的代码。 EXP&#xf…

企业网络性能监控

什么是网络性能监控 网络性能监控&#xff08;NPM&#xff09;是指对计算机网络的性能进行持续测量、分析和管理的过程&#xff0c;通过监控流量、延迟、数据包丢失、带宽利用率和正常运行时间等关键指标&#xff0c;确保网络高效、安全地运行&#xff0c;并将停机时间降至最低…

【Vim Masterclass 笔记05】第 4 章:Vim 的帮助系统与同步练习(L14+L15+L16)

文章目录 Section 4&#xff1a;The Vim Help System&#xff08;Vim 帮助系统&#xff09;S04L14 Getting Help1 打开帮助系统2 退出帮助系统3 查看具体命令的帮助文档4 查看帮助文档中的主题5 帮助文档间的上翻、下翻6 关于 linewise7 查看光标所在术语名词的帮助文档8 关于退…

Zookeeper是如何解决脑裂问题的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper是如何解决脑裂问题的?】面试题。希望对大家有帮助&#xff1b; Zookeeper是如何解决脑裂问题的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过一系列的机制来防止和解决脑裂&#xff08;sp…

【C++】const关键字_运算符重载_继承

目录 Const关键字 常量 常量指针 参数传递 返回值 成员函数 const作用域 运算符重载 继承 继承同名静态成员函数 构造和析构的调用顺序 多重继承 菱形继承&#xff08;二义性&#xff09; 虚继承的工作原理 友元 常&#xff08;成员&#xff09;函数 Const关键字…

QT-窗口嵌入外部exe

窗口类&#xff1a; #pragma once #include <QApplication> #include <QWidget> #include <QVBoxLayout> #include <QProcess> #include <QTimer> #include <QDebug> #include <Windows.h> #include <QWindow> #include <…

Java(day4)

二维数组 静态初始化 动态初始化 练习 public class test1 {public static void main(String[]args){int arr[][]{{22,66,44},{77,33,88},{25,45,65},{11,66,99}};int sum0;for(int i0;i<arr.length;i){int a0;for(int j0;j<arr[i].length;j){sumarr[i][j];aarr[i][j];…