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

文章目录

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

写在前面

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


S10L43 Exercise 12 - Vim Buffers

1 训练目标

练习 Vim 对多个缓冲区的各类操作。[1](#1)

2 操作指令

2.1. 打开 buf* 文件

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

bash 复制代码
cd Downloads
cd vimclass
vim buf*

2.2. 查看缓冲区 View the buffers

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

markdown 复制代码
:ls
  1 %a   "buf-ant.txt"                  line 1
  2      "buf-bed.txt"                  line 0
  3      "buf-cat.txt"                  line 0
  4      "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](#2)。此时窗口中应该看到 buf-cat.txt 中的内容。

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

markdown 复制代码
:ls
  1      "buf-ant.txt"                  line 1
  2      "buf-bed.txt"                  line 1
  3 %a   "buf-cat.txt"                  line 0
  4 #    "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 将提示如下报错信息:

markdown 复制代码
E37: No write since last change (add ! to override)

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

markdown 复制代码
:ls
  1      "buf-ant.txt"                  line 1
  2 %a   "buf-bed.txt"                  line 1
  3      "buf-cat.txt"                  line 0
  4 #h + "buf-dad.txt"                  line 1

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

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

markdown 复制代码
:ls
  1 %a   "buf-ant.txt"                  line 1
  2 #h + "buf-bed.txt"                  line 1
  3      "buf-cat.txt"                  line 0
  4  h + "buf-dad.txt"                  line 1

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

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

markdown 复制代码
:ls
  1 #h   "buf-ant.txt"                  line 1
  2  h + "buf-bed.txt"                  line 1
  3      "buf-cat.txt"                  line 1
  4  h + "buf-dad.txt"                  line 1
  5 %a   "nav.txt"                      line 1

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

markdown 复制代码
:ls
  1 %a   "buf-ant.txt"                  line 1
  2  h + "buf-bed.txt"                  line 1
  3      "buf-cat.txt"                  line 1
  4  h + "buf-dad.txt"                  line 1

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

markdown 复制代码
:ls
  1 %a   "buf-ant.txt"                  line 1
  2  h + "buf-bed.txt"                  line 1
  4  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 来到第一个缓冲区,看看是否也替换成功了。得到的结果如下所示:

markdown 复制代码
   @     @     @  @@@@@@@
  @ @    @@    @     @
 @   @   @ @   @     @
@     @  @  @  @     @
@@@@@@@  @   @ @     @
@     @  @    @@     @
@     @  @     @     @
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 系统下仍然有效。 ↩︎

相关推荐
烧冻鸡翅QAQ22 分钟前
考研408笔记
笔记·考研
StarPrayers.24 分钟前
卷积层(Convolutional Layer)学习笔记
人工智能·笔记·深度学习·学习·机器学习
能不能别报错1 小时前
K8s学习笔记(十五) pause容器与init容器
笔记·学习·kubernetes
无言以对,沉默不语,随你随你。1 小时前
【解决办法】GitBash不能在任意文件夹打开
经验分享·笔记·git
牛马大师兄2 小时前
STM32独立看门狗IWDG与窗口看门狗WWDG知识梳理笔记
笔记·stm32·单片机·嵌入式硬件·嵌入式·看门狗
wan5555cn2 小时前
Windows 11系统鼠标键盘被禁用问题的全面解决方案
windows·笔记·深度学习·计算机外设
zhangrelay3 小时前
ROS云课三分钟-使用动态参数重配置调试Teb导航案例-251008
笔记·学习
BingeBlog3 小时前
[01] Qt的UI框架选择和对比
开发语言·c++·笔记·qt·ui·开源软件
生物小卡拉3 小时前
R脚本——Deseq2差异表达分析--v1.0
windows·经验分享·笔记·学习·信息可视化·数据分析
初九之潜龙勿用5 小时前
技术与情感交织的一生 (十四)
笔记·印象笔记