本期博客我们进入到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的四种模式的相互转换所需的按键:
![](https://i-blog.csdnimg.cn/blog_migrate/843cce28c75412dfb20ea52e52ba110d.png)
下面我们来对Vim常用的三种模式进行详细的讲解:
2.1.1 命令模式
我们首先直接打开vim(在云服务器下vim一般都是自带的,如果没有的话可以用yum来安装)
我们可以直接输入vim来直接打开:
![](https://i-blog.csdnimg.cn/blog_migrate/b46fe173c5f7a91e53357f881aba923f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4b7d7fa8056ca62ecaea2e7f2981beb2.png)
进入vim后默认就是命令模式,在此模式下按键是没有作用的(除了某些特殊键)
现在我们在此模式下我们可以有两种选择:
💡一是按i进入插入模式,二是按shift和:进入底行模式
📋现在我们来进行实际操作:
![](https://i-blog.csdnimg.cn/blog_migrate/6d8fdd574475d81f9c7022474e93dac5.png)
我们现在对test.c文件来进行编辑:
![](https://i-blog.csdnimg.cn/blog_migrate/b487faac5a4fd72822810e58f49b889a.png)
当我们使用vim默认进入的是命令模式,现在我们按i进入插入模式:
2.1.2 插入模式
当我们按下i进入插入模式后,屏幕的左下角会有一个INSERT提示:
![](https://i-blog.csdnimg.cn/blog_migrate/cd590951bff4964ef1a928598b9556a7.png)
在此模式下我们可以对文件进行编写,在这里先写一段简短的C语言代码:
![](https://i-blog.csdnimg.cn/blog_migrate/11d05b5c4c83a97a9147c6601443cafe.png)
写完之后我们可以按esc键回到命令模式:
❗回到命令模式后屏幕的左下角会有一个INSERT提示会消失
2.1.3 替换模式
在命令模式时,我们可以按shift和r进入到替换模式:
进入替换模式后,屏幕的左下角会有一个REPLACE提示:
![](https://i-blog.csdnimg.cn/blog_migrate/2910ad5033158257bbc7602a21ec72d8.png)
在此模式中我们可以直接替换光标处的字符:
📋例如
![](https://i-blog.csdnimg.cn/blog_migrate/e95a936cfd231887b3b36585c7ef389c.png)
按下x后:
![](https://i-blog.csdnimg.cn/blog_migrate/f911656b3d188d5680440f687b2739e2.png)
再按一个l:
![](https://i-blog.csdnimg.cn/blog_migrate/fbd6514ceb7c1730380087079ce72bec.png)
可以看到光标所在字符都被替换了
写完代码我们一般会保存并退出,这时我们可以按shift和:进入底行模式:
2.1.4 底行模式
进入底行模式后,屏幕左下角会有一个:进行提示
![](https://i-blog.csdnimg.cn/blog_migrate/14cc3dd9c3cb802d29575baa97f7f0f9.png)
接下来我们可以输入q来退出(但是我们在这个文件里编写了代码,没有保存之前是退出不了的):
![](https://i-blog.csdnimg.cn/blog_migrate/1a2a13a0be2834284e6e07f616ffde50.png)
遇到这种情况我们可以输入w来保存,最后再输入q来退出(wq两个指令可以连着输入):
![](https://i-blog.csdnimg.cn/blog_migrate/7a3f80edd35fdccff644b3f92ed8c57d.png)
退出后我们可以使用cat指令来看一下编辑完后的test.c文件:
![](https://i-blog.csdnimg.cn/blog_migrate/b73d56509fa3bd3020df6023123f702d.png)
2.2 vim指令集
2.2.1 底行模式下的指令
2.2.1.1 set nu / set nonu
在底行模式下我们可以设置是否显示文件文本的行号:
📌具体操作为:set nu(显示行号) / set nonu(不显示行号)
📋下面我们来进入到底行模式下进行操作:
![](https://i-blog.csdnimg.cn/blog_migrate/df2177f995d3b553a03a5bb38066ad51.png)
下面就是显示行号的效果:
![](https://i-blog.csdnimg.cn/blog_migrate/b4efb65668c5680cf5b1fbdb0bdc0d70.png)
下面是不显示行号的效果:
![](https://i-blog.csdnimg.cn/blog_migrate/dc1ab59fb1fb21e18737584ec8624d2d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2a4a481fc3da8b246665ca8a04010be0.png)
2.2.1.2 /
📌/后面加内容可以搜索文本相对应的内容并高亮显示
📋例如
![](https://i-blog.csdnimg.cn/blog_migrate/7bd8403d624940ccadf7d0599e645817.png)
![](https://i-blog.csdnimg.cn/blog_migrate/50778de95d33dac83bfc1e352594aab5.png)
2.2.1.3 %s
📌%s可以替换直到内容
📌具体操作:%s/被替换的内容/想要替换的内容/g
例如:
![](https://i-blog.csdnimg.cn/blog_migrate/5a4f68f0a4e62f67601143612e13730b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dbb855e20cd59cb14967a099756bbd3a.png)
按下enter后:
![](https://i-blog.csdnimg.cn/blog_migrate/304a1c15363503844d2387eb90573063.png)
2.2.1.4 vs
📌vs可以将另一个文件加入界面进行分屏操作
📌具体操作:vs 文件名
❗注意:如果文件不存在,vim会自动创建该文件并保存
📋例如
![](https://i-blog.csdnimg.cn/blog_migrate/9467b8ed414e74b03e888139e67e392f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e1f08d5c357b5bb65b8e4c2082b96a6d.png)
这样我们就可以对两个文件分屏进行操作了,按住ctrl再连按两次w键进行分屏的切换
vs不仅仅可以两个文件进行操作,还可以更多
2.2.2 命令模式下的指令
vim的指令大部分都是在命令模式下操作的,坐好小板凳,我们开始出发:
2.2.2.1 (n)yy
📌yy指令可以复制当前行所有内容,在按下yy前按一个数字(n)就可以复制当前光标后n行(包括当前光标所在行)的内容
📋例如我们现在的光标在第五行,现在按两下y键可以复制第五行的内容:
![](https://i-blog.csdnimg.cn/blog_migrate/a3232d5d74ee204f212d97ade86c2627.png)
2.2.2.2 (n)p
📌p可以粘贴内容(粘贴在光标的下一行)
📋在上面我们复制了第五行的内容的情况下,现在我们按一下p:
![](https://i-blog.csdnimg.cn/blog_migrate/64b4c197832521cb92bef87ef5c814e3.png)
按一下p可以复制一次,我们可以在按下p前按一个数字(n)再按p就可以复制n次:
![](https://i-blog.csdnimg.cn/blog_migrate/b8ee8f3b7fe020512a0f48b45c37f121.png)
在这里我按了99,太长了抱歉抱歉,希望没有影响到大家的阅读😅
2.2.2.3 u
📌u指令可以撤销上一次操作
📋我们现在对上一次粘贴的99行内容的操作进行撤销(按一下u键):
![](https://i-blog.csdnimg.cn/blog_migrate/2e4bb36bf43c700662e19f14f0e160f9.png)
发现很好的撤销了,现在再一次的按u可以发现第一次粘贴的内容也被撤销了:
![](https://i-blog.csdnimg.cn/blog_migrate/47c5a77e64fc9f005ba88aff1ff69ac6.png)
2.2.2.4 Ctrl r
📌Ctrl r指令可以对撤销进行撤销
📋例如我们上一次撤销了粘贴的一行代码,现在我后悔了,按下Ctrl和r键:
![](https://i-blog.csdnimg.cn/blog_migrate/c2171ec247727c8a95d946a69dda622f.png)
现在可以发现上次撤销的代码又回来了
2.2.2.5 (n)dd
📌dd指令可以剪切当前光标所在行的内容,在按下dd前按一个数字(n)就可以剪切当前光标后n行(包括当前光标所在行)的内容
📋例如现在我们剪切光标后2行内容(按下2再按两下d键):
![](https://i-blog.csdnimg.cn/blog_migrate/e209f7d0f09694a9bcc681eb554827ad.png)
剪切的内容当然也可以粘贴,按下p即可(如果我们剪切后没有按p,那就是相当于删除)
2.2.2.6 (n)shift g
📌shift g指令可以让我们的光标直接移至到文本的最后一行,在按下shift和g前按一个数字(n)就可将光标移至第n行
📋例如现在我们在有一万多行的文本下,按shift和g键可以直接定位到最后一行:
![](https://i-blog.csdnimg.cn/blog_migrate/3b78fa71f5f21d799f68cbbcba9fdee6.png)
现在按999再按shift和g键可以直接定位到999行:
![](https://i-blog.csdnimg.cn/blog_migrate/eba6ec6aa7bcf138197cbdbb8c5a95bd.png)
2.2.2.7 gg
📌gg指令可以将光标移至文本的第一行
📋例如现在我们在有一万多行的文本下,按gg键可以直接定位到第一行:
![](https://i-blog.csdnimg.cn/blog_migrate/49f8c1c0dfc3c82a6c187ca6cf290f3f.png)
按下gg:
![](https://i-blog.csdnimg.cn/blog_migrate/05e403f7edbe7a87e08a6471c447f84d.png)
2.2.2.8 shift 4
📌shift 4可以移动光标到当前文本行的末尾
📋例如:
![](https://i-blog.csdnimg.cn/blog_migrate/d33a3ceadfacbad16de187f19fe31cc7.png)
现在我们按下shift和4:
![](https://i-blog.csdnimg.cn/blog_migrate/c4a5c6bfc6cc34c97855a1e494ea17f5.png)
2.2.2.8 shift 6
📌shift 6可以移动光标到当前文本行的开头
📋例如:
![](https://i-blog.csdnimg.cn/blog_migrate/c4a5c6bfc6cc34c97855a1e494ea17f5.png)
现在我们按下shift和6:
![](https://i-blog.csdnimg.cn/blog_migrate/d33a3ceadfacbad16de187f19fe31cc7.png)
2.2.2.9 (n)w / (n)b
📌w和b分别可以让光标向后或向前移动一个单词的位置,在按下w或b前按一个数字(n)就可将光标向后或向前移n个单词位置
📋例如:
![](https://i-blog.csdnimg.cn/blog_migrate/a9da7c094b08acde66e7adbd0bf91bde.png)
按下w:
![](https://i-blog.csdnimg.cn/blog_migrate/475936810dbaba0d5497f3464186ebb4.png)
再按下w:
![](https://i-blog.csdnimg.cn/blog_migrate/7fd755ece6b94f47ed1c9a84697ab765.png)
按下b:
![](https://i-blog.csdnimg.cn/blog_migrate/394d69bcf642ff7313f4c855a4090e2d.png)
按下3,再按b:
![](https://i-blog.csdnimg.cn/blog_migrate/faa99c123b8b696bf5e55abf81d156f1.png)
2.2.2.10 shift ~
📌shift ~可以对文本进行大小写快速的修改
📋例如:
![](https://i-blog.csdnimg.cn/blog_migrate/a352ab21e6226688643cebad8109288a.png)
按一下shift和~:
![](https://i-blog.csdnimg.cn/blog_migrate/84c0842625458b873c39340339431d23.png)
按住shift和~不放可以一路大小写修改下去:
![](https://i-blog.csdnimg.cn/blog_migrate/e19ab5934e9d42ed0229910e7d6ce760.png)
2.2.2.11 (n)r
📌r可以对光标所在字符进行替换,在按下r前按一个数字(n)就可将光标后n个字符替换
📋例如:
![](https://i-blog.csdnimg.cn/blog_migrate/6e277a04e3ce2659528cb3f8c0f044ff.png)
先按一下r,再按一下k:
![](https://i-blog.csdnimg.cn/blog_migrate/35e651b2f522d4e7874b76aa3d53f1ef.png)
先输入数字10,按一下r,再按一下x:
![](https://i-blog.csdnimg.cn/blog_migrate/8cdf9b7f428d58edae52c4a45ee278ee.png)
2.2.2.12 (n)x / (n)shift x
📌x可以删除光标后(包括光标)的字符,shift x可以删除光标前(不包括光标)的字符,在按下x或shift和x前按一个数字(n)就可将光标后或前n个字符删除
📋例如:
![](https://i-blog.csdnimg.cn/blog_migrate/241fb3226f23ba9da752116064f7e7d0.png)
按下10再按shift和x:
![](https://i-blog.csdnimg.cn/blog_migrate/5345d72e448f319d99484c11d6c594d3.png)
按下10再按x:
![](https://i-blog.csdnimg.cn/blog_migrate/4a47ecbd74270d9e534a9a5ebaf90de8.png)
2.2.2.13 h / j / k / l
📌h/j/k/l可以分别让光标向左/下/右/上 移动
三、vim的配置
3.1 自己配置
在Linux环境下每个用户都可以配置自己的vim编辑器,配置完只在该用户当前目录下生效不影响其他人的使用
📋现在我来简单配置一下自己的vim:
第一步要创建一个.vimrc的文件
我们在每次打开vim的时候,它都会自动在当前目录下寻找.vimrc文件,如果有就用该文件的配置,没有就用默认配置。所以我们在配置vim时需要.vimrc文件:
![](https://i-blog.csdnimg.cn/blog_migrate/30b1e90532d0d6862cea588fbdf22131.png)
第二步在.vimrc文件中配置vim
关于vim的配置,在网上可以搜索的到,这里演示一个作为栗子:
![](https://i-blog.csdnimg.cn/blog_migrate/a6c7c14fccebaf49597587889d93d009.png)
![](https://i-blog.csdnimg.cn/blog_migrate/80f6e97e36018f45d4af43faf7383aba.png)
在这里我们将行号显示配置上去,现在我们来打开一下test.c文件:
![](https://i-blog.csdnimg.cn/blog_migrate/0b5b07d392c871b32bbdde15b6bd4308.png)
可以看到直接就有了行号的显示
如果不需要.vimrc文件某些配置可以将其前加上"来注销
3.2自动化配置
在这里有一条自动化配置的指令,我们只需要输入到Linux中即可
❗注意:该配置只支持centos 7的版本
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
本期的博客到这里又要和各位说再见了,如有纰漏还请各位大佬在评论区指出~
下一期见啦~