Linux基础开发工具——vim工具
文章目录
- vim工具
- 什么是vim
- vim的多模式和使用
- vim的基础模式
- vim的三种基础模式
- 三种模式的初步了解
- 常用模式的详细讲解
- 插入模式
- 命令模式
- 模式转化
- 光标的移动
- 文本的编辑
- 底行模式
- 替换模式
- 视图模式
- 总结
- 使用vim的小技巧
- vim的配置(了解)
vim工具
本文章仍然是继续讲解Linux系统下的一些基础开发工具。本篇文章将对vim这个强大的文本编辑器进行详细讲解,包含内容有vim的引入介绍、vim的使用、还有vim的配置。
vim的使用方式有很多,但是在这里就先只进行简单讲解,能够熟练掌握使用几个常见的命令就可以了,后序要使用其它的方式的时候是可以再查阅资料使用的。
什么是vim
vim的本质其实就是一个多模式的文本的编辑器,只不过相对其他文本编辑器来说,vim的功能更加强大,使用起来难度也比较大。但是若能较为熟练地使用vim,那么使用其他的编辑器就很简单了。所以是有必要进行学习的。
如果有使用过且比较熟悉vim的,应该会见过另外一个编辑器叫做vi,这个我们可以把它理解为vim的前身,vim就是一个升级版的vi。
vim最大的特点就是可以使用命令对文本编辑器进行操作,这点和我们在Windows系统下常用的一些记事本还是有一些区别的:
在vim这个编辑器内,每个键是有对应的意义的。当然用法使用起来就有很多种,但是还是那句话,当前只需要掌握一些基础的、常用的用法即可。
vim的多模式和使用
接下来我们将对vim的使用进行简单地讲解。
在这里我们要回顾前面说的一点:什么是多模式?我们可以这么理解:
在我们常用的Windows GUI下的一些记事本或者文本编辑器,我们在编辑文本、复制、粘贴、剪切、回退等过程大部分时间都是用鼠标和键盘进行操作的,偶尔会搭配一些快捷键进行操作。在我们以往的认知上,这貌似就是一体的,所有的操作基本上都可以通过鼠标和键盘完成。其实这是因为GUI这层外壳程序进行了包装而已。
其实我们所做的这些操作,在底层不一定是这样子的。可能我们选中某个区域的时候,会有一个专门的模式会去完成这个操作(视图模式)。有可能我们在用鼠标点击个别操作(复制、粘贴…)的时候,有可能是底层命令模式在执行某些命令。我们在编辑文本的时候,又可能是某个模式打开才能让我们能够对文本进行编辑操作。
vim这个多模式的编辑器就是大概这样,这些模式是分开来的,需要我们了解和学会使用,而我们平常使用的是因为Shell进行包装了,所以弱化了这个概念。
当然后序对于vim的使用,还有一些要注意:
在本部分学习vim开始,将采用普通账号进行后续的操作。对于需要提权的部分,可以等到学习完vim之后修改之前的那个“白名单”,这样子后序就可以使用sudo进行短暂提权了。
因为直接使用root用户是一个不好的习惯,这个用户的权限太高了。很可能会导致我们忽视一些细节。同时,在以后的开发环境中,我们很可能也是用不到root账户的。
vim的基础模式
vim的模式非常多,可能有大概十几种。全部记住也是不现实的,我们就讲解vim种的基础模式,也是必须学会的模式。我们将会先从vim的三种最基础的模式开始讲解。
vim的三种基础模式
vim的基础模式有三种:分别为默认模式(命令模式)、插入模式、底行模式。
三种模式的初步了解
默认模式,也就是打开vim的时候默认所处的模式下。默认模式其实也称为命令模式,这个模式是可以让用户通过输入若干命令来进行一些文本编辑的操作的。当我们在这个模式下,我们会发现我们的鼠标其实是用不了的,无法像我们常用的记事本那样使用鼠标进行一些操作。
这个模式的本意是为了能够完成文本的快速编辑的。当然有些读者可能会觉得用鼠标会更方便。但是先别急。等到学习完这个模式后就知道这个模式的好处了。
默认模式/命令模式也成为普通模式(Normal),我们直接使用vim打开一个以前写过的c代码:
此时我们就会进入vim的界面:
这个时候,如果我们直接按下键盘想要输入一些内容,发现是没有任何东西能够输入成功的。因为当前处于命令模式,所有输入的键都会被当作成指令。
要想编辑内容,是需要转化模式的。即当前我们需要转化成编辑模式(插入模式),才能够对文本编辑器里面的内容进行修改。最简单的方法就是在普通模式下,按下i这一个按键,此时后vim会自动转化为insert模式,也称插入模式。
此时编辑器的底部是会出现“INSERT”字样的,这个时候就代表当前处于的是插入模式。当然像回退到普通模式很简单,直接按下键盘左上角的Esc键即可。
现在还有一个很棘手的问题,就是我们当前不会退出vim这个编辑器。这是因为,vim这个编辑器在开发的时候,就把当前编辑文件对应的保存、退出等操作集成到了一个模式下——底行模式。当然在普通模式下也确实可以使用一些快捷键进行退出。但是我们还是要搞清楚vim的基本使用模式和原理,所以是需要学底行模式的。
在普通模式下,按shift + ;,其实就是按:,此时就可以从普通模式切换到底行模式:
此时,最下方会出现一个:,这就是底行模式。我们可以在底行内输入一些指令:
w(保存当前文件)
q(退出当前文件)
wq (输入「wq」,存盘并退出vim)
q! (输入q!,不存盘强制退出vim)
此时我们输入对应指令就可以完成对应操作了。
但是这里要注意的是,如果对文件内容进行了了编辑,在底行模式下按q是没有办法直接退出文件的。如果想要不保存直接退出,需要使用指令wq。
当然,如果想要从底行模式回到普通模式,也是直接按左上角的Esc键即可。
对于上述的三种模式,我们可以用下面的这一张图来总结:
当然,我们这里只是简单地铺垫一下,这三种模式具体是如何使用的,这需要后续讲解。
可能有人会问,能否直接让插入模式和底行模式之间转换呢?这是不可以的。我们可以把普通模式看成一个中转站,其它的模式想要转换为另一种模式,需要转化为普通模式。
注:其他所有的模式转化为普通模式都是一样的,使用万能的Esc即可。
常用模式的详细讲解
接下来我们将进行vim下的三种基本模式进行讲解,同时会引入两个新的模式——视图模式和替换模式。学习完这些模式和常用指令后,再勤加练习,对于vim的大部分场景的使用就没问题了。
插入模式
插入模式其实没有什么太多好说的,插入模式其实就是用来编辑文本内容的。只不过相较于我们在Windows GUI下使用的文本编辑器而言,我们在vim的插入模式下是没办法使用鼠标进行定位和一系列操作的。这些操作被放在了其他模式下。
在插入模式下,我们只能通过键盘进行输入/修改内容,或者删除文本。总结成一句话就是——在vim的插入模式下,我们只能修改文本。如果需要使用到复制、粘贴、剪切、选择文本内容块等操作,这需要我们切换到其他模式下进行操作。这点我们注意即可。
所以在这里就不过多地讲述插入模式了,因为插入模式也确实没什么太多好讲的。
命令模式
命令模式/普通模式,这是一个非常重要的模式。它可以帮助我们快速地编辑文本。在这个模式下,我们输入地内容都会被当作成指令(不回显在显示器上)。
快速编辑,其实就是对应着一些快捷操作。比如我们常用的ctrl c/v,又或是一些其它的快捷操作。这些操作都放在了命令模式下。接下来我们一起来看看对应的操作有哪些。
模式转化
在命令模式下,按下“i”可以切换成插入模式,按下“shift + ;”即可进入底行模式。
其他模式转换为普通模式十分简单,万能“Esc”即可。
但是进入插入模式还是有很多分类的:
按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入
文件;
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
光标的移动
光标,在图形化界面下其实在文本编辑地时候,会有一道竖线不断地在闪烁,那个就是光标,标志着我们当前正在编辑的位置。在Linux系统下其实也是有地,就是那个绿色的光标:
平常在移动光标的时候,我们不仅可以直接使用鼠标点击想要编辑的位置。也可以通过键盘上的上下左右键进行移动光标。甚至可以使用一些快捷键来快速定位光标的位置。这些操作本质也都是为了能够快速地编辑文本。那么这些操作在vim下是如何做到的呢?
(1)光标快速定位文本行
每次进入vim的时候,光标总是默认的处在文本开头的第一个位置,如果我们想要快速的让光标定位到文本某个位置应该怎么操作呢?
我们可以使用命令shift + g(其实就是G),此时光标会快速的定位到文本的末尾行:
想要回到所有文本的开头行也很简单,直接使用命令gg即可。
但是这个只能在文本开头和末尾操作吗?其实并不是的,还可以将光标定位到指定行开头,使用命令:n + shift + g == n + G(n为数字)
当然这里想要显示指定文本在第几行是需要设置的,在底行模式下输入set nu即可。有了上述这些指令,就可以很轻松的在文本行直接进行来回切换了。
(2)在一行中确定光标位置
但是前面的操作也就是仅限于定位文本行开头而已。如果现在只想在一行内进行快速定位,又该如何呢?
使用shift + 3 == $,可以快速定位到某一行的最后面:
使用shift + 3 == ^,可以快速定位到某一行的最前面:
但是要注意的是,这里所说的最前面和最后面,是该行有文本内容的开头和末尾。如上图所示,定位到文本行的开头,前面的空格其实都被过滤掉了。、
前面的两种操作时在文本行的开头和末尾进行操作。有没有办法定位到文本行中间呢?这时候我们可以提供两种方法:
1.在某一行中,以”单词“为单位,使用命令w向后移动,使用命令b向前移:
比如我们在这里按下命令w,此时光标会向后眺一个单词。
但是在跳一次却只是向后跳过了一个分号。这是为什么呢?
其实这里所说的”单词“,并不是我们认为的英语单词。vim这个文本编辑器对”单词“是特殊处理的,这里的“单词”本质应该是“vim工具下单一的被跳过的词”。这点我们要注意下。向前跳也是一样的,就不在此处进行演示了。
我们也可以使用n + w / b进行向前和向后跳n个单词:
如上图所示:从printf的p开始向后跳5个单词。
(3)光标的上下左右任意移动
但是前面那样做还是会麻烦一点,如果有时候仅仅只是想切换到下一行还要各种各样的指令还是太麻烦了。所以vim其实也是提供了使用上下左右键进行光标移动的命令的。
但是我们要注意的是,在比较老的版本下的vim编辑器内,上下左右键并不是我们常用的那个pageup和pagedown键等。而是如下这四个:
键位 | 方向 |
---|---|
H | ← |
J | ↓ |
K | ↑ |
L | → |
当然,在比较新的版本下,我们常用的带箭头的上下左右键是可以使用的。但是在某些场景下无法使用(后序会讲)。
为什么是这么设定的呢?其实这个和以往的键盘设定有关,我们可以上网搜一下比较老的键盘,我们会发现一个问题,就是这些键盘是没有带箭头的上下左右键的:
我们仔细观察一下会发现,在老式键盘内,HJKL对应的就是上面对应方向按键。所以这也就是为什么vim会这样设计。这是因为vim其实也是很久之前就开发出来使用的了。只不过后序为了适应新的键盘,就把带箭头的上下左右键给识别到了。
但是这里的pageup等按键在某些场景下是没办法很好的使用的,这点我们后序会提及。
这里再提及一点:
按「ctrl」+「b」:屏幕往“后”移动一页
按「ctrl」+「f 」:屏幕往“前”移动一页
按「ctrl」+「u」:屏幕往“后”移动半页
按「ctrl」+「d」:屏幕往“前”移动半页
上面这几个是用来翻页用的,了解一下即可。
文本的编辑
文本的编辑操作有很多,比如有:
复制、粘贴、剪切、删除、替换…
接下来的内容将重点介绍一下在命令模式下,文本的各类的快速编辑是如何进行的。
1.文本的复制粘贴
平常在我们的Windows下GUI的各个地方中,我们最常用的复制粘贴方式有两种:
一种是直接使用鼠标选中区域按右键选择选项,另一种是使用快捷键ctrl c/v。
但是在命令模式下,这些都不起作用,我们只能通过使用命令进行操作。所以我们需要直到在命令模式下,复制和粘贴的命令是什么:
使用命令yy,可以把光标所处的当前行进行复制
使用命令p/P,会将缓冲区内的字符贴到光标所在行的下/上一行
复制前:
使用指令p复制后:
当然,这些指令也都是可以在前面加上数字n,从而进行多行的复制和粘贴的:
n + yy:一次性将光标所在行开始的n行复制到缓冲区。
n + p:一次性将缓冲区的内容在当前光标的下一行开始粘贴5次。
前面的操作都是针对于整行操作的,那有没有针对于部分内容的操作呢?
有的,使用指令yw即可,该指令会把光标开始到字尾的所有字符复制到缓冲区。
但是如果想控制复制的个数,就可以使用n + yw,复制n个字符到缓冲区。
这里就不再进行演示了,使用还是比较简单的。
但是这里要注意的一点是:yw指令复制完一个“单词”后就会停止,也就是说所谓的“字尾”,其实就是vim编辑器下“单词”的尾。而且yw指令粘贴后是默认在当前光标位置粘贴的。
2.文字的删除
和复制一样,我们分为整行操作和部分操作。
对于整行内容,我们可以使用命令dd,此命令会删除当前光标所在行的内容:
删除前:
删除后:
也可以使用n + dd一次性删除多行:
最下面显示的”4 fewer lines“意思就是少了四行,也就是我刚刚使用n + dd一次性删除了从光标开始往下数的四行内容。
但是现在我不想删除一整行,就只是想删除一行内的个别字符,这怎么办呢?
这里提供两个指令:x和X,这个可以删除一个字符,也可以在指令前面加上数字,指定一次删除n个字符。
x删除方式是把当前光标标记的字符删除,本质上是删除光标后的字符:
我们发现,光标标记的字符f被删除了。
X的删除方式是把当前光标开始到行尾的内容整体向左移动一个字符的位置,本质上删除的是光标之前的字符:
直到当前光标处在行头处,这个时候就代表着光标之前没有字符可以被删除了。此时再输入命令X就没有用了。
当然这两个指令也可以在前面加上数字,达到一次性删除多个字符的操作。在这里就不进行展示了。感兴趣地读者可以自行前往尝试即可。
3.内容的剪切
当然有时候我们希望内容是被剪切(从某个位置删除粘贴到另一个位置)。
这个时候其实不需要新的命令,直接使用前面的删除命令就可以了:
使用指令dd:
使用指令p:
使用指令x和X也是一样的。但是这里要注意的是,删除后再使用命令p进行粘贴:
如果是剪切一行,那么粘贴的是在当前光标的下一行粘贴。
如果是剪切若干个字符,那么粘贴是在当前光标的位置的下一个字符的位置。
4.内容替换
有时候我们想直接替换掉部分内容,我们可以这样做:
第一种方式就是切换到插入模式,然后直接对内容和进行删除后替换。(内容不多的情况下)
但是此处讲的是如何使用命令可以快速的进行替换,所以我们要知道替换的命令。
我们可以使用命令r + 替换字符,这个时候就可以把光标处的字符改成替换字符了:
当然也可以前面加数字n,一次性替换多个字符:
此时会把从光标开始的往后数n个字符全部替换。(如果n大于剩余字符个数是没有反应的)
当然还可以切换成替换模式进行替换字符,在这里我们先不讲。
但是如果想要转换字符的大小写,就应该使用命令shift + ~,此时就可以轻松的将光标处字符转化大小写情况:(大写 → 小写 小写 → 大写)
注意,光标处的字符大小写被转换后,光标会自动跳到下一个位置,直到行尾。对于没有大小写的字符,会直接跳到下一个位置。
5.内容查找
在一个文本当中,我们想实现某个内容的快速查找,可以使用命令shift + 3 == #:
这个指令会把光标处单词在文本中的所有地方全部高亮出来:
而且我们会发现,高亮后光标会处在最后一次出现查找内容的地方。
这个时候我们使用指令n,这个时候光标就会从后往前走到指定内容的位置。如果光标不在单词的开头,那么使用指令n的时候会先跳到单词的头部。
但是很多人会发现,这个高亮好像去除不了。这个解决方法有很多种:
推荐方法:在底行模式下输入noh即可。
6.撤销操作
这个操作其实我们会经常用到。比如我们在vs 2022中写代码的时候,有时候写错了,想回退到一开始写的基础框架上,就会使用左上角的两个键:
这两个键分别是往前回退和往后回退。那么这两个在vim中是如何使用的呢?
如果想要往前回退,就需要使用指令u,这个时候会回退到前面的指令。
使用指令ctrl + r就可以撤销刚刚的u指令。就是上面这两个箭头的对应操作。
这两个指令也是可以前面加数字达到一次性撤销多步的,这里也不再演示。
以上大概就是我们当前需要掌握的在vim的命令模式下的基础指令。
底行模式
底行模式在前面已经初步地介绍过了,在这里就不再过多介绍用法。
我们大概需要知道以下底行指令:
1.保存退出文件
在底行模式下输入以下指令
w(保存当前文件)
q(退出当前文件)
wq (输入「wq」,存盘并退出vim)
q! (输入q!,不存盘强制退出vim)
前面已经经过,这里不再赘述
2.设置编辑器行号:
有时候我们想在命令模式下操作个别行的时候,知道行号是更方便的。
在底行模式下:
输入set nu,其实就是set number的简写,就可以对当前文本编辑行号:
想取消行号也很简单,输入set nonu就可以了。
接下来将再介绍部分底行模式下的指令:
查找功能:
使用指令/关键字或者?关键字,然后系统会把关键字对应的位置高亮标识出来。当然也是按n就可以查找下一个。
但是这两个用的其实比较少,稍微了解一下就可以了。
替换文本:
使用指令%s/dst/src,此时dst的内容全部被替换成src的内容:
使用指令:%s/printf/PRINTF:
我们在底行模式下,也是可以运行Linux的命令行命令的:
输入!ls- l:
此时系统会短暂地”退出“vim然后在当前工作路径下去执行指令。
当然还可以进行多文件的同时编辑:
使用指令:vs new_src,其中new_src是新的文件名:
使用指令vs h1.c,此时页面中会出现多一个文件。即我们刚刚创立的文件。
这里要注意的一个原则就是:当前光标在哪里,操作的就是哪个文件!
而且后创立的文件是先操作的。
使用指令ctrl + w就可以对当前光标从左到右切换文件。有了这些知识后,进行多文件编程就简单多了。
替换模式
这个部分我们来讲一个前面没讲的内容——使用替换模式进行文本替换。
替换模式其实也是vim众多模式的一种,在普通模式下,输入命令shirt + r == R就可以进入替换模式:
切换到替换模式后,底下会显示“REPLACE”字样。
该模式下,我们输入的字符都会把光标处的字符给替换掉。并且替换完后光标会自动地向后移动一个字符的位置:
且可以不断地向后替换。
想要回退到普通模式也是一样的,直接按下万能的Esc键即可。
视图模式
经过上面的一系列操作,我们其实已经对vim的操作有了基本的认识了。但是这里还差一个基本功能,即如果想要自行选中文本的区域来操作怎么办?
就像我们使用鼠标选定一块区域一样,这该如何操作呢?这个时候就要切换到视图模式。在普通模式下,输入ctrl + v就可以进入视图模式,此时我们可以使用hjkl这四个键进行上下左右的移动。这里大部分情况下来说,使用带箭头的上下左右键是没办法操作的。所以建议直接使用hjkl这四个键即可。
使用视图模式再配合插入模式,我们就可以完成对代码的批量化注释了:
进入视图模式下,地下会出现“VISUAL BLOCK”字样。
然后我们可以通过hjkl这四个键进行区域选定:
这个时候,再输入指令shift + i == I,此时就会进入插入模式:
然后这个时候我们只需要再光标位置输入注释符//,再按下Esc,就可以完成批量注释:
这大大地方便了我们对代码进行注释的流程。
当然这里只是简单地讲解了一下批量化注释的用法,视图模式下用法还是蛮多的,但是当前我们只是作为了解。最需要理解的部分还是基础的三个模式。
总结
对于本篇文章所讲内容,可以归为以下操作:
我们大致了解了各个模式的用法,原理以及对应的一些操作。
在这里最后需要说的一句就是,在vim中,很多指令前面是可以配合数字n来使用的,达到一次性操作多行/多个字符的效果。
后序我们需要勤加练习并且能够较为熟练地掌握vim的使用。
使用vim的小技巧
这里提供两个小技巧:
- 确定进入vim时候光标所在的行数:
使用指令vim src +n,就可以进入vim的时候,使光标处在第n行。这个还是很有用的,比如有时候代码报错在第几行,就可以使用这个指令快速定位。 - 使用指令!v,使用这个指令可以快速的查看最近一次使用vim的指令,这样子有时候就不用再自行输入指令了。
vim的配置(了解)
当然,vim的强大之处不仅仅是在于以上那些功能。它还是一个可以进行配置的工具。有时候我们可以看到别的机器上的vim其实是非常好用的,写代码的时候会提供自动搜索,还会提供语法高亮,又或是自动缩进等功能。但是这些都是需要进行手动的配置的。
vim这个工具是我们的云服务器自带的,在在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
但是我们一般不会在这个路径下的vimrc进行配置,因为不是所有的用户需要的配置都是一样的。我们希望的是,不同的用户根据自己的需求去进行自行配置。这个就需要每个用户的主目录下有一个.vimrc的配置文件,这是个隐藏文件。
但是一般来说是没有的(如果没有自行添加)。所以在打开vim的时候,就搜索不到对应的配置文件,所以vim打开的时候就是以默认版本的打开。
我们接下来就简单展示一下怎么样去配置一个vim:
首先,我们要在主目录下建立一个隐藏文件.vimrc:
然后,使用vim把.vimrc打开进行配置,所谓的配置,其实就是修改配置文件里面的信息:
我们使用以下常用的配置信息进行配置:
设置语法高亮: syntax on
显示行号: set nu
设置缩进的空格数为4: set shiftwidth=4
然后我们再使用vim打开代码:
这个时候确实是有对应的配置存在了。
如果还需要一些对应的配置,可以上网搜寻一些常用的配置指令。
但是如果要实现一些自动缩进、代码补全、代码搜索的功能光有这个配置文件也是不够的,还需要我们去下载一些插件,但是下载插件不仅很麻烦,还可能会遇到各种奇奇怪怪的问题。所以这里就不推荐下载插件了。
我们可以直接下一个自动部署工具:
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
直接把这位大佬写的工具下载到我们本地云服务器上。就直接将这个链接复制到主机上然后确认即可。然后等待它自动安装。
注意:这个工具不要在root账户下跑!会出问题。还有就是,这个工具目前只支持centos 7.x系统,其它系统可能需要自行查找对应的工具。
下载完后,会出现多一个install.sh的文件,这就是我们刚刚下的工具。
这个时候我们再使用vim打开代码:
这个时候该有的功能都有了,就很方便了。(这个是把vim配置成写cpp代码的)
当然动手能力强的可以自行手动配置,这个可以自行选择。