缓冲区(Buffer)是一块内存区域,用于存储着正在编辑的文件。在保存缓冲区并退出时,内容也随之被写回原始文件。
在启动vi时,可以指定多个文件做为参数,例如vi file1 file2 file3
,参数中的所有文件都会被载入缓冲区,但vi只会在窗口中显示第一个文件。你可以使用以下命令,为每一个缓冲区打开一个窗口。
:ball
使用:badd filename
命令将新增一个缓冲区。指定的文件会被加载到缓冲区列表中,但是对这个文件的编辑过程只有切换到那个缓冲区时才会开始。在命令中,还可以指明为这个缓冲区打开窗口时,光标所处的位置:
:badd +linenum filename
:buffers
,:files
和:ls
命令将会列出当前编辑中的(除“u”类型之外)缓冲区信息。在列表中,第一个数字是缓冲区的标号;第二个标记是缓冲区当前的状态;紧接着是与缓冲区所关联的文件名。
缓冲区状态包含以下几种:
- | Readonly buffer,禁用了modifiable选项,只读缓冲区 |
= | Readonly buffer,只读缓冲区 |
a | Active buffer,活动缓冲区,当前显示在屏幕上 |
h | Hidden buffer,隐藏缓冲区,已载入但没有显示在屏幕上 |
+ | Modified buffer,已经更改的缓冲区 |
x | Error buffer,读入时报错的缓冲区 |
% | Current buffer,当前缓冲区 |
# | Alternate buffeer,交换缓冲区 |
u | Unlisted buffer,只有在列示命令中使用!修饰符才能显示的缓冲区 |
使用“!”修饰符的:buffers!
,:files!
和:ls!
命令将会列出包括“u”类型在内的所有缓冲区信息。如下图所示,窗口中使用:help buffers
命令查询帮助信息,而:buffers!
命令则列示了其打开windows.txt文件的“u”类型缓冲区。
可以使用number参数,选择指定标号的缓冲区:
:buffer number
也可以使用文件名来选择缓冲区:
:buffer filename
我们可以用:sbuffer number
命令,来分割当前窗口开始编辑一个缓冲区。如果指明了数字,那么当前窗口就会显示数字所标记的缓冲区中的内容;如果没有指明数字,那么就会显示当前缓冲区的内容。当然,这个命令也可以用文件名来做为参数:
:sbuffer filename
:bnext
到下一个缓冲区;:bprevious
或:bNext
到前一个缓冲区;:blast
到最后一个缓冲区;:bfirst
到第一个缓冲区。
根据默认设置,在切换到另一缓冲区之前,Vim将提示你保存当前缓冲区。你也可以使用:set hidden
命令,允许在未保存的情况下切换缓冲区。
可以使用:bdelete filename
,:bdelete 3
或:3 bdelete
命令来删除一个缓冲区。也可以使用:1,3 bdelete
命令来删除指定范围的缓冲区。所删除缓冲区引用的文件名,也将会随之从缓冲区列表中删除。
如果缓冲区被改动过,那么该命令将失败。如果使用了!选项的:bdelete! filename
命令,强制删除缓冲区,那么在缓冲区中的所有改动都会被放弃。
命令:bunload
会从内存中卸载一个缓冲区,所有为这个缓冲区打开的窗口也会关闭。但是这个文件名仍然会存在于缓冲区列表中。如果缓冲区被改动过,那么该命令将失败。你也可以使用!选项的:bunload!
命令,强制卸载缓冲区,但所有的改动也将会丢失。
可以使用:help buffers
命令,查看关于缓冲区的帮助信息。
:badd | 增加缓冲区 |
:ls | 列示缓冲区状态 |
:files | |
:buffers | |
:buffer | 编辑指定缓冲区 |
:ball | 编辑所有缓冲区 |
:bnext | 到下一缓冲区 |
:bprevious | 到前一缓冲区 |
:blast | 到最后一个缓冲区 |
:bfirst | 到第一个缓冲区 |
:bmodified | 到修改过的缓冲区 |
:bdelete | 删除缓冲区 |
:bunload | 卸载缓冲区 |