Bootstrap

【Linux开发】vim编译器的基本用法

1 导入

​ 我们知道,Linux下的所有操作都可以是看做对文件执行的,开发过程中也常常涉及到对于文件的编辑。而在正常电脑或虚拟机进行Linux开发时,要编辑一些文本文件,往往采用系统默认的文本编辑器打开(双击或 gedit 命令),由于有图形化的界面,修改十分方便。但在嵌入式Linux开发中,由于相关资源有限,更直接的是,在纯命令行环境的服务器或者嵌入式设备中,并没有图形化桌面的环境,只能使用vim编辑器。

2 vim编辑器的使用方法

2.1 打开文件

       在命令行下使用vim编译器非常简单,只需要使用vi命令加文件名即可,注意不是vim!,如下图所示要打开桌面下这个关于 petalinux 的 pinctrl 子系统的文档:

在这里插入图片描述

       就可以使用以下命令打开:

vi xlnx,zynqmp-pinctrl.txt

       值得注意的是,可以在 vi 命令的后面加上 +行号 在打开文件时,让初始光标直接跳转到对应的行数,当我们知道需要修改/编辑的内容的行号时,是非常方便的,向下面命令,即是跳转到对应文件的第40行:

vi xlnx,zynqmp-pinctrl.txt +40

       需要注意的是,如果当前目录没有对应的文件,则该命令会创建一个这样的文件。打开后,在命令行显示效果大概如下图所示:

在这里插入图片描述

2.2 编辑文件

       对于vim编辑器,韦东山老师总结的比较好,可以认为其有三种模式:一般模式、编辑模式和命令行模式,如下图所示:

在这里插入图片描述

       而我们上面 2.1 中使用 vi 命令进入的,就是一般模式,之后的所有操作都以此为基础。当不清楚现在的vim编辑器处于什么模式时,我们都可以通过 ESC 键(可以多按,一般模式下 ESC 无效)回退到一般模式,由此再进行操作

2.2.1 一般模式

       编辑文本以光标所在位置为基础,一般模式下,主要完成光标的移动。在一般模式下,最简单的,可以通过键盘上的方向键以及鼠标滚轮移动光标。方向键是在对应方向上移动一个位置,而鼠标滚轮则对应于上下方向的连续移动。

       通过方向键即可完成最为基本的文档编辑,但它的效率相对较低,比如一个文件有几千行,我们需要修改中间的某些具体内容,如果只是通过编辑模式配合方向键或鼠标移动光标,则搜寻效率会极低。下面介绍一些快速移动光标位置的方法,以下操作均在一般模式下完成。

2.2.1.1 显示与隐藏行号

       大部分时候,显示出行号,可以方便我们查找与阅读内容。

       输入冒号(:),再输入 “set number” ,再按下回车,即显示行号,相对应的,隐藏行号即将其中的 “set number” 改为 “set nonumber”

2.2.1.2 跳转到某一位置

       输入冒号(:),再输入需要跳转的行号 ,再按下回车,可以跳转到文件的某一行。

       特别地,也有 3 种常用的特殊的情况提供了快捷键:

       G:跳转到文件结尾(注意大写!)(这里另外提一个小技巧,在小写状态下按 shift + 对应字母也可以达到切换大写再按的效果);
       0:跳转到光标所在行的行首
       $:跳转到光标所在行的行尾

2.2.1.3 翻页

       但是很多时候,我们不知道需要跳转到哪一行,为了快速查找,就要用到翻页。

       翻页分为向前翻页(ctrl + f)和向后翻页(ctrl + b),这里建议与英文进行关联比较好记( forward 和 back )。这里需要注意一下,这里的前和后是以行号为基础的,即向前翻页对应行号减小向后翻页对应行号增加

2.2.1.4 复制与粘贴

       在一般模式下,输入 yy ,即可复制当前行;对应的,使用 nyy 可以复制从光标所在行算起往下的共 n 行。这里的 y 指的是 yank (复制)。

       粘贴则是在一般模式下,输入 p ( paste 粘贴),会在光标所在行的下一行粘贴复制的所有内容。

2.2.1.5 查找与替换操作

       很多情况下,我们需要把文档中的某些已知内容修改为别的内容。

       首先需要是查找,在一般模式下,先输入 / (注意方向),再输入需要查找的字符,再按回车即可。在显示查找的内容后,按 n 是往后继续查找,按 N 则是返回上一个查找内容

       而替换则有固定的格式:

:%s/被替换的内容/替换的内容/g			不确认,直接完成替换
:%s/被替换的内容/替换的内容/gc			系统会让我们确认每个被替换的内容是否需要被替换掉

       这里的 s 表示 substitute ,即替换的意思;g 表示 global,即全局搜索的意思;c 则表示 confirm,即需要确认的意思。

2.2.2 编辑模式

​       编辑模式主要用来修改文本的内容

2.2.2.1 插入操作

       通过输入键盘上的 **i 键(i 取自 insert)**在光标所在处插入内容或者 a 键(a 取自 after)在光标后面插入内容。(需要注意大小写!)这里可能会有疑问,**什么叫做光标所在处呢?**如下图所示,此时的光标位于最后一段文字的 name 的首字母 n 上。

在这里插入图片描述

​       此时先按 i 键,再输入字母 a ,效果如下图所示:

在这里插入图片描述

​       而若是先按 a 键,再输入字母 a ,效果如下图所示:

在这里插入图片描述

       由上可知,所谓的光标所在处,可以直接理解为 i 即在光标所指的内容前一单位插入,而 a 即在光标所指的内容后一单位插入。由此,大家再根据自己的习惯使用 i 或者 a 进行插入。

       如果是要增加新行,可以使用 o ,它会在光标所在行的下方新增一行。

2.2.2.2 删除操作

       在进入编辑模式后,如果想要删除一个字母,应该先按 ESC 退出编辑模式,再用光标选中要删除的字母,按下 x 键删除,而不要使用 backspace键 或者 Delete键。更特别的,输入 dd 可以删除整行,输入 ndd 可以删除当前行及其后的 n - 1 行(总共是 n 行)。

       特别的,如果需要删除某个英文单词(多个字母),可以在一般模式下输入 dw 。不过这里要注意是要让光标指向首字母,否则会删除光标所在处字母及其后面的该单词的其他字母,并与下一个单词保持一个空格的距离。而要删除包括光标所在位置的该行以后所有内容,可以输入 D(可以使用 shift + d )。

2.2.2.3 撤销操作

       如果修改不当,需要进行撤销,可以按 u 键撤销上一步的操作。需要注意的是,这里的撤销不仅对编辑模式下的修改有用,也对一般模式下的修改有用。

       在编辑模式下,需要注意,不要试图使用方向键调整光标位置,否则会等效于在光标所在行的上面一行插入大写字母 ABCD 加回车换行,如有需要需退出到一般模式再移动光标。

2.2.3 命令行模式

       在编辑模式下的修改,还并不能保存下来,命令行模式主要用以保存与退出

       命令行模式都以冒号(:)开头,在一般模式下输入 : 则认为是命令行模式,在命令行模式下,可以输入各式各样的命令,它们多以一个小写字母表示,常用的命令列表如下:

命令作用
w保存文档(理解为写入 write)
q退出(quit)
q!退出,但不保存文档
x保存当前文档并且退出

       其他的命令用的较少,当然,其实前面介绍的文本查找替换也是一种命令,至于其他的一些命令,则需要大家有需要的自己去了解了。

3 参考资料

       1,韦东山老师 IMX6ULL Pro的相关教程

       2,DeepSeek搜索结果

       3,《嵌入式Linux系统原理与应用》 王剑等

;