Linux学习教程(第五章 Vim文本编辑器及其应用)一

您所在的位置:网站首页 vi的命令模式可使用的命令 Linux学习教程(第五章 Vim文本编辑器及其应用)一

Linux学习教程(第五章 Vim文本编辑器及其应用)一

2024-05-31 20:18| 来源: 网络整理| 查看: 265

第五章 Vim文本编辑器及其应用

本章主要讲解 Linux 系统中的文本编辑器 Vim。

Vim 是一个基于文本界面的编辑工具,使用简单且功能强大。更重要的是,Vim 是所有 Linux 发行版本默认的文本编辑器。

很多人习惯将 Vim 称为 Vi,其实 Vim 是 Vi 的增强版(在 Vi 的基础上增加了正则表达式的查找、多窗口的编辑等功能),使用 Vim 进行程序开发会更加方便。

想深入了解 Vi 和 Vim 的区别,可以在 Vim 命令模式下输入 :help vi_diff,即可看到关于两者区别的摘要。

 一、什么是Vim,Vim及其安装

通过前面的学习我们知道,Linux 系统中“一切皆文件”,因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器。 作为一名 Linux 初学者,你必须熟练掌握 Linux 中至少一款文本编辑器的用法。对文本编辑器的功能(如查找、剪切和粘贴)了解越多,对你越有帮助。 可供选择的编辑器不止一种,例如 Vim、emacs、pico、nano 等,很多人都找到了自己所喜爱的编辑器。综合考虑各种因素,本套 Linux 教程建议初学者学习 Vim 文本编辑器。 Vim文本编辑器,是由 vi 发展演变过来的文本编辑器,因其具有使用简单、功能强大、是 Linux 众多发行版的默认文本编辑器等特点,成功圈住了很多人成为其死忠粉丝。

关于 vi 和 Vim 之间的区别和联系,后续会进行详细介绍,这里不再赘述。

Vim 的安装

众多 Linux 发行版系统,通常都已经默认安装好了 vi 或 Vim 文本编辑器,Centos 也不例外,该系统就默认安装有 vi 文本编辑器,但建议大家使用 Vim。

如果在命令行模式下输入“vim”,输出结果为“Command not found”,则表示此系统中未安装 Vim。

CentOS 系统中,使用如下命令即可安装 Vim:

yum install vim

需要注意的是,此命令运行时,有时需要手动确认 [y/n],如图 1 所示:

图 1 安装过程

遇到此情况,选择 “y” 即可。 如果你想省略手动输入“y”的过程,希望全自动安装,可以使用如下这条命令:

yum -y install vim

有关 yum 的使用后续章节会进行详细介绍,此处不用深究。 当命令行中输入“Vim”显示如图 1 所示的画面时,视为 Vim 安装成功。

Vim 安装成功界面

图 1 Vim 安装成功界面

二、Vi和Vim之间到底有什么关系?

我们知道,Vi 编辑器是 Unix 系统最初的编辑器。它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文件中移动、插入、编辑和替换文本。 尽管 Vi 可能是世界上复杂的编辑器(讨厌它的人是这么认为的),但其拥有的大量特性使其成为 Unix 管理员多年来的支柱性工具。 在 GNU 项目中,程序员在将 Vi 编辑器移植到开源世界的同时,决定对其作一些改进。由于改进后的 Vi 不再是以前 Unix 中的那个原始的 Vi 编辑器了,开发人员也就将它重命名为“Vi improved”,也就是 Vim。

GNU 项目,英文全称为“GNU is Not Unix”,简单的说,就是一个开发类 Unix 操作系统的项目,GNU 操作系统是由 GNU 软件包及其第三方的免费软件包组成,所以其最大的特点就是免费。

因此可以这样说,Vim 是由 Vi 发展演变过程的文本编辑器,因其具有语法高亮显示、多视窗编辑、代码折叠、支持插件等功能,已成为众多 Linux 发行版本的标配,本教程强烈建议大家系统地学习 Vim。 有读者可能会问,Linux 系统中的文本编辑器有很多,例如 emacs、pico、nano、joe 等等,为什么一定要学 Vim 呢? 推荐使用 Vim 文本编辑器的原因有很多,比如说:

几乎所有的Linux 发行版都内嵌有 Vim 文本编辑器,而其他的编辑器则不一定存在;在使用 Linux 系统过程中,很多软件的编辑接口都会默认调用 Vim 文件编辑器,例如 crontab、Visudo、edquota等命令;Vim具有编辑程序的能力,会主动利用不同的字体颜色辨别语法的正确性,方便程序设计;使用 Vim 文本编辑器,编辑速度会更快。

所有原因中,最主要的还是第 2 条,就是因为有太多 Linux 命令会默认调用 Vim 作为编辑数据的接口,所以建议初学者学会 Vim。

三、Linux Vim三种工作模式(命令模式、输入模式和编辑模式)详解

通过前面的学习我们知道,Linux 系统中所有的内容都以文件的形式进行存储,当在命令行下更改文件内容时,常会用到文本编辑器。 我们首选的文本编辑器是 Vim(至于为什么,可查看《二、Vi和Vim之间到底有什么关系?》一节)。使用 Vim 编辑文件时,存在 3 种工作模式,分别是命令模式、输入模式和编辑模式,这 3 种工作模式可随意切换,如图 1 所示。

图 1 Vim 的三种工作模式

1、Vim的命令模式

使用 Vim 编辑文件时,默认处于命令模式。此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。 图 2 所示是在 CentOS 6.x 系统中 Vim 处于命令模式的状态示意图。

Vim 处于命令状态

图 2 Vim 处于命令状态

2、Vim的输入模式

在输入模式下,Vim 可以对文件执行写操作,类似于在 Windows 系统的文档中输入内容。 使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令(各指令的具体功能如表 3 所示),当编辑文件完成后按 Esc 键即可返回命令模式。

表 3 各插入命令的具体功能

快捷键功能描述i在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动I在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令o在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本O在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本a在当前光标所在位置之后插入随后输入的文本A在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行a命令

图 4 所示即为 Vim 处于输入模式状态下的示意图。

Vim处于输入模式

图 4 Vim 处于输入模式

3、Vim 的编辑模式

编辑模式用于对文件中的指定内容执行保存、查找或替换等操作。 使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。

指令执行后 Vim 会自动返回命令模式。如想直接返回命令模式,按 Esc 即可。

图 4 所示为 Vim 进入编辑模式后的状态。

Vim进行编辑模式

图 4 Vim 进行编辑模式

对于新手来说,经常不知道自己处于什么模式。不论是自己忘了,还是不小心切换了模式,都可以按一次 Esc 键返回命令模式。如果你多按几次 Esc 键后听到"嘀————"的声音,则代表你已经处于命令模式了。

四、Linux Vim基本操作(文件的打开和编辑)完全攻略(有图有真相)

《三、Linux Vim三种工作模式》一节给大家详细介绍了 Vim 的 3 种工作模式,本节来学习如何使用 Vim 编辑文件。 首先学习如何使用 Vim 打开文件。

1、Vim 打开文件

使用 Vim 打开文件很简单,例如在命令行模式下打开一个自己编写的文件 /test/vi.test,打开方法如下:

[root@itxdl ~]# vim /test/vi.test

刚打开文件时 Vim 处于命令模式,此时文件的下方会显示文件的一些信息,包括文件的总行数和字符数,以及当前光标所在的位置等,此时可以使用插入命令进入输入模式对文件进行编辑,如图 1 所示。

图 1 Vim 打开文件

除此之外,我们还可以利用下表中打开文件的命令格式,针对特定情形使用适当的打开方式,可以大大提高我们的效率。

表 2 Vim 打开文件的快捷方法

Vi 使用的选项说 明vim filename打开或新建一个文件,并将光标置于第一行的首部vim -r filename恢复上次 vim 打开时崩溃的文件vim -R filename把指定的文件以只读方式放入 Vim 编辑器中vim + filename打开文件,并将光标置于最后一行的首部vi +n filename打开文件,并将光标置于第 n 行的首部vi +/pattern filename打幵文件,并将光标置于第一个与 pattern 匹配的位置vi -c command filename在对文件进行编辑前,先执行指定的命令 2、使用 Vim 进行编辑

同样,Vim 提供了大量的编辑快捷键,主要可分为以下几类。

(1)Vim 插入文本

从命令模式进入输入模式进行编辑,可以按下 I、i、O、o、A、a 等键来完成,使用不同的键,光标所处的位置不同,如表 3 所示。

表 3 插入文本

快捷键功能描述i在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动I在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令o在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本O(大写)在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本a在当前光标所在位置之后插入随后输入的文本A在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行 a 命令 (2)Vim 查找文本

表 4 Vim 查找目标文本

快捷键功能描述/abc从光标所在位置向前查找字符串 abc/^abc查找以 abc 为行首的行/abc$查找以 abc 为行尾的行?abc从光标所在为主向后查找字符串 abcn向同一方向重复上次的查找指令N向相反方向重复上次的查找指定

例如,在 /etc/passwd.vi 文件中查找字符串 "root",则运行命令如图 5 所示。

图 5 使用 Vim 进行查找

如果在文件中并没有找到所要查找的字符串,则在文件底部会出现 "Pattern not found" 提示,如图 6 所示。

图 6 未查找到指定字符串的提示

在查找过程中需要注意的是,要查找的字符串是严格区分大小写的,如查找 "shenchao" 和 "ShenChao" 会得到不同的结果。

如果想忽略大小写,则输入命令 ":set ic";调整回来输入":set noic"。

如果在字符串中出现特殊符号,则需要加上转义字符 "\"。常见的特殊符号有 \、*、?、$ 等。如果出现这些字符,例如,要查找字符串 "10$",则需要在命令模式中输入 "/10\$"。

(3)Vim 替换文本

表 7 Vim替换文本

快捷键功能描述r替换光标所在位置的字符R从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束:s/a1/a2/g将当前光标所在行中的所有 a1 用 a2 替换:n1,n2s/a1/a2/g将文件中 n1 到 n2 行中所有 a1 都用 a2 替换:g/a1/a2/g将文件中所有的 a1 都用 a2 替换

例如,要将某文件中所有的 "root" 替换为 "liudehua",则有两种输入命令,分别为:

:1, $s/root/liudehua/g 或 :%s/root/liudehua/g

上述命令是在编辑模式下操作的,表示的是从第一行到最后一行,即全文查找 "root",然后替换成 "liudehua"。 如果刚才的命令变成 :10,20 s/root/liudehua/g,则只替换从第 10 行到第 20 行的 "root"。

(4)Vim删除文本

表 8 Vim 删除文本快捷键

快捷键功能描述x删除光标所在位置的字符dd删除光标所在行ndd删除当前行(包括此行)后 n 行文本dG删除光标所在行一直到文件末尾的所有内容D删除光标位置到行尾的内容:a1,a2d函数从 a1 行到 a2 行的文本内容

注意,被删除的内容并没有真正删除,都放在了剪贴板中。将光标移动到指定位置处,按下 "p" 键,就可以将刚才删除的内容又粘贴到此处。

(5)Vim复制和粘贴文本

表 9 Vim 复制文本

快捷键功能描述p将剪贴板中的内容粘贴到光标后P(大写)将剪贴板中的内容粘贴到光标前y复制已选中的文本到剪贴板yy将光标所在行复制到剪贴板,此命令前可以加数字 n,可复制多行yw将光标位置的单词复制到剪贴板 (6)Vim其他常用快捷键

某些情况下,可能需要把两行进行连接。比如说,下面的文件中有两行文本,现在需要将其合并成一行(实际上就是将两行间的换行符去掉)。可以直接在命令模式中按下 "J" 键,按下前后如图 10 所示。

图 10 按下 "J" 键前后

如果不小心误删除了文件内容,则可以通过 "u" 键来撤销刚才执行的命令。如果要撤销刚才的多次操作,可以多按几次 "u" 键。

3、Vim 保存退出文本

Vim 的保存和退出是在编辑模式中进行的,其常用命令如下表所示。

表 11 Vim 常用保存退出命令

命令功能描述:wq保存并退出 Vim 编辑器:wq!保存并强制退出 Vim 编辑器:q不保存就退出 Vim 编辑器:q!不保存,且强制退出 Vim 编辑器:w保存但是不退出 Vim 编辑器:w!强制保存文本:w filename另存到 filename 文件x!保存文本,并退出 Vim 编辑器,更通用的一个 vim 命令ZZ直接退出 Vim 编辑器

需要注意的是,"w!" 和 "wq!" 等类似的指令,通常用于对文件没有写权限的时候(显示 readonly,如图 12 所示),但如果你是文件的所有者或者 root 用户,就可以强制执行。

图 12 只读文件

五、Vim移动光标快捷键汇总

Vim 文本编辑器中,最简单的移动光标的方式是使用方向键,但这种方式的效率太低,更高效的方式使用快捷键。 Vim 移动光标常用的快捷键及其功能如下面各表所示,需要注意的是,表中所有的快捷键都在命令模式(默认状态)下直接使用。

1、Vim快捷方向键

表 1 Vim光标上、下、左、右移动快捷键

快捷键功能描述h光标向左移动一位j光标向下移动一行(以回车为换行符),也就是光标向下移动k光标向上移动一行(也就是向上移动)l 光标向右移动一位

最初使用,大家可能觉得比较别扭,但熟能生巧,使用此方式移动光标同样能够提高编辑速度。

2、Vim光标以单词为单位移动

某些情形下,可能需要光标迅速移动至一行中的某个位置,将光标以单词为单位进行移动就会很方便。

表 2 Vim光标以单词为单位进行移动

快捷键功能描述w 或 W光标移动至下一个单词的单词首b 或 B光标移动至上一个单词的单词首e 或 E光标移动至下一个单词的单词尾nw 或 nWn 为数字,表示光标向右移动 n 个单词nb 或 nBn 为数字,表示光标向左移动 n 个单词 3、Vim光标移动至行首或行尾

表 3 光标移动到行首或行尾

快捷键功能描述0 或 ^光标移动至当前行的行首$光标移动至当前行的行尾n$光标移动至当前行只有 n 行的行尾,n为数字 4、Vim光标移动至指定字符

一行中,如果需要将光标移动到当前行的某个特点字符,则可以使用表 4 中的快捷键。

表 4 光标移动至指定字符

快捷键功能描述fx光标移动至当前行中下一个 x 字符处Fx 光标移动至当前行中下一个 x 字符处 5、Vim光标移动到指定行

表 5 光标移动到指定行

快捷键功能描述gg光标移动到文件开头G光标移动至文件末尾nG光标移动到第 n 行,n 为数字:n编辑模式下使用的快捷键,可以将光标快速定义到指定行的行首 6、Vim光标移动到匹配的括号处

程序员在编辑程序时,经常会为将光标移动到与一个 "(" 匹配的 ")" (对于 [] 和 {} 也是一样的)处而感到头疼。Vim 里面提供了一个非常方便地査找匹配括号的命令,这就是 "%"。 比如,在 /etc/init.d/sshd 脚本文件中(最好还是复制后练习,小心驶得万年船),想迅速地将光标定位到与第 49 行的 "{" 相对应的 "}" 处,则可以将光标先定位在 "{" 处,然后再使用 "%" 命令,使之定位在 "}" 处,如图 6 所示。

使用"%"命令定位括号

图 6 使用"%"命令定位括号

六、Linux Vim撤销和恢复撤销快捷键用法详解

使用 Vim 编辑文件内容时,经常会有如下 2 种需求:

对文件内容做了修改之后,却发现整个修改过程是错误或者没有必要的,想将文件恢复到修改之前的样子。将文件内容恢复之后,经过仔细考虑,又感觉还是刚才修改过的内容更好,想撤销之前做的恢复操作。

基于这 2 种需求,Vim 编辑器提供了撤销和恢复撤销的命令,如表 1 所示。

表 1 Linux Vim 撤销和恢复撤销快捷键

快捷键功能u(小写)undo 的第 1 个字母,功能是撤销最近一次对文本做的修改操作。Ctrl+RRedo 的第 1 个字母,功能是恢复最近一次所做的撤销操作。U(大写)第一次会撤销对一行文本(光标所在行)做过的全部操作,第二次使用该命令会恢复对该行文本做过的所有操作。

注意,以上这 3 种命令都必须在 Vim 编辑器处于命令模式时才能使用。

下面通过一个例子来演示以上 3 个命令的具体用法。首先,我们新建一个 demo.txt 文件并打开,键入一行内容,例如:

http://c.biancheng.net

然后按“Esc”键,使 Vim 由输入模式转为命令模式,并使用 yy 命令将这一行文本复制到剪贴板中,如此我们就可以在文本任意位置通过键入 p(或大写的 P)命令将复制的内容粘贴到光标所在的位置。 假设我们将光标调整到第一行最后一个字符处,连续按两次 p 命令(粘贴 2 次),则此时文本中的内容变为:

http://c.biancheng.net http://c.biancheng.net http://c.biancheng.net

在此基础上,通过 u(小写)命令就可以使文本内容恢复到上一次做粘贴操作之前的样子,其中“上一次”的含义是,恢复操作是可以叠加的,即按一次就会在现有基础上做一次恢复操作。 比如,继续操作 demo.txt 文件,按一次 u,会发现其文本内容变为:

http://c.biancheng.net http://c.biancheng.net

再按一次 u,文本内容继续恢复为:

http://c.biancheng.net

同样,恢复撤销的操作和撤销操作是相对应的,通过按 Ctrl+R 组合键,可以撤销之前所做的一次恢复操作。例如,继续操作 demo.txt 文件,按一次 Ctrl+R,会发现其文本内容恢复为:

http://c.biancheng.net http://c.biancheng.net

再按一次 Ctrl+R,文本内容又恢复为:

http://c.biancheng.net http://c.biancheng.net http://c.biancheng.net

U(大写)的功能和之前的 2 个命令不同,它的作用是撤销或恢复撤销对光标所在行文本所做的全部操作。比如,我们对 demo.txt 文件内容做如下修改:

http://c.biancheng.net http://c.biancheng.netLinux教程 http://c.biancheng.net/linux_tutorial/

可以看到,这里对第三行文本做了 2 处修改(红色标注部分)。在此基础上,如果在命令模式下键入 U(大写),可以看到,之前对第 3 行所做的 2 处修改,全部被恢复了:

http://c.biancheng.net http://c.biancheng.net http://c.biancheng.net

如果此时再键入 U(大写),则又会恢复之前对第 3 行文本做过的全部操作:

http://c.biancheng.net http://c.biancheng.net Linux教程 http://c.biancheng.net/linux_tutorial/



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3