Vim学习笔记【Ch02】

news2024/12/27 13:54:13

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.coloradmin.cn/o/602942.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python介绍——入门

前言 Python 是一种面向对象的解释型计算机程序设计语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了脚本语言和解释语言的易用性。今天我就来给大家简单介绍一下python: 一、python的起源 1989年的圣诞节期间,吉多▪范…

Redis底层学习(二)—存储类型-String篇

这里写目录标题 应用场景底层结构知识普及 应用场景 服务器命令: 1.单值缓存 存储key,value :SET key value2.对象缓存 存储key,value :SET key value(json 格式数据) 3.分布式锁 底层结构 我们可以通过命令查看 value…

C++ 学习 ::【基础篇:14】:C++ 类的基本成员函数:析构函数的作用 及 自定义析构函数情形

本系列 C 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C的三大特性等&#…

scratch找食物 中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析2023年5月

目录 scratch找食物 一、题目要求 1、准备工作 2、功能实现 二、案例分析

全志V3S嵌入式驱动开发(多按键输入驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,荔枝派的开发板上面,有4个按键本身不是通过gpio连接到soc上面的。它是通过ad的方法,连接到主芯片…

SpringCloud GateWay-Filter学习

3 Filter/过滤器 文章目录 3 Filter/过滤器1 GatewayFilter 使用 -- 路由过滤器2 GatewayFilter 使用 -- 自定义过滤器 路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应Spring Cloud Gateway 内置了多种路由过滤器,他们都由GatewayFilter的工厂类来产生 1 Gat…

华为OD机试真题B卷 Java 实现【IPv4地址转换成整数】,附详细解题思路

一、题目描述 存在一种虚拟 IPv4 地址,由4小节组成,每节的范围为0~255,以#号间隔, 虚拟 IPv4 地址可以转换为一个32位的整数,例如: 128#0#255#255,转换为32位整数的结果为2147549183&#xff0…

以技术实践赋能开源安全|2023开放原子全球开源峰会开源安全技术与实践分论坛即将启幕

作为数字化转型时代的重要技术和协作模式,开源软件在各行各业得到广泛应用,由此也引发了诸多与安全相关的问题。6月12日,2023开放原子全球开源峰会“开源安全技术与实践”分论坛将在北京经开区北人亦创国际会展中心举行。 本次分论坛由开放原…

为什么说 Go 语言字符串是不可变的?

原文链接: 为什么说 Go 语言字符串是不可变的? 最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢? 这个问题本身并不困难&am…

SAP-QM-物料主数据-质量管理视图字段解析

过账到质检库存:要勾选,否则收货后库存不进入质检库存HU检验:收货到启用HU管理的库位时产生检验批,例如某个成品物料是收货到C002库位,该库位启用了HU管理,那么此处要勾选。但是如果勾选了,却收…

30天学会vue.js?|vue.js 3 移动应用开发实战 阅读笔记

最近又在折腾vuejs, 计划用30天的时间来掌握这个前端语言。 大概用了一周时间看完这本书。 这本书需要有编程基础的同学阅读。如果从零开始学前端的话,个人不建议,书本内容跳跃性很大,甚至个人觉得有点凌乱。PS:阅读此书一定要配…

黑马Redis视频教程实战篇(五)

目录 一、达人探店 1.1、发布探店笔记 1.2、查看探店笔记 1.3、点赞功能 1.4、点赞排行榜 二、好友关注 2.1、关注和取消关注 2.2、共同关注 2.3、Feed流实现方案 2.4、推送到粉丝收件箱 2.4、实现分页查询收邮箱 一、达人探店 1.1、发布探店笔记 发布探店笔记 探…

自定义组件和样式学习

一、使用组件3步 例如:APP.vue中使用另外两个组件Left.vue,Right.vue (3个页面) 1.在APP.vue中用import *** from **** 导入Left.vue、Right.vue页面 2.在APP.vue的js中和data同级注册,components{Left,Rirght} 3.注册完后可在APP…

JAVA内存深度分析报告

文章目录 理论部分:1.Heap Memory(堆内存)2.Non-heap Memory(堆外内存)3.Direct Memory(直接内存) 实验部分:1.Platform MXBeans API 监控快照2.MetaSpace 快照:3.Native Memory 快照…

线程池的实现原理

线程池的实现原理 所谓线程池,通俗的理解就是有一个池子,里面存放着已经创建好的线程,当有任务提交给线程池执行时,池子中的某个线程会主动执行该任务。如果池子中的线程数量不够应付数量众多的任务时,则需要自动扩充…

华为OD机试真题B卷 Java 实现【素数之积】,附详细解题思路

一、题目描述 RSA加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高。 给定一个32位正整数,请对其进行因数分解,找出是哪两个素数的乘积。 二、输入描述 一个正整数num …

科普:什么是小米刷机中的FASTBOOT

目录 1. 什么是手机上的FASTBOOT模式?2. 如何进入与退出FASTBOOT模式?2.1 进入方式2.2 退出方式 3. 如何在PC端安装FASTBOOT驱动?4. 怎么开启FASTBOOT命令提示符?5. 目前FASTBOOT命令有哪些类型?6. 常用的FASTBOOT命令…

第五章 堆内存

文章目录 前言一、🚘 本地方法1、什么是本地方法2、为什么使用 Native Method 二、🚄 本地方法栈三、🚥 堆内存1、-Xms10m -Xmx10m 设置堆内存的大小2、内存细分3、设置堆空间的大小与OOMjps 查看Java程序进程jstat -gc 进程号 查看堆内存参数…

CMake构建大型C/C++项目:跨平台设计与高级应用

CMake构建大型C/C项目:跨平台设计与高级应用 一、跨平台设计(Cross-Platform Design)1.1 跨平台设计原理(Principles of Cross-Platform Design)1.2 跨平台设计1.2.1 CMake的跨平台特性1.2.2 使用CMake进行跨编译1.2.3…

华为OD机试真题B卷 Java 实现【水仙花数】,附详细解题思路

一、题目描述 所谓水仙花数,是指一个n位的正整数,其各位数字的n次方和等于该数本身。 例如153是水仙花数,153是一个3位数,并且153 1^3 5^3 3^3。 二、输入描述 第一行输入一个整数n,表示一个n位的正整数。n在3到…