Vim允许我们同时在多个文件上工作,缓冲区列表记录了一次编辑会话中打开的所有文件,用Vim的缓冲区列表可以对这些文件进行管理,Vim允许我们同时在多个缓冲区上工作。
文件是存储在磁盘上的,而缓冲区则存在于内存中,当Vim打开一个文件时,该文件的内容被读入一个具有相同名字的缓冲区。刚开始,缓冲区的内容和文件的内容相同,但当我们对缓冲区作出修改时,二者的内容就会出现差别。如果此时决定保留这些更改,就可以再把缓冲区的内容写回到文件里。
假设当前目录下,有三个文件,shell.sh、shell1.sh、shell2.sh。执行vim *.sh命令会打开三个文件,但是只有第一个文件会显示。虽然另外两个文件没有显示,但是其内容已经被载入到后台的缓冲区了。使用ls命令可以看到:
:ls
1 %a "shell1.sh" line 4
2 "shell2.sh" line 0
3 "shell.sh" line 0
Press ENTER or type command to continue
用:bnext命令可以切换到列表的下一个缓冲区。
:ls
1 # "shell1.sh" line 4
2 %a "shell2.sh" line 1
3 "shell.sh" line 0
Press ENTER or type command to continue
%符号指明哪个缓冲区在当前窗口中可见,而#符号则代表轮换文件。用Ctrl + ^在当前文件和轮换文件间快速切换。:ls列表开头有一个数字,是在缓冲区创建时由Vim自动分配的编号,没有办法手动改变此编号。我们可以用:buffer N命令直接凭编号跳转到一个缓冲区。或是用更直观的:buffer{bufname}格式实现同样的功能。{bufname}只需包含文件路径中足以为以表示此缓冲区的字符即可,如果输入的字符串匹配了不止一个缓冲区列表中的条目,使用Tab即可补全。
如果想要删除缓冲区,可以用:bdelete命令,命令格式如下:
:bdelete N1,N2,N3
:N,M bdelete
删除一个缓冲区并不会影响到所关联的文件,而只是简单地把该文件在内存中的映像删掉,如果我们想删除编号5~10(包含5和10)的缓冲区,可以执行:5,10bd;然而,如果想要保留编号为8的缓冲区的话,只能用:bd 5 6 7 9 10。我们想删除一个缓冲区,得先查找一番编号,这样比较耗时。Vim内置的缓冲区管理功能缺乏灵活性,因此,我们最好使用分割窗口、标签页、或是参数列表。接下来一一介绍。