【Vim Masterclass 笔记24】S10L43 + L44:同步练习10 —— 基于 Vim 缓冲区的各类基础操作练习(含点评课)

server/2025/1/23 0:25:45/

文章目录

  • S10L43 Exercise 12 - Vim Buffers
    • 1 训练目标
    • 2 操作指令
      • 2.1. 打开 buf* 文件
      • 2.2. 查看缓冲区 View the buffers
      • 2.3. 切换缓冲区 Switch buffers
      • 2.4. 同时编辑多个缓冲区 Edit multiple buffers at once
      • 2.5. 缓冲区的增删操作 Add and delete buffers
      • 2.6. 练习 Vim 内置资源管理器的用法 Use the Explorer
      • 2.7. 对所有缓冲区批量执行命令 Execute a command in all buffers
      • 2.8. 放弃所有缓冲区中的变更内容 Abandon your changes to all buffers
  • S10L44 Exercise 12 - Vim Buffers - Walkthrough

写在前面
没想到这么快就来到了本套课程的最后一个同步练习课。由于都是对 Vim 缓冲区进行的各种基础操作,练习量看似不少,其实按要求完成最多不超过三分钟,熟练的话还可以更快。但本篇也仅仅是 “领进门” 的水平,要真正融会贯通形成肌肉记忆,还得靠自己寻找应用场景,用这些基础操作来解决实际问题。


S10L43 Exercise 12 - Vim Buffers

1 训练目标

练习 Vim 对多个缓冲区的各类操作。1

2 操作指令

2.1. 打开 buf* 文件

Vim 打开源码包内所有以 buf 开头的练习文件(默认解压到 Downloads 文件夹下):

cd Downloads
cd vimclass
vim buf*

2.2. 查看缓冲区 View the buffers

使用命令 :buffers:files 亦或是 :ls 来查看缓冲区列表,三者效果都一样。运行后将看到如下信息:

:ls1 %a   "buf-ant.txt"                  line 12      "buf-bed.txt"                  line 03      "buf-cat.txt"                  line 04      "buf-dad.txt"                  line 0

2.3. 切换缓冲区 Switch buffers

:buffer 命令,或简写为 :b,可用于切换缓冲区。试通过与文件 buf-bed.txt 关联的唯一缓冲区编号来打开该缓冲区;即输入 :b + Enter

接着,再用文件名切换到与文件 buf-cat.txt 关联的缓冲区。具体做法是输入命令 :b buf-cat.txt + Enter

接着,再练习用 Tab 键补全功能打开与文件 buf-dad.txt 关联的缓冲区,即输入命令 :b + Space + Tab + Tab + Tab + Tab + Enter

想要快速返回刚才打开的缓冲区,按 Ctrl + ^ 即可 2。此时窗口中应该看到 buf-cat.txt 中的内容。

:ls + Enter 查看缓冲区列表,注意观察上面的标记符号。3 号缓冲区被标记为 %a,表示该缓冲区是当前窗口显示的活动缓冲区;4 号缓冲区的标记为 #,表示一个备用缓冲区(alternative buffer)。

:ls1      "buf-ant.txt"                  line 12      "buf-bed.txt"                  line 13 %a   "buf-cat.txt"                  line 04 #    "buf-dad.txt"                  line 1

再按 Ctrl + ^ 切回 4 号缓冲区。

执行命令 :bprevious + Enter 来到 3 号缓冲区。您也可以使用简写形式 :bp + Enter 实现该操作。

接着,输入 :bp + Enter 切到上一个缓冲区,即 2 号缓冲区。

现在调转方向,用 :bnext + Enter 命令或其简写形式 :bn + Enter 来到下一个缓冲区,即 3 号缓冲区。

要快速转到列表中的第一个缓冲区,执行命令 :bfirst 即可。当然也可以使用它的简写形式 :bf + Enter 来实现同样的效果。

要换到列表中的最后一个缓冲区,使用命令 :blast + Enter:bl + Enter 即可。

2.4. 同时编辑多个缓冲区 Edit multiple buffers at once

对当前缓冲区的内容进行更改。例如键入 I 启用插入模式,然后输入一些文字(例如 dad),并按 Escape 键回到正常模式。

在尝试使用命令 :b2 切到 2 号缓冲区。若此时没有启用 hidden 选项,Vim 将提示如下报错信息:

E37: No write since last change (add ! to override)

根据提示输入 :b!2 + Enter,这样就强制打开了 2 号缓冲区。再用 :ls + Enter 查看缓冲区列表,会看到之前的缓冲区新增了 h+ 标记,说明该缓冲区是一个修改过的隐藏缓冲区。

:ls1      "buf-ant.txt"                  line 12 %a   "buf-bed.txt"                  line 13      "buf-cat.txt"                  line 04 #h + "buf-dad.txt"                  line 1

现在启用 hidden 选项,输入命令 :set hidden + Enter。再修改当前缓冲区的内容,例如按 I 开启插入模式,输入 bed 后按 Escape 键返回正常模式。

再用 :b1 + Enter 切到 1 号缓冲区,此时不会出现任何报错信息。用 :ls + Enter 进行查看,会发现 2 号和 4 号都被打上了 h+ 标记,说明它们都是修改过的隐藏缓冲区:

:ls1 %a   "buf-ant.txt"                  line 12 #h + "buf-bed.txt"                  line 13      "buf-cat.txt"                  line 04  h + "buf-dad.txt"                  line 1

2.5. 缓冲区的增删操作 Add and delete buffers

练习再打开一个名为 nav.txt 的文件进行编辑。具体做法是输入 :e nav.txt + Enter。这样 nav.txt 的内容就被加载到了当前窗口显示的缓存区中。再用 :ls + Enter 进行查看,将得到如下结果:

:ls1 #h   "buf-ant.txt"                  line 12  h + "buf-bed.txt"                  line 13      "buf-cat.txt"                  line 14  h + "buf-dad.txt"                  line 15 %a   "nav.txt"                      line 1

假定此时无需编辑 nav.txt 文件,则可以输入 :bd + Enter 进行删除。再用 :ls + Enter 查看缓冲区列表,可以看到如下结果:

:ls1 %a   "buf-ant.txt"                  line 12  h + "buf-bed.txt"                  line 13      "buf-cat.txt"                  line 14  h + "buf-dad.txt"                  line 1

接着,输入 :bd3 + Enter 删除 3 号缓冲区。再用 :ls + Enter 查看缓冲区列表,会可以看到如下结果:

:ls1 %a   "buf-ant.txt"                  line 12  h + "buf-bed.txt"                  line 14  h + "buf-dad.txt"                  line 1

2.6. 练习 Vim 内置资源管理器的用法 Use the Explorer

下面尝试用 Vim 内置的资源管理器再打开一个名为 help.txt 的文件。具体做法:输入 :E + Enter 启动资源管理器,然后使用学过的 Vim 导航命令将光标定位到 help.txt 文件下,并按 Enter 键将其加载到当前窗口内。

然后,输入 :bd + Enter 舍弃(discard)该缓冲区。

2.7. 对所有缓冲区批量执行命令 Execute a command in all buffers

下面练习对所有缓冲区执行全局替换操作。回忆一下替换命令的语法::[range]s[ubstitute]/{pattern}/{string}/[flags];再回忆一下选中整个文件范围的 % 标记,以及可用于执行全局替换的标记 g。这样一来,对应的全局替换命令就可以写作::%s/{old}/{new}/g。然后将其与 :bufdo 命令相结合,实现将每个缓冲区内的字符 # 批量替换为字符 @

具体做法:输入命令 :bufdo %s/#/@/g + Enter。用 :ls + Enter 进行检查,会看到这些缓冲区都被修改了,都打上了 + 标记。在输入 :bf + Enter 来到第一个缓冲区,看看是否也替换成功了。得到的结果如下所示:

   @     @     @  @@@@@@@@ @    @@    @     @@   @   @ @   @     @
@     @  @  @  @     @
@@@@@@@  @   @ @     @
@     @  @    @@     @
@     @  @     @     @
This training is provided by LinuxTrainingAcademy.com.

2.8. 放弃所有缓冲区中的变更内容 Abandon your changes to all buffers

如果编辑好了 vimrc 文件,就可以保存内容并退出 Vim,使用命令::wq! + Enter

如果希望后续能继续练习上述操作,则可以使用命令 :qall! + Enter 放弃所有修改;否则可以用 :wall 命令来保存所有内容。


S10L44 Exercise 12 - Vim Buffers - Walkthrough

本节为 Vim 缓冲区同步练习课的点评部分。没有特别需要补充的内容,练习中需要多思考,尽快形成肌肉记忆,并在课外结合具体场景来解决实际问题。


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

  2. 经验证,为避免与 Windows Terminal 快捷键冲突,应使用 Ctrl + 6;另外,该组合键在 Linux 系统下仍然有效。 ↩︎


http://www.ppmy.cn/server/160599.html

相关文章

K8S中Pod控制器之CronJob(CJ)控制器

CronJob 控制器是 Kubernetes 中用于周期性执行任务的一种控制器,它基于 Job 控制器来创建和管理作业。以下是 CronJob 的一些关键特点: 周期性调度:CronJob 允许您定义一个基于时间的调度,类似于 Linux 的 cron 工具,…

MindAgent:基于大型语言模型的多智能体协作基础设施

2023-09-18 ,加州大学洛杉矶分校(UCLA)、微软研究院、斯坦福大学等机构共同创建的新型基础设施,目的在评估大型语言模型在游戏互动中的规划和协调能力。MindAgent通过CuisineWorld这一新的游戏场景和相关基准,调度多智…

在 vscode + cmake + GNU 工具链的基础上配置 JLINK

安装 JLINK JLINK 官网链接 下载安装后找到安装路径下的可执行文件 将此路径添加到环境变量的 Path 中。 创建 JFlash 项目 打开 JFlash,选择新建项目 选择单片机型号 在弹出的窗口中搜索单片机 其他参数根据实际情况填写 新建完成: 接下来设置…

STM32 FreeRTOS中断管理

目录 FreeRTOS的中断管理 1、STM32中断优先级管理 2、FreeRTOS任务优先级管理 3、寄存器和内存映射寄存器 4、BASEPRI寄存器 5、FreeRTOS与STM32中断管理结合使用 vPortRaiseBASEPRI vPortSetBASEPRI 6、FromISR后缀 7、在中断服务函数中调用FreeRTOS的API函数需注意 F…

电脑如何访问手机文件?

手机和电脑已经深深融入了我们的日常生活,无时无刻不在为我们提供服务。除了电脑远程操控电脑外,我们还可以在电脑上轻松地访问Android或iPhone手机上的文件。那么,如何使用电脑远程访问手机上的文件呢? 如何使用电脑访问手机文件…

Android 11适配全攻略:从理论到实践

随着Google正式发布Android 11,开发者们迎来了新的挑战和机遇。Android 11不仅带来了全新的用户体验和功能提升,还要求开发者们对应用进行相应的适配,以确保应用的兼容性和稳定性。本文将从理论到实践,全面解析Android 11的适配攻…

【Java】阿里云OSS上传、删除文件

阿里云OSS上传、删除文件 编写AliOssConfig&#xff1a; import lombok.Data;/*** <p>DESC: </p>* <p>VERSION:1.0.0</p>*/ Data public class AliOssConfig {private String endpoint;private String accessKey;private String accessSecret;private…

开发常用工具

在项目开发中&#xff0c;工具的使用起到了至关重要的作用&#xff0c;正所谓工欲善其事&#xff0c;必先利其器&#xff0c;掌握一些实用的开发工具能够使我们的开发效率事半功倍。 那么我们应该掌握哪些开发工具的使用方法呢&#xff1f;其实一路走来&#xff0c;我们已经介…