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

news2025/1/23 3:47:28

文章目录

  • 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 来查看缓冲区列表,三者效果都一样。运行后将看到如下信息:

: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。此时窗口中应该看到 buf-cat.txt 中的内容。

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

: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 将提示如下报错信息:

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

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

: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+ 标记,说明它们都是修改过的隐藏缓冲区:

: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 进行查看,将得到如下结果:

: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 查看缓冲区列表,可以看到如下结果:

: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 查看缓冲区列表,会可以看到如下结果:

: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 来到第一个缓冲区,看看是否也替换成功了。得到的结果如下所示:

   @     @     @  @@@@@@@
  @ @    @@    @     @
 @   @   @ @   @     @
@     @  @  @  @     @
@@@@@@@  @   @ @     @
@     @  @    @@     @
@     @  @     @     @
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.coloradmin.cn/o/2280681.html

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

相关文章

‘list‘ object has no attribute ‘mul‘

原来运行得好好的,突然出现错误:list object has no attribute mul ,更换一个输入路径,又没问题,改一个路径,还是出现错误,很奇怪,后来又没有问题,记录一下。 参考这文…

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的旅行社在线预订与行程管理系统

开题报告 本文旨在设计研究与开发一个旅行社在线预订与行程管理系统。首先,本文介绍了旅行社在线预订与行程管理系统相关技术集成开发环境、软硬件环境,SpringBoot框架、Vue.js框架的基本原理和优势,以及在旅行社在线预订与行程管理系统开发…

HarmonyOS快速入门

HarmonyOS快速入门 1、基本概念 UI框架: HarmonyOS提供了一套UI开发框架,即方舟开发框架(ArkUI框架)。方舟开发框架可为开发者提供应用UI开发所必需的能力,比如多种组件、布局计算、动画能力、UI交互、绘制等。 方…

[论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

SQL sever数据导入导出实验

1.创建数据库TCP-H (1)右键“数据库”,点击“新建数据库”即可 (2)用sql语言创建,此处以创建数据库DB_test为例,代码如下: use master;go--检查在当前服务器系统中的所有数据里面…

Vue平台开发三——项目管理页面

前言 对于多个项目的使用,可能需要进行项目切换管理,所以这里创建一个项目管理页面,登录成功后跳转这个页面,进行选择项目,再进入Home页面展示对应项目的内容。 一、实现效果图预览 二、页面内容 功能1、项目列表展…

PyCharm+RobotFramework框架实现UDS自动化测试- (四)项目实战0x10

1.环境搭建 硬件环境:CANoe、待测设备(包含UDS诊断模块) 2.pythonPyCharm环境 pip install robotframework pip install robotframework-ride pip install openpyxl pip install udsoncan pip install python-can pip install can-isotp3…

Qt基础项目篇——Qt版Word字处理软件

一、核心功能 本软件为多文档型程序,界面是标准的 Windows 主从窗口 拥有:主菜单、工具栏、文档显示区 和 状态栏。 所要实现的东西,均在下图了。 开发该软件,主要分为下面三个阶段 1)界面设计开发 多窗口 MDI 程序…

USART_串口通讯轮询案例(HAL库实现)

引言 前面讲述的串口通讯案例是使用寄存器方式实现的,有利于深入理解串口通讯底层原理,但其开发效率较低;对此,我们这里再讲基于HAL库实现的串口通讯轮询案例,实现高效开发。当然,本次案例需求仍然和前面寄…

leetcode刷题记录(七十二)——146. LRU 缓存

(一)问题描述 146. LRU 缓存 - 力扣(LeetCode)146. LRU 缓存 - 请你设计并实现一个满足 LRU (最近最少使用) 缓存 [https://baike.baidu.com/item/LRU] 约束的数据结构。实现 LRUCache 类: * LRUCache(int capacity)…

C++ 类- 构造和析构

空类 class A {};空类大小: sizeof(A) 1编译器会默认生成 6 个成员函数: class A { public:A();//构造函数 - 完成对象初始化工作~A();//析构函数 - 完成对象的资源清理A(const A& a);//拷贝构造函数 - 使用同一类中之前创建的对象来初始化新创建…

ubuntu20.04有亮度调节条但是调节时亮度不变

尝试了修改grub文件,没有作用,下载了brightness-controllor,问题解决了。 sudo add-apt-repository ppa:apandada1/brightness-controller sudo apt update sudo apt install brightness-controller 之后在应用软件中找到brightness-contro…

macOS如何进入 Application Support 目录(cd: string not in pwd: Application)

错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下: 拼写错误或路径错误:确保你输入的目录名称正确。目录名称是区分大小写的,因此请确保使用正确的大小写。正确的目录名…

包文件分析器 Webpack Bundle Analyzer

webpack-bundle-analyzer 是一个非常有用的工具,用于可视化和分析 Webpack 打包生成的文件。这使得开发者能够更好地理解应用的依赖关系、包的大小,以及优化打包的机会。以下是关于 webpack-bundle-analyzer 的详细介绍,包括它的安装、使用以…

【深度解析Java 20天速成】04_IDEA的安装与使用

【Why IDEA ?】 【注】JetBrains官方说明: 尽管我们采取了多种措施确保受访者的代表性,但结果可能会略微偏向 JetBrains 产品的用户,因为这些用户更有可能参加调查。 此外,2022年,某美国软件开发商在对近千名专业的Ja…

算法竞赛之差分进阶——等差数列差分 python

目录 前置知识进入正题实战演练 前置知识 给定区间 [ l, r ],让我们把数组中的[ l, r ] 区间中的每一个数加上c,即 a[ l ] c , a[ l 1 ] c , a[ l 2] c , a[ r ] c; 怎么做?很简单,差分一下即可 还不会的小伙伴点此进入学习 进入正题 …

【HarmonyOS NEXT】华为分享-碰一碰开发分享

关键词:鸿蒙、碰一碰、systemShare、harmonyShare、Share Kit 华为分享新推出碰一碰分享,支持用户通过手机碰一碰发起跨端分享,可实现传输图片、共享wifi等。我们只需调用系统 api 传入所需参数拉起对应分享卡片模板即可,无需对 U…

小程序 -- uni-app开发微信小程序环境搭建(HBuilder X+微信开发者工具)

目录 前言 一 软件部分 1. 微信开发者工具 2. HBuilder X 开发工具 二 配置部分 1. 关于 HBuilder X 配置 2. 关于 微信开发工具 配置 三 运行项目 1. 新建项目 2. 代码编写 3. 内置浏览器 编译 4. 配置小程序 AppID获取 注意 四 实现效果 前言 uni-app开发小程…

Element修改表格结构样式集合(后续实时更新)

场景 修改前端Element组件el-table样式 实现 线表格 <div class"tablepro"><el-table:data"tableData":header-cell-style"{ textAlign:center}"class"tablepro-table"borderstyle"width: 100%;height:100%"&g…

【C++】如何从源代码编译红色警戒2地图编辑器

【C】如何从源代码编译红色警戒2地图编辑器 操作视频视频中的代码不需要下载三方库&#xff0c;已经包含三方库。 一、运行效果&#xff1a;二、源代码来源及编程语言&#xff1a;三、环境搭建&#xff1a;安装红警2安装VS2022下载代码&#xff0c;源代码其实不太多&#xff0c…