Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102072
  • 博文数量: 65
  • 博客积分: 2520
  • 博客等级: 少校
  • 技术积分: 680
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-22 15:10
文章分类

全部博文(65)

文章存档

2011年(1)

2010年(64)

我的朋友
最近访客

分类: LINUX

2010-06-04 17:33:02

学习 Linux,101: 使用 vi 编辑文件

总是可用的编辑器

Ian Shields, 高级程序员, IBM

简介: 了解如何使用 vi 编辑器,这款编辑器在大部分 UNIX® 和 Linux® 系统中都存在。本文提供的材料可以帮助您准备 Linux 系统管理员认证 LPI 101 考试,也可以作为一般的兴趣读物。

查看本系列更多内容

发布日期: 2010 年 4 月 01 日

其他语言版本: 英文

关于本系列

本系列教程将帮助您了解 Linux 系统管理员任务。您还可以利用本系列文章提供的材料准备 。

查看我们的 学习 Linux,101:LPIC-1 路线图 了解本系列文章并获取每篇文章的链接。该系列线路图随时更新并反映 LPIC-1 考试的最新(2009 年 4 月)考核目标:我们在每篇文章完成之后将其添加到该线路图中。与此同时,您还可以在我们的 LPI 认证考试准备教程 中找到早期的类似材料,它们针对 2009 年 4 月以前的 LPIC-1 考核目标。

在本文中,您将学习 vi 编辑器的基本使用方法,这个编辑器在大部分 Linux 或 UNIX 中都可以见到。您将学习:

  • 使用 vi 导航文档
  • 使用基本的 vi 模型
  • 插入、编辑、删除、复制和查找文本

本文将帮助您准备 Linux Professional Institute's Junior Level Administration (LPIC-1) 考试的 103 主题下的 103.8 考核目标。该考核目标的权值为 3。

为了从本文获得最大的收益,您应该具备基础的 Linux 知识,并且具有一个能够正常运行的 Linux 系统,以便练习本文讨论的命令。不同版本的程序输出的结果的格式可能不同,因此您的结果可能与本文图片和清单所示的结果有所不同。


联系 Ian

Ian 是我们最受欢迎并且很多产的作者之一。查看 Ian 的个人资料 并与他和 My developerWorks 上的其他作者和读者联系。

几乎所有的 Linux 和 UNIX 系统上都有 vi 编辑器。事实上,如果系统只有一个编辑器,那它一定就是 vi,因此深入了解 vi 是很值得的。本文将向您介绍一些基本的 vi 编辑命令,但有关完整的 vi 教程,请查看我们关于 vi 的教程 “vi 介绍 —— 快速参考表”,或者咨询人工页面或参考相关书籍。

大部分 Linux 发行版现在都带有 vim(表示 Vi IMproved)编辑器而不是经典的 vi。Vim 与 vi 是向上兼容的,具有可用的图形模式(gvim)以及标准的 vi 文本模式界面。vi 命令通常是一个 vim 程序的别名或符号链接。有好几个 vim 版本:微型、小型、普通、大型和超大型。您可以使用以下命令找到运行哪个版本,以及该版本包括哪些功能:

vi --version

回忆之前的文章 “学习 Linux,101:进程执行优先级” 修改优先级中的一节,我们希望更改运行 count1.sh shell 脚本的优先级。您自己测试时可能会发现,命令运行得太快,以至于没有足够的时间使用 renice 更改优先级。那么我们可以使用 vi 编辑器在文件的开始处添加一行,让其休眠 20 秒,以便有时间更改优先级。

如果还没有 count1.sh 程序,在主目录打开终端窗口并从清单 1 中粘贴命令。这将在名为 lpi103-8 的目录中创建一个 count1.sh,并将您带入该目录中。



				
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
}

要编辑现有文件,可以使用 vi 命令并将文件名作为参数。参考 参考资料 中的手册了解更多主题的详情。现在,只需要使用不带参数的命令:
vi count1.sh
该命令将打开 count1.sh 文件。您应该看到类似于清单 2 的内容。如果您使用的是 vim,一些字或字母可能有颜色。Vim 有一个语法高亮模型(它不是原始 vi 编辑器的一部分),默认情况下,在您的系统中它应该是打开的。



				
x="$1"
echo "$2" $(date)
while [ $x -gt 0 ]; do x=$(( x-1 ));done
echo "$2" $(date)
~
~
~
~
"count1.sh" 4L, 84C 1,1 All

开发 vi 编辑器时并非所有终端键盘都有光标移动键,因此您在 vi 中只能使用标准键盘中能找到的键,以及 EscInsert 等键。但是,您可以配置 vi 使用其他键(如果可用);键盘上的大部分键在 vi 中都能做一些很有用的事情。因为这种遗留情况以及早期终端连接较慢的本质,vi 自然有了命令简单和神秘的名声。我们先来查看用于在文件中导航的键。

以下命令可以帮助您在文件内移动:

h
在当前行往左移动一个字符
j
向下移动到下一行
k
向上移动到上一行
l
在当前行往右移动一个字符
w
移动到当前行下一个字
e
移动到当前行下一个字的结束处
b
移动到当前行上一个字的开始处
Ctrl-f
向前滚动一页
Ctrl-b
向后滚动一页

如果在这些命令之前键入数字,则命令将执行该数字表示的次数。该数字称为重复次数 或者就称为计数。例如,5h 将向左移动 5 个字符。许多 vi 命令都可以使用重复计数。

以下命令将帮助您移动到文件的特定行:

G
移动到文件的特定行。例如,3G 移动到第 3 行。如果没有参数,G 将移动到文件的最后一行。
H
相对于屏幕移动到最上面的行。例如,3H 将移动到屏幕上方往下第三行。
L
就像 H 一样,不同之处在于移动到屏幕的最后一行。因此,2L 移动到屏幕的倒数第二行。

练习这些命令,直到您可以熟悉这些命令在文件内的移动。如果您被卡住,发现事情与预期不同,请继续阅读了解如何离开文件。

关于一个新的编辑器,就有用的一件事情是了解如何在做了不该做的事情前离开编辑器,比如要避免销毁重要的配置文件。您可以在保存或丢弃更改的情况下离开 vi,也可以用重新启动的方式。如果这些命令无效,您可能处于插入模式,这将在后文介绍。如果是这样,可以按 Esc 退出插入模式并返回到命令模式,这些命令就会生效。

:q!
退出编辑文件并放弃所有更改。这是避免麻烦的常用手段。
:w!
写入文件(无论是否修改)。尝试重写现有文件或只读文件,或者其他不可写文件。您可以给定一个文件名作为参数,写入的将是这个文件而不是开始的文件。忽略 ! 通常会更加安全,除非您知道您在做什么。
ZZ
如果修改了文件,则写入文件。是普通 vi 退出常用的方法。
:e!
编辑文件的当前磁盘副本。这将重载文件,放弃所做的更改。如果磁盘副本出于某些原因发生了更改,并且您需要最新的版本,那么可以使用这种方法。
:!
运行一个 shell 命令。键入命令并按 Enter。当命令完成时,您将看到输出和提示返回到 vi 编辑。

注意:

  1. 当您键入冒号 (:) 时,您的光标将移动到键入命令和任何参数的屏幕的下一行。
  2. 如果忽略上述命令的感叹号,您将收到一条错误消息,比如更改没有保存,输出文件无法重写(例如,编辑只读文件时)。
  3. : 命令有一个较长的形式(:quit, :write, :edit),但是很少使用。

vi 编辑器有两种操作模式:

命令模式
在命令模式中,您可以在文件中移动并执行一些编辑操作,比如搜索文本、删除文本等。启动时通常都是命令模式。
插入模式
在插入模式中,您在插入点向文本键入新文本。要返回到命令模式,按 Esc(Escape)键。

这两个模式决定了编辑器的行为。您在插入模式中键入的任何内容都将视为将要插入文件的文本。如果尝试键入命令但没有反应,或者在光标下出现字符,那么可能是忘记按 Esc 退出插入模式了。


现在您可以在 vi 中打开文件,在其中移动和退出,现在我们将学习如何编辑文件中的文本。

需要插入、删除或修改文本时,使用以下命令。注意,有些命令有类似于小写形式的大写形式,具体见下文的描述。

i
在当前位置的字符之前进入插入模式。键入文本并按 Esc 返回命令模式。使用 I 在当前行的前面插入。
a
在当前位置的字符之后插入模型。键入文本并按 Esc 返回到命令模式。使用 A 插入当前行的结尾。
c
使用 c 更改当前字符并进入插入模式键入替换字符。
o
在当前行下方另起一行以插入文本。使用 0 打开当前行上面的一行。
cw
删除当前字的其余部分,进入插入模式进行替换。使用重复计数替换多个字。使用 c$ 替换行的末尾。
dw
与上述 cw(和 c$)类似,但不进入插入模式。
dd
删除当前行。使用重复计数删除多行。
x
删除光标位置的字符。使用重复计数删除多个字符。
p
将最后一个删除文本放在当前字符。使用 P 将其放在当前字符之前。
xp
组合 x 和 p 是一个常用的方法。这将交换光标位置的字符和它右边的字符。

可以使用表达式在文件中搜索文本:

/
使用 / 后跟正则表达式可以在文件中进行向前搜索。
?
使用 ? 后跟正则表达式可以在文件中进行向后搜索。
n
使用 n 以任意方向重复上一次搜索。

上述搜索命令前可以带任何数字表示重复次数。3/x 查找当前点第三次出现 x 的地方,就像是 /x 后跟 2n。类似地,2/^e 将从当前位置开始的第二行查找以 e 开始的内容。

注意,到达文件底部之后,搜索将回到顶部。

vi 中另一个有用的命令是 help 命令,调用它的方式是 :help。help 将在 vi 中打开;使用 :q 命令可以离开帮助回到工作。如果您希望在某个特定主题获得帮助,比如换行,可以尝试在 :help 命令后面添加一个字,例如::help wrap

我们从向 count1.sh 文件添加一行开始。 要保持原来的内容并保存修改的版本,如 count2.sh,使用 vi 打开文件之后,我们应该使用这些 vi 命令。注意, 表示按 Esc 键。



				
1G
O
sleep 20
:w! count2.sh
:q

这些命令执行以下操作:

1G
移动到文件的第一行
O
在上方新建一行并进入插入模式
sleep 20
要添加的新文本
Esc 键返回命令模式
:w! count2.sh
将文件写入磁盘
:q
关闭 vi

只要知道如何做,一切都很简单。

这是 101 考试 —— 103 主题:GNU 和 UNIX 命令的最新文章。 参见我们的 学习 Linux,101:LPIC-1 路线图 了解本系列,并获得每篇文章的链接。


学习

  • 使用 学习 Linux,101:LPIC-1 路线图 找到相关的 developerWorks 文章,它们能够帮助您准备基于 2009 年 4 月的考核目标的 LPIC-1 认证考试。

  • 在 站点上可以找到针对 Linux Professional Institute's Linux 系统管理认证的三个级别的详细考核目标、任务列表和样例问题。尤其要查看针对 和 的 2009 年 4 月份考核目标。要经常查看 LPIC Program 站点了解最新的考核目标。

  • 在 developerWorks 上查看完整的 LPI 考试准备系列,学习 Linux 基础知识并根据 2009 年 4 月份之前的 LPI 考试目标准备系统管理员认证考试。

  • 在 “Linux 开发新手基本任务”(developerWorks,2005 年 3 月)中了解如何打开终端窗口或 shell 提示符等。

  • 提供各种有用的文档,尤其是它的 HOWTO 文档。

  • developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程

  • 在 developerWorks 上查阅所有 Linux 技巧 Linux 教程

  • 随时关注 developerWorks 技术活动网络广播

获得产品和技术

讨论

Ian Shields

Ian Shields 参与了 developerWorks Linux 专区的许多 Linux 项目。他是 IBM 北卡罗来纳州 Research Triangle Park 的一名高级程序员。他于 1973 年作为一名系统工程师加入 IBM 位于澳大利亚堪培拉的子公司。之后,在加拿大蒙特利尔和北卡罗莱那州 RTP 从事通信系统和普及运算。他拥有多项专利。他毕业于 Australian National University,本科学位是纯粹数学和哲学。他拥有北卡罗来纳州立大学的计算机硕士和博士学位。


来源: http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-8/index.html
阅读(878) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~