【Linux】工具(2)——vim

news2024/11/26 2:26:28

本期博客我们进入到Linux环境下vim工具的学习:

一、vim是什么

📌Vim是一个超级超级强大的文本编辑器。Vim及前身VI,历史悠久(可能比多数读者的年龄更大),经历了几十年的考验和发展。Vim全称叫Vi IMproved. 而vi则是Visual Interface的缩写,他们处理都是ASCII码字符数据;vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、 windows。

在Linux下推荐使用vim来做为我们代码编辑器,但是不同于我们的vs2022集成环境,vim只是一个单纯的编辑器不含有其他的编译、调试等功能。

二、vim的使用

2.1 vim的模式

vim工具有不少种模式,但是我们常用的只有3~5种,这对我们日常开发来说已经足够了

下图是vim的四种模式的相互转换所需的按键:

下面我们来对Vim常用的三种模式进行详细的讲解:

2.1.1 命令模式

我们首先直接打开vim(在云服务器下vim一般都是自带的,如果没有的话可以用yum来安装)

我们可以直接输入vim来直接打开:

进入vim后默认就是命令模式,在此模式下按键是没有作用的(除了某些特殊键)

现在我们在此模式下我们可以有两种选择:

💡一是按i进入插入模式,二是按shift进入底行模式

📋现在我们来进行实际操作:

我们现在对test.c文件来进行编辑:

当我们使用vim默认进入的是命令模式,现在我们按i进入插入模式

2.1.2 插入模式

当我们按下i进入插入模式后,屏幕的左下角会有一个INSERT提示:

在此模式下我们可以对文件进行编写,在这里先写一段简短的C语言代码:

写完之后我们可以按esc键回到命令模式

❗回到命令模式后屏幕的左下角会有一个INSERT提示会消失

2.1.3 替换模式

在命令模式时,我们可以按shiftr进入到替换模式

进入替换模式后,屏幕的左下角会有一个REPLACE提示:

在此模式中我们可以直接替换光标处的字符:

📋例如

按下x后:

再按一个l:

可以看到光标所在字符都被替换了

写完代码我们一般会保存并退出,这时我们可以按shift进入底行模式

2.1.4 底行模式

进入底行模式后,屏幕左下角会有一个:进行提示

接下来我们可以输入q来退出(但是我们在这个文件里编写了代码,没有保存之前是退出不了的):

遇到这种情况我们可以输入w来保存,最后再输入q来退出(wq两个指令可以连着输入):

退出后我们可以使用cat指令来看一下编辑完后的test.c文件:

2.2 vim指令集

2.2.1 底行模式下的指令

2.2.1.1 set nu / set nonu

在底行模式下我们可以设置是否显示文件文本的行号:

📌具体操作为:set nu(显示行号) / set nonu(不显示行号)

📋下面我们来进入到底行模式下进行操作:

下面就是显示行号的效果:

下面是不显示行号的效果:

2.2.1.2 /

📌/后面加内容可以搜索文本相对应的内容并高亮显示

📋例如

2.2.1.3 %s

📌%s可以替换直到内容

📌具体操作:%s/被替换的内容/想要替换的内容/g

例如:

按下enter后:

2.2.1.4 vs

📌vs可以将另一个文件加入界面进行分屏操作

📌具体操作:vs 文件名

❗注意:如果文件不存在,vim会自动创建该文件并保存

📋例如

这样我们就可以对两个文件分屏进行操作了,按住ctrl再连按两次w键进行分屏的切换

vs不仅仅可以两个文件进行操作,还可以更多

2.2.2 命令模式下的指令

vim的指令大部分都是在命令模式下操作的,坐好小板凳,我们开始出发:

2.2.2.1 (n)yy

📌yy指令可以复制当前行所有内容,在按下yy前按一个数字(n)就可以复制当前光标后n行(包括当前光标所在行)的内容

📋例如我们现在的光标在第五行,现在按两下y键可以复制第五行的内容:

2.2.2.2 (n)p

📌p可以粘贴内容(粘贴在光标的下一行)

📋在上面我们复制了第五行的内容的情况下,现在我们按一下p:

按一下p可以复制一次,我们可以在按下p前按一个数字(n)再按p就可以复制n次:

在这里我按了99,太长了抱歉抱歉,希望没有影响到大家的阅读😅

2.2.2.3 u

📌u指令可以撤销上一次操作

📋我们现在对上一次粘贴的99行内容的操作进行撤销(按一下u键):

发现很好的撤销了,现在再一次的按u可以发现第一次粘贴的内容也被撤销了:

2.2.2.4 Ctrl r

📌Ctrl r指令可以对撤销进行撤销

📋例如我们上一次撤销了粘贴的一行代码,现在我后悔了,按下Ctrl和r键:

现在可以发现上次撤销的代码又回来了

2.2.2.5 (n)dd

📌dd指令可以剪切当前光标所在行的内容,在按下dd前按一个数字(n)就可以剪切当前光标后n行(包括当前光标所在行)的内容

📋例如现在我们剪切光标后2行内容(按下2再按两下d键):

剪切的内容当然也可以粘贴,按下p即可(如果我们剪切后没有按p,那就是相当于删除)

2.2.2.6 (n)shift g

📌shift g指令可以让我们的光标直接移至到文本的最后一行,在按下shift和g前按一个数字(n)就可将光标移至第n行

📋例如现在我们在有一万多行的文本下,按shiftg键可以直接定位到最后一行:

现在按999再按shiftg键可以直接定位到999行:

2.2.2.7 gg

📌gg指令可以将光标移至文本的第一行

📋例如现在我们在有一万多行的文本下,按gg键可以直接定位到第一行:

按下gg:

2.2.2.8 shift 4

📌shift 4可以移动光标到当前文本行的末尾

📋例如:

现在我们按下shift和4:

2.2.2.8 shift 6

📌shift 6可以移动光标到当前文本行的开头

📋例如:

现在我们按下shift和6:

2.2.2.9 (n)w / (n)b

📌w和b分别可以让光标向后或向前移动一个单词的位置,在按下w或b前按一个数字(n)就可将光标向后或向前移n个单词位置

📋例如:

按下w:

再按下w:

按下b:

按下3,再按b:

2.2.2.10 shift ~

📌shift ~可以对文本进行大小写快速的修改

📋例如:

按一下shift和~:

按住shift和~不放可以一路大小写修改下去:

2.2.2.11 (n)r

📌t可以对光标所在字符进行替换,在按下r前按一个数字(n)就可将光标后n个字符替换

📋例如:

先按一下r,再按一下k:

先输入数字10,按一下r,再按一下x:

2.2.2.12 (n)x / (n)shift x

📌x可以删除光标后(包括光标)的字符,shift x可以删除光标前(不包括光标)的字符,在按下x或shift和x前按一个数字(n)就可将光标后或前n个字符删除

📋例如:

按下10再按shift和x:

按下10再按x:

2.2.2.13 h / j / k / l

📌h/j/k/l可以分别让光标向///移动

三、vim的配置

3.1 自己配置

在Linux环境下每个用户都可以配置自己的vim编辑器,配置完只在该用户当前目录下生效不影响其他人的使用

📋现在我来简单配置一下自己的vim:

第一步要创建一个.vimrc的文件

我们在每次打开vim的时候,它都会自动在当前目录下寻找.vimrc文件,如果有就用该文件的配置,没有就用默认配置。所以我们在配置vim时需要.vimrc文件:

第二步在.vimrc文件中配置vim

关于vim的配置,在网上可以搜索的到,这里演示一个作为栗子:

在这里我们将行号显示配置上去,现在我们来打开一下test.c文件:

可以看到直接就有了行号的显示

如果不需要.vimrc文件某些配置可以将其前加上"来注销

3.2自动化配置

在这里有一条自动化配置的指令,我们只需要输入到Linux中即可

❗注意:该配置只支持centos 7的版本

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh


本期的博客到这里又要和各位说再见了,如有纰漏还请各位大佬在评论区指出~

下一期见啦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/373407.html

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

相关文章

Linux安装云原生网关Kong/KongA

目录1 概述2 创建服务器3 安装postgres4 安装kong5 安装node6 安装KONGA1 概述 Kong Kong是一款基于OpenResty(NginxLua模块)编写的高可用、易扩展的开源API网关,专为云原生和云混合架构而建,并针对微服务和分布式架构进行了特别…

蓝桥杯算法模板

模拟散列表拉链法import java.io.*; import java.util.*; public class a1 {static int n;static int N100003;static int[] hnew int[N];static int[] enew int[N];static int[] nenew int[N]; static int idx; static void insert(int x){int k(x%NN)%N;e[idx]x;ne[idx]h[k];…

终端软件架构说

目录 零:前言 一,基于服务的架构 二,基于多进程多线程的架构 三,以数据为中心的架构 四,类Android的分层架构设计 五,总结 零:前言 谈到架构,可能大家的第一感觉是信息系统的…

2023年三月份图形化三级打卡试题

活动时间 从2023年3月1日至3月21日,每天一道编程题。 本次打卡的规则如下: 小朋友每天利用10~15分钟做一道编程题,遇到问题就来群内讨论,我来给大家答疑。 小朋友做完题目后,截图到朋友圈打卡并把打卡的截图发到活动群…

Vue 3第三章:模板语法及指令介绍

文章目录1. 插值表达式1.1. 声明变量可直接在模板中使用,采用{{变量名称}}的方式1.2. 模板语法支持三元表达式1.3. 模板语法支持运算1.4. 模板语法支持方法调用2. 指令2.1. v-bind:用于绑定属性或动态绑定对象的值到元素上。2.2. v-if、v-else-if、v-els…

C#学习记录——接口的实现

一小部分知识精英依旧直面核心困难,努力地进行深度钻研,生产内容;而大多数信息受众始终在享受轻度学习,消费内容。如果我们真的希望在时代潮流中占据一席之地,那就应该尽早抛弃轻松学习的幻想,锤炼深度学习…

Burp Suite 常用模块简介

Burp Suite 常用模块分为 目标站点(target)模块 代理(proxy)模块 攻击(Intruder)模块 重放(Repeater) 模块 Target模块是对站点资源的收集,与站点各资源包发出和相应包的记录 Proxy模块是核心模块,可以拦截数据包发送往浏览器,进行修改后再…

网络协议分析(2)判断两个ip数据包是不是同一个数据包分片

一个节点收到两个IP包的首部如下:(1)45 00 05 dc 18 56 20 00 40 01 bb 12 c0 a8 00 01 c0 a8 00 67(2)45 00 00 15 18 56 00 b9 49 01 e0 20 c0 a8 00 01 c0 a8 00 67分析并判断这两个IP包是不是同一个数据报的分片&a…

Android JetPack之启动优化StartUp初始化组件的详解和使用

一、背景 先看一下Android系统架构图 在Android设备中,设备先通电(PowerManager),然后加载内核层,内核走完,开始检查硬件,以及为硬件提供的公开接口,然后进入到库的加载。库挂载后开…

Winform控件开发(16)——Timer(史上最全)

前言: Timer控件的作用是按用户定义的时间间隔引发事件的计时器,说的直白点就是,他就像一个定时炸弹一样到了一定时间就爆炸一次,区别在于定时炸弹炸完了就不会再次爆炸了,但是Timer这个计时器到了下一个固定时间还会触发一次,上面那张图片就是一个典型的计时器,该定时器…

【Java】Spring Boot 配置文件

文章目录SpringBoot 配置文件1. 配置文件的作用2. 配置文件的格式3. properties配置文件说明3.1 properties基本语法3.2 读取配置文件3.3 properties缺点分析4. yml配置文件说明4.1 yml基本语法4.2 yml使用进阶4.2.1 yml配置不同的数据类型及null4.2.1 yml配置的读取4.2.2 配置…

Python蓝桥杯训练:基本数据结构 [哈希表]

Python蓝桥杯训练:基本数据结构 [哈希表] 文章目录Python蓝桥杯训练:基本数据结构 [哈希表]一、哈希表理论基础知识1、开放寻址法2、链式法二、有关哈希表的一些常见操作三、力扣上面一些有关哈希表的题目练习1、[有效的字母异位词](https://leetcode.cn…

0101基础概念-图-数据结构和算法(Java)

文章目录1 图1.1 定义1.2 4种图模型2 无向图2.1 定义2.2 术语后记1 图 1.1 定义 图是一种非线性的数据结构,表示多对多的关系。 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V, E)&#xf…

ecology9-谷歌浏览器下-pdf.js在渲染时部分发票丢失文字 问题定位及解决

问题 问题描述 : 在谷歌浏览器下,pdf.js在渲染时部分发票丢失文字;360浏览器兼容模式不存在此问题 排查思路:1、对比谷歌浏览器的css样式和360浏览器兼容模式下的样式,没有发现关键差别 2、✔使用Fiddler修改网页js D…

什么是线程死锁?如何解决死锁问题

死锁,一组互相竞争的资源的线程之间相互等待,导致永久阻塞的现象。 如下图所示: 与死锁对应的,还有活锁,是指线程没有出现阻塞,但是无限循环。 有一个经典的银行转账例子如下: 我们有个账户类…

操作系统权限提升(十四)之绕过UAC提权-基于白名单AutoElevate绕过UAC提权

系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权 注:阅读本编文章前,请先阅读系列文章,以免造成看不懂的情况!! 基于白名单AutoElevate绕过…

2-MATLAB APP Design-下拉菜单栏的使用

一、APP 界面设计展示 1.新建一个空白的APP,在此次的学习中,我们会用到编辑字段(文本框)、下拉菜单栏、坐标区,首先在界面中拖入一个编辑字段(文本框),在文本框中输入内容:下拉菜单栏的使用,调整背景颜色,字体的颜色为黑色,字体的大小调为26. 2.在左侧组件库常用栏…

Qt音视频开发17-vlc内核回调拿图片进行绘制

一、前言 在众多播放器中,支持的种类格式众多,并支持DVD影音光盘,VCD影音光盘及各类流式协议,提供了sdk进行开发,这点是至关重要的,尽管很多优秀的播放器很牛逼,由于没有提供sdk第三方开发&…

【网络编程套接字(一)】

网络编程套接字(一)理解源IP地址和目的IP地址理解源MAC地址和目的MAC地址理解源端口号和目的端口号PORT VS PID认识TCP协议和UDP协议网络字节序socket编程接口socket常见APIsockaddr结构简单的UDP网络程序服务端创建套接字服务端绑定字符串IP VS 整数IP客…

面试官: 你知道 JWT、JWE、JWS 、JWK嘛?

想起了 之前做过的 很多 登录授权 的项目 它相比原先的session、cookie来说,更快更安全,跨域也不再是问题,更关键的是更加优雅 ,所以今天总结了一篇文章来介绍他 JWT 指JSON Web Token,如果在项目中通过 jjwt 来支持 J…