vim深入学习之文件缓冲区列表

时间:2021-05-16 16:08:22

       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内置的缓冲区管理功能缺乏灵活性,因此,我们最好使用分割窗口、标签页、或是参数列表。接下来一一介绍。