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

【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项

文章目录

  • S10L45 Working with Multiple Windows
    • 1 水平分割窗口
    • 2 在水平分割的新窗口中显示其它文件内容
    • 3 垂直分割窗口
    • 4 窗口的关闭
    • 5 在同一窗口水平拆分出多个窗口
    • 6 关闭其余窗口
    • 7 让四个文件呈田字形排列
    • 8 光标在多窗口中的定位
    • 9 调节子窗口的尺寸大小
    • 10 变换子窗口的位置
    • 11 将光标所在的子窗口分别靠进某一边
    • 12 将所有缓冲区加载到当前窗口
    • 13 对所有子窗口批量执行命令
    • 14 关于窗口组合键的按键细节

写在前面
本篇为第十章的最后一节内容。继介绍完 Vim 缓冲区的相关知识后,本节进一步深入探讨了多窗口环境下的各类常见操作。想当年我就是直接先学了这一节内容,成功利用远程服务器的 Vim 界面完成了八个服务器节点的手动配置,要是没有多窗口这个功能,只靠缓冲区频繁切换,遇到需要同时监控某些性能指标时就傻眼了(当然这类问题有更专业的工具,这里只是举例)。今天将这些知识点完整梳理出来,以后就方便多了。


S10L45 Working with Multiple Windows

本节演示文件:vimclass/buf-{ant,bed,cat,dad}.txtvimclass/nav.txt

1 水平分割窗口

默认情况下,Vim 一个窗口只会加载一个编辑界面。即便在学习 Vim 缓冲区的概念时,也只涉及单一窗口下的各类操作;多窗口环境只在第四章介绍帮助系统时提到过,并可通过 Ctrl + WW 让光标在两个窗口间切换、用 :q + Enter 命令关闭某个窗口,仅此而已。

其实,Vim 还支持通过 :sp:split 命令实现窗口的 水平分割

例如,用 vim buf* 批量打开多个以 buf 开头的演示文件后,输入 :sp + Enter 将得到两个上下分布的相同窗口:

图 45-1:用 sp 命令实现窗口的水平分割

【图 45-1:用 sp 命令实现窗口的水平分割】

由于显示的是同一个缓冲区,在其中任一窗口修改内容都会同步影响到另一个窗口。

:sp 命令还可以等效替换为 CtrlW + S(即按住 Ctrl 的同时敲 W 键、然后放开 Ctrl 后再敲 S 键)

2 在水平分割的新窗口中显示其它文件内容

执行命令 :sp <file_name> + Enter 即可。

例如,让新开窗口加载 buf-bed.txt 中的内容,需输入::sp buf-bed.txt + Enter

图 45-2:在水平分割窗口时在新窗口显示指定的文件内容(buf-bed.txt)

【图 45-2:在水平分割窗口时在新窗口显示指定的文件内容(buf-bed.txt)】

3 垂直分割窗口

使用 :vs + Enter:vsplit + Enter

同理,也可以使用组合键 CtrlW + V 作等效替换:

图 45-3:使用 vs 命令实现窗口的垂直分割

【图 45-3:使用 vs 命令实现窗口的垂直分割】

同理,执行命令 :vs <file_name> + Enter 可指定新窗口加载的文件内容。

4 窗口的关闭

使用命令 :q + Enter 或者组合键 CtrlW + Q

5 在同一窗口水平拆分出多个窗口

多次执行 :sp <file_name> 命令即可:

图 45-4:利用 “sp + 文件名” 的方式依次水平打开不同的文件内容

【图 45-4:利用 “sp + 文件名” 的方式依次水平打开不同的文件内容】

6 关闭其余窗口

两种方式:

  1. 输入 :on + Enter:only + Enter
  2. 使用组合键 CtrlW + O

7 让四个文件呈田字形排列

即纵横分割窗口,先后使用水平、垂直分割(无关顺序):

  1. 先加载 buf-dad.txt 文件,然后执行水平分割::sp buf-bed.txt + Enter
  2. 再输入 :vs buf-ant.txt + Enter 垂直分割上半部分窗口;
  3. 按两次【CtrlW + W】将光标切到下方窗口(即 buf-dad.txt);
  4. 输入 :vs buf-cat.txt 完成下半部分的垂直分割。

最终实测效果:

图 45-5:用水平垂直分割实现四个文件呈田字形分布实测效果截图

【图 45-5:用水平垂直分割实现四个文件呈田字形分布实测效果截图】

8 光标在多窗口中的定位

除了用 CtrlW + W 逐一切换光标位置,还可以使用导航键实现上下左右移动:

  • CtrlW + H:光标左移;
  • CtrlW + J:光标下移;
  • CtrlW + K:光标上移;
  • CtrlW + L:光标右移;

注意到涉及窗口操作的组合键都有相同的前缀 CtrlW。为方便后续操作,也可以使用 map 命令重新指定快捷键并写入 vimrc 配置文件:

  • map <C-h> <C-w>h
  • map <C-j> <C-w>j
  • map <C-k> <C-w>k
  • map <C-l> <C-w>l

或者利用 Leader 键重写快捷键:

  • map <leader>h <C-w>h
  • map <leader>j <C-w>j
  • map <leader>k <C-w>k
  • map <leader>l <C-w>l

如果是在图形界面下操作,还可以直接用鼠标单击快速定位。

9 调节子窗口的尺寸大小

两种方式:

  • 图形界面:鼠标拖拽窗口边缘即可调整;
  • 键盘操作:
    • 增加高度:CtrlW + +
    • 减少高度:CtrlW + -
    • 增加宽度:CtrlW + >
    • 减少宽度:CtrlW + <
    • 高度最大化:CtrlW + _
    • 宽度最大化:CtrlW + |
    • 设置等宽等高:CtrlW + =

10 变换子窗口的位置

使用 CtrlW + R 可将当前水平排列的窗口依次 往右 挪动一格,最右边的窗口则挪到 最左边 位置;若子窗口均为垂直堆叠分布,则依次 往下 挪动一格,同时最下方窗口挪到 最上方 位置。

使用 CtrlW + ShiftR 则刚好反向操作:水平排列的子窗口 向左 移动、垂直堆叠的则 向上 移动。

注意:组合键中的 R 代表 Right,向右;ShiftR 则表示反向。

11 将光标所在的子窗口分别靠进某一边

通过组合键 CtrlW + 大写的导航键,还可以分别令光标所在的子窗口分别靠近大窗口的上、下、左、右侧。

例如,在刚才的田字形排列的多窗口界面,再使用 :vs nav.txt 垂直分割出第五个子窗口:

图 45-6:在田字形多窗口界面引入第五个子窗口(左上角)

【图 45-6:在田字形多窗口界面引入第五个子窗口(左上角)】

CtrlW + ShiftH 实现靠左显示:

图 45-7:让子窗口(nav.txt)靠左显示后的效果图

【图 45-7:让子窗口(nav.txt)靠左显示后的效果图】

CtrlW + ShiftL 实现靠右显示:

图 45-8:让子窗口(nav.txt)靠右显示后的效果图

【图 45-8:让子窗口(nav.txt)靠右显示后的效果图】

CtrlW + ShiftK 实现靠上显示:

图 45-9:让子窗口(nav.txt)靠上显示后的效果图

【图 45-9:让子窗口(nav.txt)靠上显示后的效果图】

CtrlW + ShiftJ 实现靠下显示:

图 45-10:让子窗口(nav.txt)靠下显示后的效果图

【图 45-10:让子窗口(nav.txt)靠下显示后的效果图】

12 将所有缓冲区加载到当前窗口

使用命令 :ball + Enter:ba + Enter

此时 Vim 默认通过水平分割的方式加载每个子窗口:

图 45-11:使用 ba 命令一次性加载所有缓冲区的实测效果图

【图 45-11:使用 ba 命令一次性加载所有缓冲区的实测效果图】

13 对所有子窗口批量执行命令

与缓冲区的 :bufdo 命令类似,多窗口也支持批量执行命令 :windo

例如,在垂直排列的子窗口 buf-ant.txtbuf-bed.txt 中,批量执行替换命令,将文件中的 # 全部替换为 @,则相应的批量替换命令为::windo %s/#/@/g + Enter

图 45-12:对所有子窗口批量执行替换命令后的效果图

【图 45-12:对所有子窗口批量执行替换命令后的效果图】

注意

值得注意的是,:windo 命令只对打开的子窗口生效,未打开的子窗口则不受影响 ;而 :bufdo 命令则会对所有缓冲区生效,无论它是不是隐藏缓冲区都会执行命令。本例可以通过 :ls + Enter 命令加以佐证:

图 45-13:用 ls 命令查看缓冲区列表,可以看到本例中的批量替换命令 windo 只对打开的子窗口生效

【图 45-13:用 ls 命令查看缓冲区列表,可以看到本例中的批量替换命令 windo 只对打开的子窗口生效】

14 关于窗口组合键的按键细节

本课涉及大量组合键,对于 CtrlW + <KEY> 的操作,既可以放开 Ctrl 键后再按后面的 <KEY> 键,也可以一直按住 Ctrl 键不放、并依次按 W 键和 <KEY> 键。

查看帮助文档 :h ctrl-w + Enter 可以获得更多操作说明:

图 45-14:查看 ctrl-w 帮助文档了解组合键的更多细节说明

【图 45-14:查看 ctrl-w 帮助文档了解组合键的更多细节说明】

需要注意的是,按住 Ctrl + S 在某些命令行中可能会引发冲突(例如暂停屏幕刷新),此时使用 Ctrl + WS 来水平拆分窗口就会失效;同理,Ctrl + WQ 也可能因为 CtrlQ 被占用而导致窗口拆分失败。不过具体问题具体分析,遇到组合键冲突,最好通过帮助文档寻求解决方案。

想了解更多关于 Vim 窗口的用法细节,可以查看 Vim 内置的帮助文档::h windows + Enter

后记
从本节课开始,讲师不再提供专门的同步练习环节。因为这些内容大部分在讲解过程中就能同步操练。想要真正用好 Vim,还得自己多花心思学以致用,方为上策。切莫过分依赖课程本身,丧失了自学的主观能动性。

相关文章:

【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项

文章目录 S10L45 Working with Multiple Windows1 水平分割窗口2 在水平分割的新窗口中显示其它文件内容3 垂直分割窗口4 窗口的关闭5 在同一窗口水平拆分出多个窗口6 关闭其余窗口7 让四个文件呈田字形排列8 光标在多窗口中的定位9 调节子窗口的尺寸大小10 变换子窗口的位置11…...

包文件分析器 Webpack Bundle Analyzer

webpack-bundle-analyzer 是一个非常有用的工具&#xff0c;用于可视化和分析 Webpack 打包生成的文件。这使得开发者能够更好地理解应用的依赖关系、包的大小&#xff0c;以及优化打包的机会。以下是关于 webpack-bundle-analyzer 的详细介绍&#xff0c;包括它的安装、使用以…...

代码随想录day14

二叉树的反转&#xff0c;采用迭代&#xff0c;只能用前序和后序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(i…...

react19新API之use()用法总结

React use() Hook 使用指南 概述 use() 是 React 19 引入的新 Hook&#xff0c;它允许你在组件内部直接使用 Promise、Context 和其他可订阅的值。它是一个更通用的数据获取和订阅机制。 基本语法 const value use(resource);主要用途 1. Promise 处理 function UserDet…...

67,【7】buuctf web [HarekazeCTF2019]Avatar Uploader 2(未完成版)

进入靶场 和上一题一母同胞&#xff0c;先把上一题的答案拖进去看看 区别在于上一题这块直接显示了flag&#xff0c;这里并没有 看看源码 加载不出来&#xff0c;ctrlu <!-- 上传头像的提示信息&#xff0c;说明上传要求 --><p>Please upload a PNG image less th…...

ANSYS HFSS 中的相控天线阵列仿真方法

概述 相控天线阵列系统广泛使用&#xff0c;从国防雷达应用到商业 5G 应用。设计这些天线阵列涉及复杂的数学运算&#xff0c;需要全波仿真。Ansys HFSS 全场 3D 电磁仿真软件可以在合理的时间内以较低的计算成本仿真复杂的相控阵天线系统&#xff0c;同时考虑复杂激励、环境&…...

stm32 L051 adc配置及代码实例解析

一 cude的设置&#xff1a; 1. 接口的基本设置&#xff1a; 2. 参数的设置&#xff1a; 二 代码的逻辑&#xff1a; 1. 上面的直接生成代码&#xff0c;然后使用下面源码即可读到adc的数据&#xff1a; void adc_battery_start(void) {uint32_t ADC_value 0;HAL_ADC_Start(&…...

KUKA示教器仿真软件OfficeLite8.6.2,EthernetKRL3.1.3通信

一、准备软件。 1、vmware17.6.1 2、OfficeLite8.6.2 3、EthernetKRL3.1.3 4、KUKA Router 5、EthernetKRL_Server 通过网盘分享的文件&#xff1a;库卡相关软件 链接: https://pan.baidu.com/s/1NwvR3RVP0edLBeZnnnCYvw 提取码: smys 二、安装vmware17.6.1 1、找到下载…...

Erlang语言的并发编程

Erlang语言的并发编程 引言 并发编程是现代软件开发中的一个重要领域&#xff0c;尤其是在面对需要高效处理大量任务的应用时。Erlang是一种专门设计用于并发编程的编程语言&#xff0c;由于其在电信和即时通信系统中的广泛应用&#xff0c;逐渐引起了开发者的关注。Erlang的…...

【数据挖掘实战】 房价预测

本次对kaggle中的入门级数据集&#xff0c;房价回归数据集进行数据挖掘&#xff0c;预测房屋价格。 本人主页&#xff1a;机器学习司猫白 机器学习专栏&#xff1a;机器学习实战 PyTorch入门专栏&#xff1a;PyTorch入门 深度学习实战&#xff1a;深度学习 ok&#xff0c;话不多…...

我的创作纪念日,纪念我的第512天

目录 年末 年初 入围 博客 变动 生活 期待 年末 很快&#xff0c;2024年已经过去了&#xff0c;本想在跨年夜的时候营造一点小小的仪式感&#xff0c;结果也因为身体的原因放弃了&#xff0c;浑身感觉疼痛&#xff0c;躺在床上&#xff0c;闭上眼睛&#xff0c;什么也不…...

【科研建模】Pycaret自动机器学习框架使用流程及多分类项目实战案例详解

Pycaret自动机器学习框架使用流程及项目实战案例详解 1 Pycaret介绍2 安装及版本需求3 Pycaret自动机器学习框架使用流程3.1 Setup3.2 Compare Models3.3 Analyze Model3.4 Prediction3.5 Save Model4 多分类项目实战案例详解4.1 ✅ Setup4.2 ✅ Compare Models4.3 ✅ Experime…...

PHP语言的网络编程

PHP语言的网络编程 网络编程是现代软件开发中不可或缺的一部分&#xff0c;尤其是在日益发展的互联网时代。PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的开源脚本语言&#xff0c;专门用于Web开发。它的灵活性、易用性以及强大的社区支持使得PHP在网络…...

计算机的错误计算(二百一十八)

摘要 大模型能确定 sin(2.6^100) 的符号吗&#xff1f;实验表明&#xff0c;大模型给的结论是正确的&#xff0c;但其证明过程是错误百出。大模型的推理实在是不敢恭维。 就同样题目&#xff0c;测试一下另外一个大模型。 例1. 能确定 sin(2.6^100) 的符号吗&#xff1f; 下…...

《鸿蒙Next原生应用的独特用户体验之旅》

界面设计与交互方面 简洁性与一致性&#xff1a;iOS界面以简洁统一著称&#xff0c;而鸿蒙Next的界面设计同样主打简洁&#xff0c;各部件采用悬浮效果&#xff0c;营造出空间感&#xff0c;如天气App的展示更加逼真。安卓系统由于不同厂商的定制化程度较高&#xff0c;导致用户…...

MDX语言的字符串处理

MDX语言的字符串处理 引言 MDX&#xff08;Multidimensional Expressions&#xff09;是一种专门用于多维数据库查询和分析的语言&#xff0c;特别是在Microsoft SQL Server Analysis Services&#xff08;SSAS&#xff09;中使用广泛。MDX不仅用于查询多维数据&#xff0c;还…...

游戏AI,让AI 玩游戏有什么作用?

让 AI 玩游戏这件事远比我们想象的要早得多。追溯到 1948 年&#xff0c;图灵和同事钱伯恩共同设计了国际象棋程序 Turochamp。之所以设计这么个程序&#xff0c;图灵是想说明&#xff0c;机器理论上能模拟人脑能做的任何事情&#xff0c;包括下棋这样复杂的智力活动。 可惜的是…...

Java 设计模式 二 单例模式 (Singleton Pattern)

单例模式 (Singleton Pattern) 是一种常见的设计模式&#xff0c;属于创建型模式。它的核心思想是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。通常用于那些需要全局控制的场景&#xff0c;比如配置管理、日志系统、数据库连接池等。 1. 单例模式的…...

Java 中 final 关键字的奥秘

目录 一、final 修饰类&#xff1a;封印的 “永恒之石” 二、final 修饰变量&#xff1a;锁定的 “不变之值” 三、final 修饰方法&#xff1a;不可撼动的 “坚固堡垒” 四、总结 在 Java 编程的世界里&#xff0c;final 关键字就像一把神奇的 “锁”&#xff0c;一旦使用&…...

C# 通用缓存类开发:开启高效编程之门

引言 嘿&#xff0c;各位 C# 开发者们&#xff01;在当今快节奏的软件开发领域&#xff0c;提升应用程序的性能就如同给跑车装上涡轮增压&#xff0c;能让你的项目在激烈的竞争中脱颖而出。而构建一个高效的 C# 通用缓存类&#xff0c;无疑是实现这一目标的强大武器。 想象一…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...