当前位置: 首页 > news >正文

Vim学习笔记【Ch02】

Vim学习笔记

  • 系列笔记链接
  • Ch02 Buffers, Windows, Tabs
    • Buffers
      • 什么是buffer
      • 查看所有buffer
      • buffer之间的切换
      • 删除buffer
      • 退出所有窗口
    • Windows
      • 窗口的创建
      • 窗口切换快捷键
      • 其他快捷键
    • Tabs
      • 什么是tab
      • tab相关命令
    • 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则是为了区分不同的并行任务。

http://www.lryc.cn/news/90373.html

相关文章:

  • 《低代码指南》——低代码维格云能源行业解决方案
  • 【自制C++深度学习推理框架】Layer的设计思路
  • Rust每日一练(Leetday0011) 下一排列、有效括号、搜索旋转数组
  • STL --- 五. 函数对象 Function Objects
  • Java IO 流操作详解
  • Halcon 形状匹配参数详解
  • C++11强类型枚举
  • pytorch讲解(部分)
  • C++ 基本的7种数据类型和4种类型转换(C++复习向p3)
  • Scrum敏捷迭代规划和执行
  • 智警杯赛前学习1.1---excel基本操作
  • 【Android】Handle(一) 主要特点和用途
  • 40亿个QQ号,限制1G内存,如何去重?【已通过代码实现】
  • Talk预告 | 新加坡国立大学张傲:10%成本定制类 GPT-4 多模态大模型
  • 从C语言到C++_13(string的模拟实现)深浅拷贝+传统/现代写法
  • reduce()方法详解
  • C++虚假唤醒
  • 【AI】dragonGPT - 单机部署、极速便捷
  • Uuiapp使用生命周期,路由跳转传参
  • 定积分的计算(牛顿-莱布尼茨公式)习题
  • leak 记录今天的一个小题
  • 软考A计划-试题模拟含答案解析-卷二
  • 【C++】pthread
  • 2023年前端面试题汇总-浏览器原理
  • react介绍,react语法,react高级特性,react编程技巧
  • Locust接口性能测试
  • Python类的特殊方法(通过故事来学习)
  • Vue.js 中的父子组件通信方式
  • Python之并发编程二多进程理论
  • 纯干货:数据库连接耗时慢原因排查