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

embedded/2025/1/24 12:57:06/

文章目录

  • 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/embedded/156570.html

相关文章

【C++】详细讲解继承(上)

C面向对象的三大特性:封装,继承,多态。现在我们就介绍一下继承。 1.继承的概念及定义 1.1 继承的概念 继承机制是⾯向对象程序设计使代码可以 复⽤ 的最重要的⼿段。我们前面接触到的都是 函数 层次的复用,遇到过的 类 层次的复…

数学建模论文通用模板(细节方法二)

前面我们大概说了一些数学建模论文写作的重点,现在来更加细致的说明一下。 教会你各类竞赛数学建模论文写作(通用模板)-CSDN博客(这是细节方法一) 首先,在说明之前,还是那句话…

chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确

问题描述 chrome游览器又一款JSON插件叫JSON Formatter,游览器GET请求调用接口时,如果返回的数据是json格式,则会自动格式化展示,类似这样: 但是今天突然发现怎么也格式化不了,打开一个json文件倒是可以格…

EMS从0到1之BMS介绍

BMS介绍 写在前面BMS是什么BMS能做些什么BMS有什么作用写在结尾 写在前面 众所周知,BMS作为储能系统3S,是储能系统的重要组成部分,虽然我们不开发BMS,但作为EMS开发者我们必须了解BMS是什么,他能做些什么,…

【leetcode100】二叉搜索树中第k小的元素

1、题目描述 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。 示例 1: 输入:root [3,1,4,null,2], k 1 输出:1 2、初始思路 2.…

Web 渗透测试工具 - SpideyX

简介 SpideyX - 一款面向渗透测试人员和道德黑客的 Web 侦察渗透测试工具,包含具有异步并发性能的多种模式。 Spideyx 是一个有 3 种独立模式的工具,每种模式用于不同的方法和方法,Spideyx 是一个工具,但它等于 3 个工具&#xf…

【C语言学习】:C语言补充:转义字符,<<,>>操作符,IDE

🎁个人主页:我们的五年https://blog.csdn.net/djdjiejsn?typeblog 🔍系列专栏:C课程学习https://blog.csdn.net/djdjiejsn/category_12617142.html 🎉欢迎大家点赞👍评论📝收藏⭐文章 C语言学…

C语言二级 2025/1/20 周一

20. 关系表达式 四、程序设计题 1.请编写函数fun,其功能是:计算并输出3到n之间(含3和n)所有 素数的平方根之和。例如,在主函数中从键盘给n输入100后,输出 为:sum=148.8…