【Linux】vim文本编辑器的使用 /2023/知乎推荐 |
您所在的位置:网站首页 › vim编辑器中查找和替换命令 › 【Linux】vim文本编辑器的使用 /2023/知乎推荐 |
一、为什么要学vim 1.原因 2.简单介绍 3.准备工作 二、vim最小集 1.各模式功能 2.编写代码示例 三、vim指令集'>指令集 1.命令模式'>命令模式 1.1光标移动 1.2复制(剪切)粘贴 1.3 撤销 1.4 替换 / 删除/大小写切换 2.底行模式 2.1本文件内操作 2.2文件之间操作 3.插入模式 四、vim配置 1.手动配置 2.自动化'>自动化配置 五、注意事项'>注意事项 一、为什么要学vim 1.原因一般情况下,使用VScode进行本地和远端联合开发即可,那么我们学习Linux里面的编辑器'>编辑器vim的意义何在呢?其实,在面对strong>strong>一些极端情况下strong>strong>,使用vim是必须的,比如软件运行起来了,但是此时发现了一些问题,这些问题可能是配置文件的问题,如果不懂vim,就无法在Linux下立即修改,还要下载一个Vscode链接好再修改,过于麻烦。另一个使用vim的原因就是为了strong>strong>满足常规开发strong>strong>。 2.简单介绍vim有一个前身叫vi,vi/vim的区别简单点来说,它们都是多模式编辑器'>编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作,不仅可以在终端运行,也可以运行于x window、 mac os、windows'>windows。 vim是strong>strong>多模式编辑器'>编辑器strong>strong>,编辑器'>编辑器不难理解,只是编写代码,不提供编译链接生成可执行文件的操作,就和在记事本里面写代码差不多。但是多模式又是指的什么,vim有很多种模式,但是strong>strong>常用的只有三到五种strong>strong>,比如strong>strong>命令模式'>命令模式、插入模式、底行模式、替换模式、视图模式strong>strong>等等。下面将详细讲解vim的使用。 3.准备工作“工欲善其事,必先利其器”要学习vim,首先要确保Linux环境下安装了vim。输入下列命令后回车,如果出现下图显示的样子,就是Linux已经安装了vim编辑器'>编辑器,就不用我们自己安装。 lockquote> vim test.c lockquote>确认安装之后,首先按住键盘上的strong>strong> shiftstrong>strong> 和 strong>strong>冒号strong>strong>,底部会跳出一行,可以输入,strong>strong>输入qstrong>strong>就可以退出。如下: 如果输入strong>strong>vim test.cstrong>strong> 没有出现上述内容,那就是还未安装,就需要strong>strong>手动安装vimstrong>strong>。在root账户下,输入下列命令,就可以安装vim。当然安装完也可以使用上面的方法测试一下。 lockquote> yum install -y vim lockquote> 二、vim最小集 1.各模式功能 正常/普通/命令模式'>命令模式(Normal mode) lockquote> 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode lockquote> 插入模式(Insert mode) lockquote> 只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行'>命令行模式'>命令行'>命令行模式。该模式是我们后面用的最频繁的编辑模式。 lockquote> 底行模式(last line mode) lockquote> 文件保存或退出,也可以进行文件替换,找字符串'>字符串,列出行号等操作。 在命令模式'>命令模式下, shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入 span style="color:#c21c13;">span style="color:#c21c13;"> help vim-modes span>span> span style="color:#080f17;">span style="color:#080f17;">。span>span> lockquote>这三种模式span style="color:#c21c13;">strong>strong>span style="color:#c21c13;">strong>不是任意切换strong>span>strong>strong>span>的。任何模式都需要通过命令模式'>命令模式来切换。假设现在处于插入模式,但是我想要切换到底行模式,这是不可以直接切换的,要先进入命令模式'>命令模式,才可以切换到底行模式。 2.编写代码示例来个简单例子: 1.如下,直接键入 vim test.c 。如果当前目录下有这个文件,它就会打开,如果没有,就会自动创建。 2.span style="color:#4d4d4d;font-size:16px;">直接进入如下界面,这是vim的命令模式'>命令模式。此时是无法对文本进行编辑的。所以想要写代码,需要进入插入模式。span> 3.按一下键盘上的字母span style="color:#c21c13;">strong>strong>span style="color:#c21c13;">strong> i strong>span>strong>strong>span> 键,就可以进入插入模式,如下红色圆圈里的内容,明显看到变成了 “INSERT” 这就代表插入模式,此时可以进行代码的编写。 4.span style="color:#4d4d4d;font-size:16px;">编写一个最简单的C语言代码。如下,看到左下方,编写完依旧是插入模式。span> 5.此时我写好了代码,想要退出,但是退出需要进入底行模式才可以。所以,我要strong>strong>先回到命令模式'>命令模式strong>strong>,再strong>strong>由命令模式'>命令模式进入底行模式strong>strong>。按一下键盘上的span style="color:#c21c13;">strong>strong>span style="color:#c21c13;">strong> Escstrong>span>strong>strong>span> 即可strong>strong>从插入模式回到命令模式'>命令模式strong>strong>。如下图,看左下角,明显已经没有了“INSERT”,现在就是命令模式'>命令模式。 6.从命令模式'>命令模式进入插入模式,需要同时按住span style="color:#c21c13;">strong>strong>span style="color:#c21c13;">strong> shift : strong>span>strong>strong>span>span style="color:#080f17;">span style="color:#080f17;">才可以(shift键和冒号键)。如下,左下角出现了一个冒号和绿色光标,说明进入了底行模式,此时可以输入一些命令。span>span> 输入 span style="color:#c21c13;">strong>strong>span style="color:#c21c13;">strong>wq strong>span>strong>strong>span>并 span style="color:#c21c13;">strong>strong>span style="color:#c21c13;">strong>回车strong>span>strong>strong>span> ,就可以退出vim。其中strong>strong> w表示保存文件'>保存文件strong>strong>,strong>strong>q表示退出文件strong>strong>,因为我们对文件进行了修改,所以肯定要保存。然后使用 cat 指令查看test.c 这个文件,如下图,可以看到刚才的代码编写成功。 上面的内容就是使用vim创建/打开一个文件,并进行编写代码,保存退出的过程。可以使用下图简单地概括各个模式的进入和退出。同时也有几个注意事项'>注意事项 lockquote> 1.如果不知道自己在什么模式下面,无脑 Esc 2.编写完代码,一般需要保存再退出 lockquote>注意,这里所讲解的一切指令,都需要在span style="color:#c21c13;">strong>strong>span style="color:#c21c13;">strong>命令模式'>命令模式strong>span>strong>strong>span>之下,否则不成立。如果不确定自己是不是再命令模式'>命令模式下,无脑 span style="color:#c21c13;">strong>strong>span style="color:#c21c13;">strong>Escstrong>span>strong>strong>span> 就会退回到命令模式'>命令模式。 1.1光标移动光标移动大部分情况下需要行号显示,所以可以先看下面的底行模式第一个指令,显示行号。 cellspacing="0">thead>span="1" rowspan="1" style="vertical-align:top;width:340px;">指令 span="1" rowspan="1" style="vertical-align:top;width:360px;">作用 thead>span="1" rowspan="1" style="vertical-align:middle;width:340px;">h 或 左方向键(←) span="1" rowspan="1" style="vertical-align:middle;width:360px;">光标向左移动一个字符 span="1" rowspan="1" style="vertical-align:middle;width:340px;">l 或 右方向键(→) span="1" rowspan="1" style="vertical-align:middle;width:360px;">光标向右移动一个字符 span="1" rowspan="1" style="vertical-align:middle;width:340px;">k 或 上方向键(↑) span="1" rowspan="1" style="vertical-align:middle;width:360px;">光标向上移动一个字符 span="1" rowspan="1" style="vertical-align:middle;width:340px;">j 或 下方向键(↓) span="1" rowspan="1" style="vertical-align:middle;width:360px;">光标向下移动一个字符 span="1" rowspan="1" style="vertical-align:top;width:340px;">gg span="1" rowspan="1" style="vertical-align:top;width:360px;">将光标定位到文档最开始 span="1" rowspan="1" style="vertical-align:top;width:340px;">Shift g span="1" rowspan="1" style="vertical-align:top;width:360px;">将光标定位到文档最末尾 span="1" rowspan="1" style="vertical-align:top;width:340px;">n Shift g span="1" rowspan="1" style="vertical-align:top;width:360px;">将光标定位到第 n 行 span="1" rowspan="1" style="vertical-align:top;width:340px;">Shift 4 span="1" rowspan="1" style="vertical-align:top;width:360px;">将光标定位到当前行的末尾 span="1" rowspan="1" style="vertical-align:top;width:340px;">Shift 6 span="1" rowspan="1" style="vertical-align:top;width:360px;">将光标定位到当前行的开始 span="1" rowspan="1" style="vertical-align:top;width:340px;">w / n w span="1" rowspan="1" style="vertical-align:top;width:360px;">向后移动1个单位/ 向后移动n个单位(以单词为单位) span="1" rowspan="1" style="vertical-align:top;width:340px;">b / n b span="1" rowspan="1" style="vertical-align:top;width:360px;">向前移动1个单位/ 向前移动n个单位(以单词为单位) 这里可能会比较疑惑,为什么光标移动要使用 h j k l ,而不是使用上下左右。这是因为,strong>strong>vim很多操作是为了更高的效率strong>strong>,在vimstrong>strong>刚刚设计strong>strong>的时候(几十年前),strong>strong>键盘是没有上下左右的strong>strong>,所以是strong>strong>根据当时键盘的特点来设计的strong>strong>。当然,后来兼容了上下左右,所以我们也可以使用上下左右来移动。但是使用h j k l ,效率会更高,毕竟手不需要再移动下去。 展示一下上面提及的几个指令,当然一些非常简单的就不展示了。注意,span style="round'>background-color:#c6eadd;">span style="color:#c21c13;">strong>strong>span style="round'>background-color:#c6eadd;">span style="color:#c21c13;">strong>Shift是指键盘右下角的Shiftstrong>span>span>strong>strong>span>span>,不要再键盘里打出一个Shift。 span style="color:#080f17;">span style="color:#080f17;">指令span>span> span="1" rowspan="1" style="vertical-align:top;width:355px;">span style="color:#080f17;">span style="color:#080f17;">作用span>span> thead>span="1" rowspan="1" style="vertical-align:top;width:342px;">yy / n yy span="1" rowspan="1" style="vertical-align:top;width:355px;">复制整行/ 复制当前行及以下的 n 行 span="1" rowspan="1" style="vertical-align:top;width:342px;">dd / n dd span="1" rowspan="1" style="vertical-align:top;width:355px;">剪切当前行 / 剪切当前行及以下的n行 span="1" rowspan="1" style="vertical-align:top;width:342px;">p / n p span="1" rowspan="1" style="vertical-align:top;width:355px;">粘贴复制的内容 / 粘贴n遍复制的内容 span="2" rowspan="1" style="vertical-align:top;width:697px;">如果只剪切,不粘贴,就相当于删除 这几个指令比较容易,自己尝试一下即可。 1.3 撤销 cellspacing="0">thead>span="1" rowspan="1" style="vertical-align:top;width:339px;">指令 span="1" rowspan="1" style="vertical-align:top;width:359px;">作用 thead>span="1" rowspan="1" style="vertical-align:top;width:339px;">u span="1" rowspan="1" style="vertical-align:top;width:359px;">撤销 span="1" rowspan="1" style="vertical-align:top;width:339px;">Ctrl r span="1" rowspan="1" style="vertical-align:top;width:359px;">对撤销进行撤销 注意,在vim中,即使在底行模式下,使用 w 指令保存编辑的内容,也是可以进行撤销的。但是,如果进行了修改,然后使用 q 指令退出了,那么重新进去之后,是无法进行撤销的。 插销就不演示了,就和word等等里面撤销一摸一样。 1.4 替换 / 删除/大小写切换 cellspacing="0">thead>span="1" rowspan="1" style="vertical-align:top;width:339px;">指令 span="1" rowspan="1" style="vertical-align:top;width:359px;">作用 thead>span="1" rowspan="1" style="vertical-align:top;width:339px;">r / n r span="1" rowspan="1" style="vertical-align:top;width:359px;">替换一个字符 / 替换 n 个字符 span="1" rowspan="1" style="vertical-align:top;width:339px;">shift r span="1" rowspan="1" style="vertical-align:top;width:359px;">进入替换模式 span="1" rowspan="1" style="vertical-align:top;width:339px;">x / n x span="1" rowspan="1" style="vertical-align:top;width:359px;">删除一个字符/删除n个字符(向后删) span="1" rowspan="1" style="vertical-align:top;width:339px;">shift x / n shift x span="1" rowspan="1" style="vertical-align:top;width:359px;">同上,向前删 span="1" rowspan="1" style="vertical-align:top;width:339px;">shift ~ span="1" rowspan="1" style="vertical-align:top;width:359px;">快速进行字符'>单个字符的大小写切换(向后) 一些示范,注意 r 操作后面跟的是想要换成什么字符,比如 rw 就是把当前光标的字符换成 w 。 进入底行模式只有一种方法,那就是在命令模式'>命令模式下按 strong>strong>shift :strong>strong> 进入。该模式下也有一些实用功能。 2.1本文件内操作 cellspacing="0">thead>span="1" rowspan="1" style="vertical-align:top;width:338px;">指令 span="1" rowspan="1" style="vertical-align:top;width:365px;">作用 thead>span="1" rowspan="1" style="vertical-align:top;width:338px;">set nu / set nonu span="1" rowspan="1" style="vertical-align:top;width:365px;">显示行号 / 取消显示行号(nu是number的意思) span="1" rowspan="1" style="vertical-align:top;width:338px;">/ key span="1" rowspan="1" style="vertical-align:top;width:365px;">搜索单词,并且高亮显示(key可以是任意单词) span="1" rowspan="1" style="vertical-align:top;width:338px;">w span="1" rowspan="1" style="vertical-align:top;width:365px;">written,保存 span="1" rowspan="1" style="vertical-align:top;width:338px;">q span="1" rowspan="1" style="vertical-align:top;width:365px;">quit,退出 span="1" rowspan="1" style="vertical-align:top;width:338px;">wq span="1" rowspan="1" style="vertical-align:top;width:365px;">保存并退出 span="1" rowspan="1" style="vertical-align:top;width:338px;">! span="1" rowspan="1" style="vertical-align:top;width:365px;">强制操作,w!,q!,wq! 分别表示强制保存,强制退出,强制保存并退出 span="1" rowspan="1" style="vertical-align:top;width:338px;">!命令行'>命令行操作 span="1" rowspan="1" style="vertical-align:top;width:365px;">可以在不退出vim的情况下,执行命令行'>命令行操作,比如编译、运行、查看文件等等 span="1" rowspan="1" style="vertical-align:top;width:338px;">%s///g span="1" rowspan="1" style="vertical-align:top;width:365px;">将第一个斜杠和第二个斜杠之间的内容,替换成第二个斜杠和第三个斜杠之间的内容,全部替换 值得注意的是,如果对一个文件没有写的权限,那么即使 按strong>strong>wq!strong>strong>强制保存,也是无法保存的,span style="color:#c21c13;">strong>strong>span style="color:#c21c13;">strong>必须要对文件有写的权限才可以保存strong>span>strong>strong>span>。 再看一个编译并执行文件的操作,其中有需要注意的地方。如下图,左边中间部分,代码是错误的,编译报错,我strong>strong>修改完文件strong>strong>之后,strong>strong>直接进行gcc编译strong>strong>,但是依然报错,而且strong>strong>报错还和上一次报错一样strong>strong>。此时就很疑惑,想到可能是strong>strong>没有保存strong>strong>,然后strong>strong>先保存,再编译strong>strong>,就通过了,如右边所示。 lockquote> 要对一个文件编译,首先必须要先保存,否则编译的是上一次保存的文件。可能会造成错误。 lockquote>width="1200"/> 再演示一下单词替换。 底行模式下,可以创建一个新文件,并且分屏操作。切换被操作的文件需要在span style="round'>background-color:#c6eadd;">span style="color:#c21c13;">strong>strong>span style="round'>background-color:#c6eadd;">span style="color:#c21c13;">strong>命令模式'>命令模式strong>span>span>strong>strong>span>span>下,但是放在这里将会比较好一点,下面有标注。 cellspacing="0">thead>span="1" rowspan="1" style="vertical-align:top;width:341px;">指令 span="1" rowspan="1" style="vertical-align:top;width:378px;">作用 thead>span="1" rowspan="1" style="vertical-align:top;width:341px;">vs test.h span="1" rowspan="1" style="vertical-align:top;width:378px;">创建一个名为test.h 的文件,当然文件名可以是其他任意,自己取 span="1" rowspan="1" style="vertical-align:top;width:341px;">(命令模式'>命令模式下)Ctrl w / Ctrl ww span="1" rowspan="1" style="vertical-align:top;width:378px;">切换被操作的文件 在vimstrong>strong>分屏的情况strong>strong>下,span style="round'>background-color:#c6eadd;">span style="color:#c21c13;">strong>strong>span style="round'>background-color:#c6eadd;">span style="color:#c21c13;">strong>光标在哪里,就在编写哪一个文件strong>span>span>strong>strong>span>span>。 先在strong>strong>底行模式strong>strong>下输入 vs test.h 并回车,就会出现如下界面。根据图中strong>strong>底部圆圈strong>strong>的地方,我们可以知道左边是test.h 文件,右边是test.c 文件;根据strong>strong>顶部圆圈strong>strong>可以知道,光标在左边,那么我们现在编辑的就是test.h 文件。 进行编写代码,如下,编写完成之后,span style="round'>background-color:#c6eadd;">span style="color:#c21c13;">strong>strong>span style="round'>background-color:#c6eadd;">span style="color:#c21c13;">strong>两个文件都要使用w指令保存strong>span>span>strong>strong>span>span>。先在test.h 里面进入底行模式,保存test.h。再使用Ctrl ww 跳转到test.c 文件,保存test.c 。然后直接编译,如下。 编译完成之后,会自动生成'>自动生成一个a.out 课执行文件,底行模式下输入span style="color:#c21c13;">strong>strong>span style="color:#c21c13;">strong> !./a.outstrong>span>strong>strong>span> 运行该可执行文件。结果如下图。 当然,可以多次 vs file ,创建多个文件,但是一般情况下,strong>strong>分屏有两三个文件最多了strong>strong>,再多也影响阅读体验。如果想要strong>strong>退出当前分屏strong>strong>,strong>strong>底行模式下输入 wq 即可strong>strong>(当然输入q就足够了,输入wq只是为了养成良好的习惯,保存并退出,避免修改了没保存)。 3.插入模式进入插入模式有方法'>多种方法,除了下面说到三种,当然也还有其他一些。 cellspacing="0">thead>span="1" rowspan="1" style="vertical-align:top;width:340px;">指令 span="1" rowspan="1" style="vertical-align:top;width:370px;">作用 thead>span="1" rowspan="1" style="vertical-align:top;width:340px;">i span="1" rowspan="1" style="vertical-align:top;width:370px;">直接进入插入模式 span="1" rowspan="1" style="vertical-align:top;width:340px;">a span="1" rowspan="1" style="vertical-align:top;width:370px;">光标向右移动一个字符,并进入插入模式 span="1" rowspan="1" style="vertical-align:top;width:340px;">o span="1" rowspan="1" style="vertical-align:top;width:370px;">新起一行,并进入插入模式 插入模式没有其他什么特别的指令好讲的,直接编代码就完事儿。 四、vim配置直接使用vim编辑器'>编辑器,会感觉非常麻烦,没有自动不全,行号,错误检测等等。所以我们要对vim进行一些配置。 1.手动配置vim在启动的时候,会自动在当前用户的目录下,寻找配置文件,如果没有,就是默认。什么是当前用户的目录?如下图,strong>strong> /home/username strong>strong> 就是当前用户的目录,home文件夹里面的用户文件夹。每span style="color:#c21c13;">strong>strong>span style="color:#c21c13;">strong>一个用户对应一个vim配置文件strong>span>strong>strong>span>。 如下图,自己创建一个strong>strong>.vimrc strong>strong>文件,这就是配置文件,但是strong>strong>它是隐藏的strong>strong>,直接使用ll指令看不见。 我们使用vim打开.vimrc这个文件,进行编辑。然后上网搜索vim配置,有很多的材料可以帮助了解,和vscode类似的。比如strong>strong>set nu strong>strong>就是设置strong>strong>行号显示strong>strong>,strong>strong>set cursorline strong>strong>是设置strong>strong>高亮当前行strong>strong>。如下图 当然,更多配置资料网上也有,这里也就不详细展开了,.vimrc 配置文件里面也是可以注释的,strong>strong>注释符号是 " (双引号)strong>strong>。比如下方的配置资料就是百度上面查询的: 自动化'>自动化配置就很舒服,在一些开源网站上面取搜索vim即可,比如Gitee,GitHub等等,上面也有详细的方法'>使用方法,很便捷。 五、注意事项'>注意事项 在vim编辑器'>编辑器里面,不要使用鼠标左右键和滑轮进行定位。在一个文件里编写完代码,想要编译,一定要进入底行模式先保存,否则它编译的是修改前的代码。vim里各种模式不可以任意切换,一定是从命令模式'>命令模式进入其他模式。如果不知道自己在什么模式,无脑Esc退回命令模式'>命令模式。vim配置文件里面的注释符号是双引号。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |