29.vim高效使用方法之buffer、window和tab

载*请注明原始出处:http://blog.youkuaiyun.com/a464057216/article/details/51523860

后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
在这里插入图片描述
许多优秀的图形界面编辑器比如UltraEdit、Notepad++等都有tab(中文叫标签),打开一个文件编辑的时候,相当于把这个文件放到了一个tab中,并且这些编辑器是每文件每tab的,即不允许一个文件在两个tab中打开。这个概念有点像浏览器,我们可以在一个浏览器窗口中打开多个tab,不过浏览器中不同的tab可以访问同一个网页。vim中tab的概念,却完全不同于图形界面编辑器及浏览器的传统意义。

1.buffer

vim中buffer的概念对应UE等编辑器中tab的概念,我们使用vim a.py打开一个文件后,使用:ls命令可以看到当前所有的buffer,比如:

:ls
  1 %a   "a.py"                         line 1

使用:badd b.py可以打开b.py的buffer(badd代表buffer add,也可以简写成bad),只不过这个时候b.py的buffer是hidden的,使用:ls可以看到如下输出:

:ls                                                                         
  1 %a   "a.py"                         line 1
  2      "b.py"                         line 1

输出中,左侧是buffer的编号,有%的表示是当前激活的window中打开的buffer,a表示这个buffer是active的,双引号中的字符串表示了buffer对应的文件名字,line n表示当前cursor处于该buffer的哪一行。
我们使用:b2命令将b.py的buffer加载到当前窗口,然后使用:ls命令查看如下:

:ls
  1 #    "a.py"                         line 1
  2 %a   "b.py"                         line 1

说明我们目前确实是在b.y的buffer中。我们可以使用:bd1删除a.py的buffer(bd代表buffer delete,当然删除前需要保存buffer 1的更改),然后使用:ls命令查看如下:

:ls
  2 %a   "b.py"                         line 1

熟悉了buffer的创建、切换、删除、查看buffer列表之后,有人可能会问,我能够方便的使用:sp及:vsp分割窗口,为什么要用buffer呢?不要忘了,能使用:sp及:vsp分割窗口在大型项目中工作的人,显示器一定很大,buffer在显示器较小的时候就很有优势了,它能够实现在文件间的快速切换。

2.window

刚才提到的:sp(水平分割)及:vsp(垂直分割)命令就是分隔window(窗口)的命令,vim又一个优势在于,可以在不同的window中编辑同一个文件的buffer,并且在一个window中对文件进行编辑,修改会同步体现在另外的window中,比如下图(在两个window打开了chapter1.py的buffer):

这里写图片描述

上面的例子,一共打开了两个文件的buffer,比如:

:ls
  1 %a   "chapter1.py"                  line 1
  2 #a   "../chapter2/chapter2.py"      line 0

在左上角的window中:b2则可以加载chapter2.py的buffer,比如:
这里写图片描述

在window之间切换可以使用Ctrl + w + h/j/k/l(向左、下、上、右切换)或者Ctrl + w + w(在窗口间切换)。
如果要调整window的大小,分窗口是水平分隔还是垂直分隔两种情况:
如果是水平分隔可以使用:nwinc +/-把当前激活窗口高度增加、减少n个字符高度,比如:10winc +
如果是垂直分隔可以使用:nwinc >/<把当前激活窗口宽度增加、减少n个字符宽度,比如:5winc >

3.tab

会使用window分隔多窗口之后,我们终于要说一下一开始要讨论的vim的tab的功能。试想在一个工程项目中,我们要开发客户端和服务端的代码,我们可以把屏幕划分成上面是客户端的代码,下面是服务端的代码,但是你的屏幕总是有限的,如果能像mac一样通过三指滑动实现窗口切换就好了。

当然可以,在vim中这就是tab的切换,你可以把服务端放在一个tab中,客户端放在一个tab中,比如vim client1.py后,使用:tabe server1.py在另一个tab中编辑服务端的代码(tabe代表tab edit)。当然,每个tab中可以分隔出window,我做了一个如下的例子:

这里写图片描述

tab的标题栏会显示该tab当前激活的window中文件的名字,及tab中一共有多少个window。使用gt命令可以切换到下一个tab,使用gT命令可以切换到前一个tab,比如:

这里写图片描述

如果tab比较多,我们可以使用:tabs查看所有tab的列表,然后输入ngt命令切换到对应的tab,其中n是tab的编号,比如:

:tabs                                                                       
Tab page 1
    client3.py
    client2.py
    client1.py
Tab page 2
>   samp.py
Tab page 3
    server3.py
    server2.py
    server1.py

'>'表示cursor当前在tab 2的samp.py上,使用1gt即可快速切换到tab 1。
如果当前tab分隔的window比较多,可以使用:tabc命令关闭当前tab(tabc代表tab close)。

如果觉得我的文章对您有帮助,欢迎关注我(优快云:Mars Loo的博客)或者为这篇文章点赞,谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值