写点什么

嵌入式 Linux 入门(四、Linux 下的编辑器 — 让人爱恨交加的 vi )

作者:矜辰所致
  • 2022-10-24
    江苏
  • 本文字数:5397 字

    阅读完需:约 18 分钟

嵌入式 Linux 入门(四、Linux 下的编辑器 — 让人爱恨交加的 vi )
大家好,是矜辰所致,嵌入式 Linux入 门第四课,了解 Linux 下的编辑器,掌握 vi 编辑器的使用。
复制代码


前言

前面几篇文章学习了 Linux 的文件系统,以及常用 Shell 命令,我们学习 Linux 的使用,离不开文本编辑,本文就要来学习了解 Linux 下的编辑器及其使用方法。


本文主要在于说明 Linux 中一个重要的编辑器 - Vi 编辑器的操作使用。


vi 编辑器,有人爱他,因为在所有的 linux 系统中,都有他的存在,使得维护人员可以抛开图形化界面,进行代码编辑;


vi 编辑器,有人恨他,因为脱离了大部分人习惯的图形化界面编辑习惯,纯指令形式的编辑方式,让新人望而却步。


本文带你认识这个让人又爱又恨的 它,希望它不再是你 Linux 学习道路上的绊脚石,而变成你以后的指明灯!...... by 矜辰所致


嵌入式 Linux 入门系列博文:

嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)

https://xie.infoq.cn/article/1adbc03be480d8203f8b1ed4a

嵌入式 Linux 入门(二、Linux 文件系统、文件类型及权限管理)

https://xie.infoq.cn/article/4d2e926fda47f2eff019ae0e4

嵌入式 Linux 入门(三、Linux Shell 及常用命令说明)

https://xie.infoq.cn/article/b25c452df449abc1806ba446a

一、Linux 下的编辑器

在我们安装的 Ubuntu 中,自带的编辑器有 gedit 编辑器 和 vi 编辑器。

1.1 gedit 编辑器

gedit 是一个窗口式的编辑器,和 windows 下面的记事本类似。


我们直接使用 shell 命令 打开 gedit 编辑器:


gedit < 文件名>
复制代码


如图:



使用方法也和记事本类似,使用起来也简单,gedit 编辑器也不是本文所介绍的重点,所以只是简单提一下。


要注意的是,gedit 是一个窗口式的编辑器,只能在 Ubuntu 桌面环境下使用 。

1.2 Vi 编辑器

除了 gedit 编辑器 ,Linux 还自带了一个 vi 编辑器。


所有的 Unix Like 系统都会内建 vi 编辑器,其他的文书编辑器则不一定会存在。


vi 是一个命令,也是一个命令行下的编辑器。


我们使用如下命令打开 vi 编辑器:


vi < 文件名>
复制代码



对于接触过 Linux 的人来说, vi 编辑器是一个绕不开的话题。很多初学者学习 Linux 最头大的一件事情就是学习 Vi 编辑器,因为 vi 操作完全脱离鼠标,选择一整大段代码中间都一部分,也是通过键盘定位。对于大部分人来说,都习惯了图形界面编辑器,在终端模式下面编辑实在是难以下手。


vi 编辑器这么难上手,而且现在跨平台的编辑器很多,比如我们现在常用的 Vscode,那么为什么所有的 Linux 学习教学都会讲解 vi 编辑器的使用?

1.3 学习 Linux 为什么一定要学 Vi ?

总的来说,有 2 点最重要的原因:


1、如上文所言,vi 是最基本的文本编辑器,每个 Linux 发行版都会自带 vi,其他的编辑器不一定存在。


2、 就像我们必须学习 Shell 指令一样,在很多运行 Linux 的嵌入式设备或者服务器调试的时候,并没有 GUI 形式的编辑工具,但是一定会有 vi 。


而且当我们真正熟练掌握 vi 的使用后,在以后对文件做些简单修改时,使用 vi 命令的效率非常高,学会它后能使得我们在 Linux 的世界里畅行无阻。

1.4 vi 与 vim

说 vi ,基本上都是与 vim 一同说明,那么 vi 与 vim 有什么关系?


它们都是多模式编辑器,不同的是 vim 是 vi 的升级版本,它不仅兼容 vi 的所有指令,而且还有一些新的特性在里面,vim 是从 vi 发展出来的一个文本编辑器。


简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具,vi 和 vim 都是 Linux 中的编辑器,不同的是 vim 比较高级,可以视为 vi 的升级版本。vi 适用于文本编辑,但是 vim 更适用于 coding 。


vi 与 vim 的区别:


  • vim 是 vi 的升级版本,兼容 vi

  • vi 里,按 u 只能撤消上次命令,而在 vim 里可以无限制的撤消

  • vi 只能运行于 unix 中,而 vim 不仅可以运行于 unix,windows ,mac 等多操作平台

  • vim 可以用不同的颜色来加亮你的代码


那么有些小伙伴问过我,所有的 Linux 系统都自带 vi,但是不一定带 vim ,那么为什么还能放在一起讲解 ?


  1. 在 Linux 中,vim 完全兼容 vi,他们的操作指令完全一样;

  2. 在系统中,你使用的 vi 指令调用的程序,可能是 vi 也可能是 vim,就是对于 Linux 系统而言,他们是兼容的而且是一样的东西,有升级版本的 vim 就用 vim,没有就使用自带的 vi;

  3. 现在开发都会安装 vim,即便没有图形化界面,安装 vim 也并不是问题,使用sudo apt install vim

  4. 一般情况,我们都可以把 vim 当成 vi 来使用。你别管他是 vi 还是 vim,你就当做 vi 学,反正到时候不管是 vi 还是 vim 都一样用。


比如,在我安装的 ubuntu 虚拟机中,使用 vi 版本查看指令 vi -v 查看 vi 版本,显示的信息可能就是 vim 编辑器版本(如果系统中装过 vim 的话):



因为很早前我应该已经安装了 vim,那么除了上面看版本,还有什么方式判断我使用的 vi 是那个程序呢?


我们可以通过查看 vi 文件的源头来判断使用的是那个程序(文件):



说了这么多,也就是为了说明为什么所以市面上大部分教学说明都是把 vi 和 vim 放一起,我们在以后没有特殊说明,也不会刻意去区分它们,也会把他们放在一起说明。

二、vi/vim 编辑器使用说明

本文的重点,就是要学会使用 vi/vim 编辑器,刚开始觉得很难受是正常的,记不住也没有关系。切记 vi/vim 编辑器使用的学习不是靠背,而是靠练,靠用!


我们通过 vi 文件名 指令打开 vi 编辑器,执行该指令,如果有对应文件则直接打开,如果没有就会创建新文件然后打开,比如:



对于初学者,可能到了上图的界面之后,都不知道怎么操作,按键也没有反应,可能都无法退出界面。


所以首先,我们要先说明一下 vi/vim 编辑器的模式。

2.1 vi 编辑器模式

vi 编辑器有 3 个模式:


  • 命令行模式 (command mode/一般模式)

  • 文本输入模式 (input mode/编辑模式)

  • 底线命令模式 (lastline mode/指令列命令模式/末行模式)

2.1.1 命令行模式 (command mode/一般模式)

我们启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被 vi 识别为命令,而非输入字符


任何时候,不管用户处于何种模式,只要按一下 “ESC” 键,即可使 vi 进入一般模式/命令函模式。


在该模式下,用户可以输入各种合法的 Vi 命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的 vi 命令,则 vi 在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是 vi 的合法命令,Vi 会响铃报警。


以下是常用的几个命令:


i 切换到输入模式,以输入字符。x 删除当前光标所在处的字符。: 切换到底线命令模式,以在最底一行输入命令。
复制代码

2.1.2 文本输入模式 (input mode/编辑模式)

在命令模式下输入插入命令i(insert)、附加命令a (append)、打开命令o(open)、修改命令c(change)、取代命令r或替换命令s都可以进入文本输入模式。


在该模式下,用户输入的任何字符都被 vi 当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按 ”ESC” 键即可。


在输入模式中,可以使用以下按键:


字符按键以及Shift组合,输入字符ENTER,回车键,换行BACK SPACE,退格键,删除光标前一个字符DEL,删除键,删除光标后一个字符方向键,在文本中移动光标HOME/END,移动光标到行首/行尾Page Up/Page Down,上/下翻页Insert,切换光标为输入/替换模式,光标将变成竖线/下划线ESC,退出输入模式,切换到命令模式
复制代码

2.1.3 底线命令模式 (last line mode/指令列命令模式/末行模式)

在一般模式/命令模式下按下:(英文冒号)就进入了底线命令模式。


此时 vi 会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。


按 ”ESC” 键可随时退出底线命令模式。


多数文件管理命令都是在此模式下执行的,末行命令执行完后,vi 自动回到命令模式。


底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。


在底线命令模式中,基本的命令有(已经省略了冒号):


q 退出程序w 保存文件
复制代码

2.1.4 模式切换示意图

在网上找了几个比较典型的工作模式说明图,因为网图已经说得很直观,这里就没必要自己再画图了:



下图是百问网的 Linux 教学资料中的 vi 操作示意图:


注意:图中应该是为了帮助新手更明显的区分不同模式,所以使用了一般模式 代表 命令行模式。命令行模式 代表底线命令模式/ 末行模式/ 指令列命令模式。



对于模式的名字,新手需要多注意一下,因为不同的教程可能使用的名字不太一样,需要有自己的一套记忆方式,最好是通过上面各个模式的介绍自己去理解一下各个模式的不同。


当不知道处于何种模式时,按 ESC 键返回到一般模式,多按几次也没有问题。

2.2 vi 编辑器使用步骤示例

虽然我们还没有详细的介绍操作指令,但实际上最常用的操作也就那么几步,我们通过上文的介绍,来进行一次完整的 vi 编辑器使用。


1、首先进入想进行测试的文件夹,然后使用 vi 文件名命令创建一个新的文件:



2、通过上面的学习我们知道上图是在一般模式下面,我们可以是用 “i” 进入到文本输入模式:



在编辑模式当中,你可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮了,所以你可以进行任何的编辑,比如:



在编辑模式下,使用删除键(Backspace)删除字符。使用箭头键移动光标。


3、那我们的本文编辑完成了以后,我们要保存退出,首先得退出编辑模式。


按下 ESC 按钮回到一般模式:



4、先别着急保存退出,假如这个时候我们发现编辑有点问题,多敲了几个字母,我们可以回到文本输入模式使用删除键(Backspace)删除字符;


还有一种方式,在一般模式下时,使用“x”删除光标所在的字符,如下图:



5、修改完毕,最后在一般模式中按下 :wq 储存后离开 vi 。


“:” 表示进入命令行模式,“wq”表示“write and quit”,即写入并退出。如果不想保存则可以输入“:q!”,它表示“退出、不保存”。



至此,我们就使用 vi 编辑器成功的创建了一个文件。


6、最后我们可以查看验证一下,如下图:



本节展示了一个完整的 vi 编辑器创建了新文件的示例,对于初学者,有必要自己实际操作一次,然后同时结合上面不同模式的说明,能更加的快速的学会简单的基本使用。

2.3 vi 按键操作说明

除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用。当然我们这里也只是把最常用的操作说明,更多的操作下一小节有图示,有推荐资料;同时,因为是编辑器,我们本节也只介绍操作按键,实际的效果还得靠自己多测试。

2.3.1 从一般模式 进入 编辑模式

当我们在一般模式,想进入文本编辑模式,操作键如下表说明:



上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。


--INSERT-- 我们前面讲过就是插入模式,--REPLACE-- 就是替换模式。


在我们想要编辑本文的时候,一定要在左下角处看到 INSERT(插入) 或 REPLACE (替换)才能输入!


对于上面的 rR,测试结果如下:


使用大写的 R:



使用小写的 r:



进入编辑模式式之后,就可以正常地编辑文本了,使用方向键来移动光标,回车键进行换行,操作方式与 Windows 记事本一样。

2.3.2 从一般模式 进入 底线命令模式

当我们在一般模式,按下键盘的冒号键 “:” 就进入了底线命令模式。


操作键如下表说明(下面的指令都是基于在一般模式中已经输入了:的基础上,w 表示 在一般模式下输入了:w):



惊叹号 (!) 在 vi 当中,常常具有 “强制” 的意思。

2.3.3 一般模式 按键操作

前面说明的文本输入模式,和底线命令模式看起来都不难,相对来说最多最复杂的操作都是在一般模式下面 = =!


在任意模式下按按键“Esc”可进入到一般模式。下在一般模式下,可以进行复制,粘贴,删除,查找替换某个关键字等。


操作键如下表说明:




一些操作的补充说明:


1、如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!


跳转到文件头和文件尾:1gg 就跳到第一行的行首,就是文件头。G 就是跳转转至文件结尾。


2、使用 /word 配合 n 及 N 是非常有帮助,可以让你重复的找到一些你搜寻的关键词,在 /word 之前先跳到第一行则进行全文件搜索。


上面表格列举了最常用的 vi 编辑器操作,如果熟练掌握表格中的操作,就已经可以很好的使用 vi 编辑器了,当然,vi 的操作 和 上一篇文章的 shell 指令一样,不是背出来的而是用出来的!

2.4 更多操作学习

我们上面的介绍说明,介绍了一般常用的操作,基本可以满足正常使用需求,如果需要学习更多,可以自行参考更多资料:


史上最全Vim快捷键键位图(入门到进阶)


Linux vi/vim — 菜鸟教程



上图就是网上到处流传的经典的 vi 键盘图,出自上面推荐的网址,大家可以自行查看。

结语

本文主要是介绍 Linux 下 Vi 编辑器 以及其使用方式。


要插一句,最近发现自己一些文章直接被搬运,有些地方想投诉也投诉不了,没办法,以后得张个心眼,我是矜辰所致,全网同名!暂时加句话把,以后得好好想想如何防止直接搬运。


对于初学者,我的建议是,掌握几条基本的指令,能够对文档进行一定的修改即可,不用精通,但是一定要会 !

针对自己未来的发展方向选择性的深入学习,如果以后工作经常需要使用 vi ,那么可以针对性的深入学习和练习,如果只是在需要的时候进行简单的修改,掌握几条必备基本指令,后期遇到的时候再查看手册。


永远要记住,学习工具使用的最好方式是自己动手!


好了,Linux 下编辑器的使用我们就讲到这里,谢谢大家!

发布于: 2022-10-24阅读数: 36
用户头像

矜辰所致

关注

CSDN、知乎、微信公众号: 矜辰所致 2022-08-02 加入

不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开! 为了活下去的嵌入式工程师,画画板子,敲敲代码,玩玩RTOS,搞搞Linux ...

评论

发布
暂无评论
嵌入式 Linux 入门(四、Linux 下的编辑器 — 让人爱恨交加的 vi )_vim_矜辰所致_InfoQ写作社区