Vim 的缓冲区与多文件编辑
下图中包含了 Vim 中的 buffer、窗口、标签的关系。初学者会对这三个概念容易混淆。下面几节内容我们会依次为大家讲解。本节我们会首先讲解下 buffer(缓冲区)的概念。
A buffer is an area of Vim’s memory used to hold text read from a file. In addition, an empty buffer with no associated file can be created to allow the entry of text. –vim.wikia ——官网
这里引用的是官网一段对于 Vim 缓冲区的解释。说白了,buffer 就是 Vim 开辟的一块内存,用于存放从文件中读取的文本内容。
1. 缓冲区
我们在编辑文件时候,本质上其实是文件在内存的映像。就是我们说的缓冲区。而文件是需要存储在磁盘上的。所以我们编辑完文件后通过 :w 写入磁盘后才叫文件。
buffer 有三种状态:
- active: 这种状态buffer 显示在当前窗口。
- hidden: 这种状态buffer是隐藏不显示的。
- inactive: 这种状态buffer 既不显示也不包含任何东西。
1.1 缓冲区列表
我们可以同时"编辑多个文件(缓冲区)",我们可以在这些缓冲区中切换使用。
我们可以通过三种命令展示缓冲区列表:
- :files
- :buffers
- :ls
:buffers
1 %a "main.tf" line 1
2 "jmx_exporter.json" line 0
3 "bind_exporter.json" line 0
:ls
1 %a "main.tf" line 1
2 "jmx_exporter.json" line 0
3 "bind_exporter.json" line 0
:files
1 %a "main.tf" line 1
2 "jmx_exporter.json" line 0
3 "bind_exporter.json" line 0
这里可以看到三个命令结果都一样的。我们具体看下结果展示各个部分的意思。
第一列 | 第二列 | 第三列 | 第四列 |
---|---|---|---|
缓冲区序列号 | 指示状态 | 文件名 | 光标位置 |
这里有点难理解的是指示状态:
- - 只读缓冲区
- a 活动缓冲区,当前显示在屏幕上的
- h 隐藏缓冲区
- % 当前的缓冲区
- # 交换缓冲区
- + 已经更改的缓冲区
1.2 缓冲区列表操作
指令 | 含义 |
---|---|
:bp[revious] | 上一个缓冲区 |
:bn[ext] | 下一个缓冲区 |
:bf[irst] | 到第一个缓冲区 |
:bl[ast] | 到最后一个缓冲区 |
:buffer Nubmer/File_name | 指定缓冲区 |
:ball | 编辑所有缓冲区 |
:badd add.txt | 增加一个缓冲区 |
:bdelete add.txt | 删除一个缓冲区 |
:bufdo %s/pattern/replace/ge | update | 多buffer查找替换 |
下面我会依次演示上面的操作:
1.2.1 移动操作
我们先来看下缓冲区如何进行移动操作:
1.2.2 增删操作
这里我们演示一下如何增加或删除一个缓冲区:
2. 小结
以上就是 Vim buffer 内容讲解。这个会和之后的标签概念相似。可以简单理解为 buffer 主内(内部表示),标签主外(外部窗口布局展示)。初学者会容易混淆具体会在后面标签部分讲解。