全新的 developerWorks Premium 会员计划提供了强大的开发工具和资源,包括 500 篇通过 Safari Books Online 提供的顶级技术文章(其中数十篇文章专门针对 Java 开发人员)、最重要开发人员活动的大幅折扣、最新的 O'Reilly 大会的视频录像,等等。立即注册。
在本教程中,学习 vi 编辑器的基本用法,几乎所有 Linux 或 UNIX 系统上都提供了它。学习如何:
本教程将帮助您对 Linux Server Professional (LPIC-1) 考试 101 的主题 103 中的目标 103.8 进行应考准备。该目标的权重为 3。
回页首
vi 编辑器几乎肯定存在于每个 Linux 和 UNIX 系统上。事实上,如果系统只有一个编辑器,那么该编辑器很可能就是 vi,所以了解如何使用 vi 是值得的。本教程将介绍一些基本的 vi 编辑命令,但要获得完整的 vi 教程,请查阅我们的 vi 教程 “ vi 介绍 -- 快速参考表 ”,或者查阅手册页或许多优秀的图书。
本教程系列帮助学习 Linux 系统管理任务。您还可以使用这些教程中的资料对 Linux Professional Institute 的 LPIC-1:Linux 服务器专业认证考试 进行应考准备。
请参阅 学习 Linux,101 :LPIC-1 学习路线图 ”,查看本系列中每部教程的描述和链接。这个路线图正在开发之中,它反映了 2015 年 4 月 15 日更新的 4.0 版 LPIC-1 考试目标。在完成这些教程中,会将它们添加到路线图中。
要从本系列教程中获得最大收获,您应该拥有 Linux 的基本知识和一个正常工作的 Linux 系统,您可以在这个系统上实践本教程中涵盖的命令。有时程序的不同版本会得到不同的输出格式,所以您的结果可能并不总是与这里给出的清单和图完全相同。
回页首
大多数 Linux 发行版现在都附带了 vim(表示 V i IM proved,改进的 vi)编辑器,而不是经典的 vi。Vim 向后兼容 vi,拥有图形模式 (gvim) 以及标准的 vi 文本模式接口。 vi
命令通常是 vim 程序的别名或符号链接。vim 有多个版本:微型、小型、普通、大型和超大型。您可以使用以下命令确定您运行的 vim 版本和它包含哪些特性:
vi --version
您是否还记得前面的教程 “ 学习 Linux,101:进程执行优先级 ” 中介绍更改优先级的部分,我们希望更改运行的 count1.sh shell 脚本的优先级。或许您自己已经尝试过,就会发现该命令运行得太快了,以至于您没有足够的时间使用 renice
完成优先级更改。所以我们首先使用 vi 编辑器在文件的开头添加一行,让该命令休眠 20 分钟,以便我们有时间来更改优先级。
如果还没有编写 count1.sh 程序,可以在您的主目录中打开一个终端窗口并粘贴来自 清单 1的命令。这将在一个名为 lpi103-8 的目录中创建 count1.sh 并跳转到该目录。
清单 1. CPU 密集型脚本 - count1.sh
ian@yoga-u15:~$ mkdir -p lpi103-8 && cd lpi103-8 && { > echo 'x="$1"'>count1.sh > echo 'echo "$2" $(date)'>>count1.sh > echo 'while [ $x -gt 0 ]; do x=$(( x-1 ));done'>>count1.sh > echo 'echo "$2" $(date)'>>count1.sh > } ian@yoga-u15:~/lpi103-8$ cat count1.sh x="$1" echo "$2" $(date) while [ $x -gt 0 ]; do x=$(( x-1 ));done echo "$2" $(date)
要编辑一个现有文件,可以使用 vi
命令并使用一个文件名作为参数。请参阅手册页或参考资料来获取许多可用选项的细节。现在只需要使用没有选项的命令:
vi count1.sh
这个命令应该会打开 count1.sh 文件。您会看到一个类似 清单 2的显示界面。如果使用 vim,一些单词或字符可能带有颜色。Vim 拥有一种语法突出显示模式(最初的 vi 编辑器中没有该模式),该模式默认情况下可能已在您系统上打开。
清单 2. 使用 vi 编辑 count1.sh
x="$1" echo "$2" $(date) while [ $x -gt 0 ]; do x=$(( x-1 ));done echo "$2" $(date) ~ ~ ~ ~ "count1.sh" 4 lines, 84 characters
vi 编辑器可追溯到还不是所有终端键盘都拥有光标移动键的时代,所以,在 vi 中可以完成的所有操作都可以使用标准打字机上通常可找到的键和另外两个键(比如 Esc 和 Insert )来完成。但是,如果有其他键可用,那么可以配置 vi 来使用这些键;您键盘上的大部分建都可以在 vi 中派上用场。由于此传承和早期终端连接的缓慢性质,vi 当之无愧地就获得了命令非常简单且神秘的评价。我们首先看看用于导航文件的键。
这些命令帮助您在文件内移动:
如果您在任何这些命令前键入一个数字,该数字就是命令的执行次数。这个数字被称为 重复次数 或简单地称为 次数 。例如,5h 表示将会左移 5 个字符。您可以将重复次数与许多 vi 命令结合使用。
以下命令可以帮助您移动到文件中的特定行:
练习这些命令,直到您熟悉文件中的移动。如果遇到麻烦和命令未按预期的运行,请继续阅读,学习如何退出文件。
对于一个新编辑器,需要知道的最有用的操作之一就是,如何在您执行任何不应执行的操作(比如销毁某个重要的配置文件)之前退出它。要退出 vi,可以保存或丢弃更改,或者从头重新启动。如果这些命令不起作用,那么您可能处于插入模式,稍后将会介绍该模式。如果存在怀疑,请按下 Esc 退出插入模式并返回到命令模式,这时这些命令应该会生效。
备注:
回页首
vi 编辑器有两种操作模式:
这两种模式确定了编辑器的行为方式。您在插入模式下键入的任何内容都被视为要插入到文件中的文本。如果尝试键入一个命令但没有得到任何结果,或者字符出现在光标下,那么您可能忘记按下 Esc 来离开插入模式了。
回页首
学习在 vi 中打开一个文件,在其中移动并退出,学会这些之后,是时候学习如何编辑文件中的文本了。
在需要插入、删除或修改文本时,使用以下命令。请注意,其中一些命令具有与小写形式类似的大写形式;请参阅下面的描述。
您可以使用正则表达式在您文件中搜索文本:
您可以在上述任何命令的前面添加一个表示重复次数的数字。所以 3/x 将从当前点开始查找第三次出现的 x,/x 后跟 2n 也是如此。类似地,2/^e 将从当前位置开始查找第二个以 e 开头的行。
请注意,该搜索在到达文件底部后将返回到顶部搜索。
vi 中另一个有用的命令是 help 命令,您可以键入 :help
来调用它。帮助信息将会在 vi 内打开,可以使用 :q
命令离开帮助并返回到工作中。如果您想要获得针对某个特定主题的帮助,比如换行,可以在 :help 命令后添加一个单词,例如: :help wrap
。
我们首先希望向 count1.sh 文件添加一行。为了保留原始版本并将修改后的版本保存为 count2.sh,我们可以在使用 vi
打开该文件后使用这些 vi 命令。请注意,<Esc> 表示按下 Esc 键。
清单 3. 将一行添加到 count1.sh 中的编辑器命令
1GOsleep 20<Esc>:w! count2.sh:q
这些命令执行以下操作:
知道如何做之后就会很简单。
这是考试 101 - 主题 103:GNU 和 UNIX 命令的最新教程。请参阅我们的系列路线图,了解本系列中其他教程的说明和链接。