先来实在的,个人用法:
1、:ls 列出所有缓冲区
2、:bdelete #numb 删除所要关闭的缓冲区
以下为 VIM 手册中的描述:
Vim
编辑器使用缓冲区这个词来描述被编辑的文件
.
事实上
,
一个缓
冲区是一个被编辑文件的副本
.
通常你会在完成对一个缓冲区的编辑后保存该文件
.
缓冲区不仅包含了文件的内容
,
它也记录了该缓冲区中所有的标记
,
设置以及其它跟缓冲区有关的东西
.
隐藏缓冲区
假设你正在编辑文件
"one.txt"
现在需要转而编辑
"two.txt".
你可
能会直接使用
":edit two.txt"
命令
,
但是你已经对
"one.txt"
作出了改动
,
所以这一命令会失败
,
同时你又不希望现在就保存文件
"one.txt"
的内容
. Vim
对此的解决方案是
:
:hide edit two.txt
缓冲区
"one.txt"
从屏幕上消失
,
但
Vim
保存了它的当前状态
.
这叫
做隐藏缓冲区
:
缓冲区中确有内容但你看不到它
.
":hide"
命令的参数是另一个命令
.
它使该命令工作于
°hidden°
选项被设置的状态
.
你也可以自行设置该选项
.
其效果是当你的缓冲区看似被丢弃时
,
它实际上只是隐藏了起来
2
1
译
:
还记得吗
?
想垂直分隔窗口的话可以用
:vertical sfind
2
译
:
规律
: hide
与
vertical
都是这样的特殊命令
,
它们以一个完整的命令作为参数
,
只是以一种方式影响该命令的执行
,
同时此类命令并非对所有命令都有效
,
它只对那些涉及其影响效果的命令起使用
,
如
vertical
命令只是影响新开窗口的布局
,
是水平的还是垂直的
.
这样它对那些根本不会打开窗口的命令就形同虚设
小心
!
如果你当前有一些被修改内容尚未保存的隐藏缓冲区时
,
不
要草草地退出
Vim
1
非活动缓冲区
一旦一个缓冲区曾被编辑过
, Vim
就会记下它的一些信息
.
这样当它
不显示在窗口中并且又不是一个隐藏缓冲区时
,
它还是会被保留在缓冲区列表中
.
这叫非活动缓冲区
.
缓冲区的大致类别如下
:
Active
出现在窗口中
,
内容被载入
Hidden
不显示在窗口中
,
但内容被载入
Inactive
不出现在窗口中
,
内容也未被载入
非活动缓冲区仍被记录在案
,
因为
Vim
保留了它的相关信息
,
比如在
其中定义的标记和它的文件名
.
这样你可以看到曾经编辑过了哪些文件
,
也可以再次打开它们
.
显示缓冲区列表
下面的命令可以列出整个缓冲区列表
:
:buffers
命令
:ls
与
:buffers
完全相同
,
只是看起来没那么顾名思义
,
它的优点是命令本身
很短
2
结果形如
:
1 #h "help.txt" line 62
2 %l+ "usr_21.txt" line 1
3 "usr_toc.txt" line 1
第一列是缓冲区编号
.
你可以在编辑该文件时以此代替文件名
,
见下文
.
缓冲区编号之后是缓冲区类型标志字符
.
然后是文件名和上次退出时光标所在的行号
.
可能的缓冲区类型标志字符如下
(
从左到右
):
1
译
:
真要这样退出时
Vim
还是会提醒你有缓冲区的内容已被改变但尚未保存
,
除非你
声明自己负全责
: :qa!
或
:wqa
2
译: (1)ls之于ls就象:grep之于grep, 完全不同! (2)Vim中有很多这样的折衷, 以较短的命令换取更具描述性的命令名
u
未被列出的缓冲区
|unlisted-buffer|
[[
译
:
既然未被列出你又怎么知道
? :ls!
%
当前缓冲区
#
上一次的活动缓冲区
l
被载入并显示在某窗口中的缓冲区
h
被载入但隐藏的缓冲区
.
=
只读的缓冲区
-
不可编辑的缓冲区
,
其中
°modifiable°
选项被关闭
+
有改动的缓冲区
编辑一个缓冲区
你可以以缓冲区编号指定要编辑的缓冲区
.
这可以免于键入其文件
名
:
:buffer 2
但是要知道缓冲区编辑的唯一办法就是查找缓冲区列表
.
这本身需要执行另一个命令
.
你可以用文件名或部分文件名
1
:
:buffer help
Vim
会根据键入的部分文件名选择一个最为相近的缓冲区
.
如果只有
一个缓冲区符合条件
,
就那直接使用该缓冲区
,
本例是
"help.txt".
要在一个新窗口中打开一个缓冲区使用命令
:
:sbuffer 3
当然这一命令也可以使用文件名
.
使用缓冲区列表
你可以用下面的命令来遍历整个缓冲区列表
:
:bnext
跳转到下一个缓冲区
:bprevious
跳转到前一个缓冲区
:bfirst
跳转到第一个缓冲区
:blast
跳转到最后一个缓冲区
1
译
:
可以看作
Vim
自动进行了命令补齐
,
此时的命令补齐并不要求已经键入的文件名
一定是最终文件名的开头字符
,
如对于文件
filename.txt,
你可以键
name
然后使用命令补齐
,
但同样也可以不用命令补齐
, Vim
根据键入的部分文件名选择一个最相近的缓冲区
要把一个缓冲区从列表中去除
,
可以用命令
:
:bdelete 3
同样
,
可以使用文件名
1
.
如果被删除的缓冲区是活动缓冲区
(
也就是说被显示在另一口
),
它
所在的窗口就会被关闭
.
如果你删除的是当前缓冲区
,
它所在的窗口也会被关闭
.
如果它是最后一个窗口
. Vim
就会另找一个缓冲区显示在该
窗口中
.
总不至于让你因此什么都没得编辑
.
备注
:
即使是用
":bdelete"
命令删除了一个缓冲区
Vim
还
是会记住它
.
实际上它被打入
"unlisted"
列表中
,
不再显示在
":buffers"
命令显示的缓冲区列表中
.
但
":buffers!"
还是会让它再度现身
(
是的
, Vim
可以完成
Misson Impossible).
要彻底清除一个缓冲区
,
要使
用
":bwipe".
同时请参考
°buflisted°
选项
.