Preface
一直都搞不清楚Vim的buffer,window以及tab的含义,今天搜了一下,发现一篇文章讲了这个,于是沿着别人的思路自己边看边探索。
Buffer
在Vim中,可以把buffer看成一个打开的文件实例。比如我用vim打开了一个文件,这时候就相当于创建了一个buffer,该buffer属于刚才这个文件。
但是,虽然打开了文件就创建了buffer,buffer不一定就可以被看到,buffer可以存在于background中。以我下面的操作为例
vim a #打开了一个文件a,创建了一个buffer名为a
:ls #该命令可以查看buffer list
# 1 %a "a"
:e b #在vim中使用:edit打开一个文件b,这时vim内容换成文件b的内容
:ls #再来看buffer list,发现现在有两个buffer,其中buffer a 还在
# 1 #h "a"
# 2 %a "b"
:b 1 #使用:buffer命令切换到buffer a,现在vim的内容又换成文件a了
让一个buffer 退到 后台是有条件的,要么
- buffer没有被修改,或者修改已经被保存
- vim设置了hidden,
:set hidden
Window
window和buffer类似,但是它是一个buffer的视口(viewport),也就是说是可以被看见的,同时,一个buffer可以有任意数量的window,因为每个window只是作为buffer的一个viewport,那我们从不同的viewport去观察同一个buffer,并没什么不好理解的。
打比方,buffer是个房子,而不同的window就是房子的不同窗户。
vim a # vim打开文件a
:split a # 新建一个文件a的window
:ls # 查看buffer list,发现只有一个buffer a
# 1 %a "a"
:split b # 现在以窗口的形式打开一个文件b,之前文件a的两个窗口还保留着,也就是我们可看到内容
:ls # 查看buffer list,因为打开了文件b,自然就产生了新的Buffer,而且和buffer a都处于active状态
# 1 #a "a"
# 2 %a "b"
如果,我们在b窗口,切换buffer会怎么样?
#在b窗口上操作
:b 1 # 切换到buffer a
这时会发现,原来的窗口b的内容切换成文件a的内容,而且窗口的名称也变成a了(之前是b),当然,buffer b还会存在,只不过到后台去了(hidden状态)。
Tab
在Vim中,tab是几个window组合成的集合。有了前面的基础,就不难理解了。
总结
Vim和Nodepad++在tab模型上有显著的区别。个人觉得vim提供了更丰富结构,充分理解vim的buffer, window以及tab的关系是很有必要的。