vim可以同时编辑多个文件,被编辑的文件都是存在缓冲区中。缓冲区其实就是内存中,只有进行了写操作,这个时候文件才真正的被写入硬盘。缓冲区的操作有查看缓冲区的文件列表和列表中文件的状态以及选择编辑那个文件等。
示例 , :ls 或者 :buffers 查看当前的缓冲区
touch {1..5}.txt
vim *.txt
# vim中执行 :ls 或者 :buffers
:ls
输出
:ls
1 %a "1.txt" line 1
2 "2.txt" line 0
3 "3.txt" line 0
4 "4.txt" line 0
5 "5.txt" line 0
可以看到缓冲一共有4个字段。第一个 编号,第二个: 状态,第三个: 文件的名字,四个:当前的文件的光标所在行
这里关注重点是第二个字段,就是状态
缓冲区的状态
状态代码 | 含义 |
---|---|
a (Active buffer) | 显示在当前屏幕上的文件 |
h (Hidden buffer) | 没有在当前的屏幕上显示 |
% (current buffer) | 当前的缓冲区 |
# (Alternate buffeer) | 交换缓冲区 |
= (Readonly buffer) | 只读缓冲区 |
+ (Modified buffer) | 文件已经被修改的缓冲区 |
u | 列表外缓冲区 |
如上面的 %a
就表示 文件 1.txt 是当前的在编辑的文件
然后再 vim 中执行 :bn
, 然后 :ls
输出的结果是
1 #h "1.txt" line 1
2 %a "2.txt" line 1
3 "3.txt" line 0
4 "4.txt" line 0
5 "5.txt" line 0
可以看到第二文件是当前的缓冲区并且在屏幕上显示,而原来的的文件1.txt变成了交换缓冲区
交换缓冲区和当前缓冲区可以通过
ctrl + ^
进行切换, 切换之后他们状态会相互转化。
其他两个状态就好理解。 =
只读, +
文件在缓冲区已经改变,或者叫做修改。
快速跳转到指定的的缓冲文件 :b编号
vim中给每个缓冲区文件进行了编号, 就是 :ls
结果的第一项。比如想编辑 5.txt 通过执行 :b5<CR>
其他的选定编辑文件的方法
命令 | 含义 |
---|---|
:bnext | 编辑下一个缓冲区 |
:bprevious | 编辑前一个缓冲区 |
:bfirst | 编辑第一个缓冲区 |
:blast | 编辑最后一个缓冲区 |
也使用缩写 :bn
, :bp
, :bf
, :bl
删除一个缓冲区 :bd编号
比如::bd2
。 如果文件已经在缓冲区中进行了修改,没有保存,vim就会提示需要保存修改的文件。及时执行了缓冲区删除操作,这个时候并不是在vim中真正在缓冲区给删除了,可以通过 :ls!
或者 :buffers!
查看到。比如
# 在缓冲区删除编号2的文件
:bd2
# 通过ls+!查看
:ls!
1 h "1.txt" line 1
2u "2.txt" line 1
3 #h + "3.txt" line 1
4 %a "4.txt" line 1
5 "5.txt" line 0
# 通过 :ls 看不到文件 2.txt
:ls
1 h "1.txt" line 1
3 #h + "3.txt" line 1
4 %a "4.txt" line 1
5 "5.txt" line 0