Linux CentOS7 vim多窗口编辑
我们在用vim编辑文件时,有各种需求。如有时需要在多个文件之间来回操作,一会关闭一个文件,一会再打开另外一个文件,这样来回操作显得太笨拙。有时,vim编辑多行的大文件,来回查看、编辑前面一部分及最后一部分,一个窗口也不好编辑。又比如,想对一个文件修改,多次复制粘贴,一个窗口也不方便。
还好,linux提供了多文件多窗口的模式,让我们在多个窗口中打开一个文件,或打开多个文件,可以对照修改与处理。
窗口是可视化的分割区域。Vim打开一个文件就会建立一个缓冲区,其也可以分割成多个窗口。
为了简化讨论的复杂度,不考虑一个窗口打开多个文件的情况。感兴趣的读者可以参考《Linux CentOS7 vim多文件编辑》。
一、创建窗口
我们用vim打开文件时,默认是打开一个文件,一个窗口。我们从简到繁,讨论如何打开多个文件和多个窗口。
1.一次打开多个窗口
在用vim打开文件时,可以添加选项,设置打开多个文件、多个窗口。其中,-on可以指定上下排列n个窗口,而-On可以指定左右排列n个窗口。o是英语单词open的首字母;n是一个整数,指定打开窗口的数量。
a.两个窗口1个文件
基本格式:
vim -o2 file1 上下排列
案例:
vim -o2 demo.txt

基本格式:
vim -O2 file1 左右排列
案例:
vim -O2 demo.txt

b. 多个窗口多个文件(文件多)
vim -o3 file1 file2 file3 file4 上下排列
vim -O3 file1 file2 file3 file4 左右排列
结果是有一个文件是隐藏的,未显示

c.多个窗口多个文件(窗口多)
vim -o4 file1 file2 file3 上下排列
vim -O4 file1 file2 file3 左右排列
结果是有一个窗口是空白

2.逐步打开多个窗口
我们先打开一个文件,单一窗口。在底行模式下,添加命令,增加窗口。可以按要求打开任意窗口。
a.先打开一个窗口
vim file1
(此处打开一个文件与打开多个文件影响不大)
案例:
vim demo.txt
b.再创建一个新窗口
在当前窗口中,创建新窗口,有三大类命令。功能相同,可根据爱好使用。
(1)sp/vs
:sp 上方新建一个窗口,仍是打开file1

:vs 左边新建一个窗口,仍是打开file1
如果命令后添加文件名,新建窗口中打开的将是新文件。
:sp file2 上方新建一个窗口,打开文件file2
:vs file2 左边新建一个窗口,打开文件file2
sp是split分隔单词的前两个字符;而vs,有时写作vsp,是vertical split的首字母。
(2)new/vertical new
:new 上方新建一个窗口,仍是打开file1
:new file2 上方新建一个窗口,仍是打开file2

new命令,将在当前窗口的上方创建一个新窗口,有文件名时,新窗口中打开该文件。
:vnew 左边新建一个窗口,仍是打开file1(v是vertical的简写)
:vnew file2 左边新建一个窗口,仍是打开file2
:new+窗口名(保存后就是文件名)

(3) ctrl+w s/v
前两种方法是在底行模式下,录入命令创建新窗口,本方法是利用快捷键,新建窗口(因方法简单,仅能创建原文件的新窗口)。
ctrl+w s 水平分割
ctrl+w v 垂直分割
这里的w是window的意思。快捷键ctrl+w后面会多次用到,再加不同的选项,产生不同的功能与效果。
每个窗口可以继续被无限分割(看屏幕是否足够大)。
c.继续创建新窗口
在前述方法的基础上,可以创建需要的窗口。可以使用:sp/vs,也可以用:new/vnew。通过此方法可以创建三个窗口:可以是上方一个窗口、下方两个窗口,或者是上二下一、一左二右、二左一右。
由此类方法创建的窗口,与一次创建多个窗口不同,各有利弊。

二、窗口位置大小的调整
可以用鼠标先调整xshell会话的窗口大小,再调整vim中各窗口大小。
1.窗口大小变化
a.均分
ctrl+w = 使所有窗口等宽、等高
b.调高
ctrl+w _ 最大化活动窗口的高度
[n]ctrl+w _ 把活动窗口的高度设置为n行,如40ctrl+w _
ctrl+w + 把活动窗口的高度增高1字符
ctrl+w n+ 把活动窗口的高度增高n字符
nctrl+w + 把活动窗口的高度增高n字符
ctrl+w - 把活动窗口的高度减少1字符
ctrl+w n- 把活动窗口的高度减少n字符
nctrl+w - 把活动窗口的高度减少n字符
c.调宽
ctrl+w | 最大化活动窗口的宽度
[N]ctrl+w | 把活动窗口的宽度设置为N列
ctrl+w > 把活动窗口的宽度增宽1字符
ctrl+w n> 把活动窗口的宽度增宽n字符
nctrl+w > 把活动窗口的宽度增宽n字符
ctrl+w < 把活动窗口的宽度减少1字符
ctrl+w n< 把活动窗口的宽度减少n字符
nctrl+w < 把活动窗口的宽度减少n字符
(此由可见先按n与先按ctrl+w效果相同)
2.窗口位置调换
窗口位置调换实际上就是把左边的窗口调整到右边或上边的窗口调整到下边等等。
在vim中,hjkl是移动光标的快捷键,与Ctrl+w相结合,可以对多个窗口进行窗口位置调换。
Ctrl+w+ H[JKL] 多窗口调换
Ctrl+w+L 当前窗口移动到最右边;+H当前窗口移动到最左边


Ctrl+w+x 在只有两个窗口的情况下,通过此快捷键可以对调窗口位置
如何把上下排列的两个窗口调整为左右排列?
按Ctrl+w+H,当前窗口将调整为左边,另一窗口为右边排列。其他窗口位置调换可以自行测试。
三、切换当前窗口
光标所在的窗口,称为当前窗口。通过快捷键可以切换到需要的窗口。
1.循环切换窗口
Ctrl+w + w
按住Ctrl,再按w,就可以切换窗口。再按一次w,从当前窗口切换到下一个窗口(顺时针变化)。
案例:
当前窗口在左边,我们记为窗口中。按一次Ctrl+w + w,光标移动到右上窗口中。如果还想切换,再按一次Ctrl+w + w,光标移动到右下窗口中。
所有的vim文件编辑,都是对当前窗口有效。执行底行命令,也是针对当前窗口。

2.根据方向键切换窗口
Ctrl+w + ↑↓→←
此方法不受限于顺时针切换窗口,可以从当前窗口切换到另一窗口,未到需要的窗口,可以多次按Ctrl+w +方向键(一次只能按一个方向键)。
3.按字母键切换窗口
Ctrl+w + h j k l
此方法与上一方法基本相同。在vim中,hjkl就是方向键。
操作简单,不作演示。
四、退出窗口(文件)
文件内容的修改、保存与文件多少、窗口多少关系不大,与单文件单窗口方法相同,不再讨论。
跨文件跨窗口的复制与粘贴,在理解剪切板的情况下,会切换窗口就可以顺利完成操作,此处也不作赘述。
仅讨论如何保存退出、强制退出等案例。
一般地讲,退出文件就是关闭窗口。但有时关闭窗口并不能退出文件编辑。
为了保证文件能正常退出,在编辑完文件后,及时保存。
1.单个文件(窗口)退出
a.退出文件就是关闭窗口
退出文件命令是:
:wq;:q;:q!;:x;:ZZ
b.关闭窗口就是退出文件
关闭当前窗口的命令是:
:close
快捷键
Ctrl+w+q
2.所有文件的退出
所有文件的退出也是所有窗口关闭。
关闭多个窗口可以用:qa!,也可以使用:close,最后一个窗口不能使用close关闭。使用close只是暂时关闭窗口,其内容还在缓存中,只有使用q!、w!或x才能真正退出。
对于打开文件数与打开窗口数不一致的情况,比较复杂,我们将在vim多文件多窗口编辑的文章中展开讨论。
相关文章:
Linux CentOS7 vim多窗口编辑
我们在用vim编辑文件时,有各种需求。如有时需要在多个文件之间来回操作,一会关闭一个文件,一会再打开另外一个文件,这样来回操作显得太笨拙。有时,vim编辑多行的大文件,来回查看、编辑前面一部分及最后一部…...
git使用,一点点
查看自己有没有安装git git --version 如果没有安装请执行sudo yum install -y git来安装 git 指令 git log 查看日志 git pull 同步远端和本地仓库 这就是冲突的报错: 所以这个时候你要同步一下git pull...
第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第八节 - 如何在 C/C++、Python 和 Java 中分割字符串?)
通过某些分隔符分割字符串是一项非常常见的任务。例如,我们有一个文件中以逗号分隔的项目列表,并且我们希望数组中包含各个项目。 几乎所有编程语言都提供按某些分隔符分割字符串的函数。 目录 在C中: 在 C++ 中 方法一:使用C++的stringstream API...
【Java】语法特性篇
语法特性篇 Java对象的比较 1. 对象比较的问题 Java中引用类型的变量不能直接按照 > 或者 < 方式进行比较。那为什么可以比较? 因为:对于用户实现自定义类型,都默认继承自Object类,而Object类中提供了equal方法…...
Vim教程
目录 vim 介绍 常用的四种模式 首先先学会如何正确进入和退出vim: normal模式 insert模式: command模式: v-block模式: vim异常退出 vim配置 vim 介绍 Vim是一款高度可定制的文本编辑器,它的前身是Vi…...
selenium查找网页如何处理网站资源一直加载非常卡或者失败的情况
selenium查找网页如何处理网站资源一直加载失败的情况 selenium获取一个网页,某个网页的资源卡了很久还没有加载成功,如何放弃这个卡的数据,继续往下走 有2钟方式。通常可以采用下面的方式一来处理这种情况 方式一、WebDriverWait 这种方式…...
并发工具类库使用的常见问题
一、ThreadLocal在多线程环境中没有清理 由于ThreadLocal是和线程绑定的,如果线程被复用了,也即使用了线程池,那么ThreadLocal中的值是可能被复用的,这个特性如果是开发者没有预料到的,那么会产生很大的问题。例如&am…...
GD32F10X ----RTC
1. RTC的简介 STM32 的实时时钟(RTC)是一个独立的定时器。STM32 的 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC 模块和时钟配置…...
使用UiPath和AA构建的解决方案 1. 机器人过程自动化入门
你好!在这本系列,我们将指导您完成一些真实世界的机器人过程自动化(RPA)项目。感谢您的加入。当你完成本系列时,你将具备使用UiPath和Automation Anywhere在最低指导下进行简单到中等复杂度RPA项目的知识、技术和心态。 RPA是一项令人兴奋的新技术,被视为使用新的先进技…...
rust字面量
字面量就是值。值最终必须编码成二进制存储在某块内存上。 变量与字面量的关系就像杯子和水的关系。 字面量是有类型的。字面量类型有:布尔、数字、文本、字节 一、布尔 类型是bool true false 二、数字 通过后缀表示类型 通过前缀表示进制 通过 “_” 来分割数…...
Unix Network Programming Episode 79
‘gai_strerror’ Function The nonzero error return values from getaddrinfo have the names and meanings shown in Figure 11.7. The function gai_strerror takes one of these values as an argument and returns a pointer to the corresponding error string. #incl…...
Cesium展示——wkt 数据绘制
文章目录 需求分析1. 第一步,数据类型转换2. 第二步,数据渲染需求 WKT 是什么:WKT 简介 在这里,我选择将 Cesium 中将wkt数据转化为geoJSON格式后渲染至地球上 分析 1. 第一步,数据类型转换 npm install terraformer-wkt-parser --savelet wkts =...
打造完美家庭空间,让生活更加舒适
在现代繁忙的都市生活中,家是人们温暖而舒适的避风港。而如何打造一个恰到好处的家庭空间,成为了许多人心中的追求。今天,就让我们来探索一些空间布局方案,为您的家庭营造一个完美融合功能与美感的舒适空间。 🏠&…...
解决loadDep:omelette: sill install loadAllDepsIntoIdealTree
报错信息如下: 解决方案: 1、设置为淘宝的镜像源 npm config set registry https://registry.npm.taobao.org 2、 命令检验是否成功 npm config get registry 3、继续运行npm install即可 npm install 运行效果:...
【深蓝学院】手写VIO第2章--IMU传感器--作业
这次作业坑很多,作业说明的不清楚,摸索了很长时间才将此次作业完成,在这里进行记录。 1. T1 1.1 题干 1.2 解答 1.2.1 法1,ros related方法 不知道为什么我的launch不了,在imu_utils目录下面建立build后࿰…...
Android多线程学习:线程
一、概念 进程:系统资源分配的基本单位,进程之间相互独立,不能直接访问其他进程的地址空间。 线程:CPU调度的基本单位,线程之间共享所在进程的资源,包括共享内存,公有数据,全局变量…...
canvas 入门
canvas 入门 canvas是干什么的?canvas 绘制直线canvas画虚线canvas 绘制三角形canvas 绘制正方形canvas 绘制圆形、圆弧与椭圆canvas绘制文本canvas绘制图片 canvas是干什么的? <canvas> 是HTML5中的标签,它是一个容器,可以…...
建议收藏!混迹职场多年总结出的8大技巧!
1. 不要吃“哑巴”亏:不管在什么企业,一定要“会说话”,敢于表达自己,但是又兼顾身边人的感受,考虑好自己的言行将会带来的后果。良好的沟通技巧对于在职场中建立良好的人际关系和解决问题至关重要。学会倾听、表达和理…...
OpenCV4(C++)—— 视频和摄像头的加载、显示与保存
文章目录 一、加载与显示二、保存 一、加载与显示 视频或摄像头的加载是使用 cv::VideoCapture 类。(这个类和 ifstream 类比较相似,视频或摄像头的加载和文本文件操作是大致相同。主要步骤:(1)加载(打开&a…...
excel功能区(ribbonx)编程笔记6-box的使用
box元素用来在组里指定的控件周围放置一个可视的框,其主要目的是将控件作为一个单元组合在一起。 通常情况下,分配到组中的每个控件都被放置在先前的控件下面直到该列被填满,然后下一个控件被放置在其右侧列的顶行。然而,通过在框里面组合命令,可以将几个控件视作一个整体…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
