Vim学习笔记【Ch02】 您所在的位置:网站首页 vim补全快捷键 Vim学习笔记【Ch02】

Vim学习笔记【Ch02】

2023-06-03 23:58| 来源: 网络整理| 查看: 265

Vim学习笔记 系列笔记链接Ch02 Buffers, Windows, TabsBuffers什么是buffer查看所有bufferbuffer之间的切换删除buffer退出所有窗口 Windows窗口的创建窗口切换快捷键其他快捷键 Tabs什么是tabtab相关命令 window和buffer结合的3D移动小结

系列笔记链接

Ch00,Ch01

Ch02 Buffers, Windows, Tabs

在.vimrc配置文件中加入set hidden,可以隐藏一些提示信息,比如切换不同的缓存区buffer时,未保存当前缓存区的内容,Vim会提示先保存文件。隐藏提示信息可以使切换操作更流畅。

Buffers 什么是buffer

缓存区buffer是一个内置的内存空间,可以在其中写入和编辑文本。Vim中每打开一个新文件,其数据都会关联到一个独立的buffer。 比如通过Vim打开file1.txt,此时Vim关联的就是file1.txt的buffer:

vim file1.txt

同时打开多个文件时,Vim也会为这些文件创建独立的buffer,默认展示的是第一个文件的buffer:

vim file1.txt file2.txt 查看所有buffer

在命令行模式下输入:buffers(或:ls、:files),Vim窗口底端会列出当前打开的所有buffer。 buffers

buffer之间的切换

:buffers输出结果中,每一行第一列标识了每个buffer的编号(按文件打开的顺序,从1开始计数),第二列表示buffer的状态,%a表示Vim当前所处的buffer,第三列就是每个buffer对应的文件,最后一列是每个buffer中光标所处的位置(行)。 通过:buffer+n的方式可以切换到第n个buffer,比如:buffer2可以切换到file2.txt的buffer。 其他buffer切换命令:

:bnext # 转到下一个buffer,或者快捷键Ctrl + I :bprevious # 转到上一个buffer,或者快捷键Ctrl + O :buffer + 文件名 # 转到指定文件的buffer

此外,Ctrl + ^可以切换到前一次编辑的buffer中。

删除buffer

删除指定的buffer的两种方式(命令行模式下):

:delete n # 根据编号删除 :delete filename # 根据文件名删除 退出所有窗口

同时打开多个buffer时,可以通过以下指令退出所有buffer(命令行模式下):

:qall # 直接退出所有buffer :qall! # 感叹号强制退出所有buffer :wqall # 先保存再退出所有buffer Windows 窗口的创建

窗口window是展示缓存区buffer内容的媒介,可以类比于普通编辑器的窗口。Vim中也可以同时打开多个窗口,包括对同一个buffer打开多个窗口,以及不同的buffer用不同的窗口打开。 结合buffer和window两个概念,当我们用Vim打开一个文件时,比如vim file1.txt,打开的是file1.txt的buffer,通过一个窗口查看、编辑这个buffer;在file1.txt的基础上,运行:split file2.txt,会在file1的窗口之上打开一个新的窗口,显示file2的buffer,这样就用不同的窗口打开了不同的buffer。 window,split :split是将窗口纵向排列,而:vsplit则是将多个窗口横向排列,比如在两个窗口的基础上继续执行:vsplit file3.txt,就会得到第3个窗口: window,vsplit 执行vsplit前处于file1的窗口中,vsplit会在当前窗口的左侧打开新的窗口。

窗口切换快捷键 Ctrl + W + H # 将光标移动到左侧的窗口 Ctrl + W + J # 下 Ctrl + W + K # 上 Ctrl + W + L # 右

PS:说实话这个不是很好操作,初学不好记的同时,手指灵活度还差点,只能说熟能生巧,但我现在不熟,并且是差点玩坏键盘的程度…

其他快捷键 Ctrl + W + V # 打开一个新的垂直窗口 Ctrl + W + S # 打开一个新的水平窗口 Ctrl + W + C # 关闭一个窗口(当前) Ctrl + W + O # 除了当前窗口,关闭其他所有窗口

实际操作时: Ctrl + W + V无法指定打开的窗口对应哪个buffer,会直接为当前光标所处buffer打开一个新的垂直窗口; Ctrl + W + S有个bug,这样操作之后容易锁定终端的操作,这之后无论按什么都没有反应,我还不知道做错了什么,只能强制杀死该进程; 尝试Ctrl + W + C时同样出现终端“死机”的状态,于是开始想是不是模式切换的问题,这几个快捷键操作的实际效果还有待探索(结合window帮助文档:h window)

还有待探索的window快捷键操作

对比起来,在命令行模式下直接输入指令更直观可控,但教程中明确的指令只有split、vsplit和new(:qa退出所有窗口),不如快捷键丰富。

Tabs 什么是tab

熟悉Linux环境和终端命令,对Tab应该不陌生,常用Tab键进行文件名、路径补全,Vim中也可以在输入命令时使用Tab补全文件名。但这里说的Tabs,指窗口的集合(a collection of windows),类似浏览器新开一个标签页,称之为tab。在Vim中,通过:tabnew xxx打开一个tab,tab的形式也和浏览器标签页类似,好比不创建新的终端窗口,而是在同一个终端窗口中新开了一个Vim终端。window让我们在同一个Vim终端中打开不同的文件,每个tab之下可以有不同的window布局。 tab

tab相关命令

在命令行模式下:

:tabnew file.txt # 打开一个新的tab :tabclose #关闭当前tab :tabnext # 打开下一个tab,或使用快捷键gt(注意不是命令行输入) :tabprevious # 打开前一个tab,或使用快捷键gT :tablast # 打开最后一个tab :tabfirst # 打开第一个tab

PS:其实只有快捷键gt已经足够在不同的tab之间切换,因为在最后一个tab执行gt之后会到第一个tab,很难想象怎么打出gT的快捷键?

在启动Vim时同时打开多个tab(-p参数):

vim -p file1 file2 file3

同样可以通过qa直接退出所有tab。

window和buffer结合的3D移动

我们可以在一个终端(可以理解为一个tab)中打开多个window,每个window又可以包含多个buffer,窗口之间的切换可以类比于在一个X-Y平面中上下左右移动,而同一个窗口中不同buffer的切换可以类比于在Z轴上移动,因此结合使用window和buffer时,就好像在一个3D空间移动。

小结

作者介绍了他对Vim中这几个概念的用法:一般来说,在同一个窗口中打开多个buffer(对应不同的文件),可以方便进行文件切换;打开多个窗口则是为了便于查看/对比等操作,而tab则是为了区分不同的并行任务。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有