从菜鸟到专家 vi编辑器全程教学手册

系统 Linux
当我们在使用Linux或者是Unix的时候会遇到vi编辑器的使用,这就要求我们学习和掌握有关vi编辑器的使用方法。下面就是详细的教程。

我们曾经在linux vi编辑器概念层层讲解中告诉大家一些基本的操作命令。但是我们在使用vi编辑器的时候还是会遇到不少困惑的地方,尤其是在Linux或UNIX中的基本使用方法,其实这些问题归根结底还是在于我们对相关的知识掌握不牢固。在本文中,您将学习vi编辑器的基本使用方法,希望对您在之后的使用中有所帮助。

使用vi导航文档

使用基本的vi模型

 

插入、编辑、删除、复制和查找文本

 

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

 

先决条件

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

 

使用vi导航文档

 

联系 IanIan 是我们最受欢迎并且很多产的作者之一。查看 Ian 的个人资料 并与他和 My developerWorks 上的其他作者和读者联系。几乎所有的 Linux 和 UNIX 系统上都有vi编辑器。事实上,如果系统只有一个编辑器,那它一定就是vi,因此深入了解vi是很值得的。本文将向您介绍一些基本的vi编辑命令,但有关完整的vi教程,请查看我们关于vi的教程 “vi 介绍 —— 快速参考表”,或者咨询人工页面或参考相关书籍。

启动vi

大部分 Linux 发行版现在都带有vim(表示viIMproved)编辑器而不是经典的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,并将您带入该目录中。

清单 1. CPU 密集型脚本 - count1.sh  

 

 

 

  1. mkdir -p lpi103-8 && cd lpi103-8 && {  
  2. echo 'x="$1"'>count1.sh  
  3. echo 'echo "$2" $(date)'>>count1.sh  
  4. echo 'while [ $x -gt 0 ]; do x=$(( x-1 ));done'>>count1.sh  
  5. echo 'echo "$2" $(date)'>>count1.sh  

 

 

 

要编辑现有文件,可以使用vi命令并将文件名作为参数。参考 参考资料 中的手册了解更多主题的详情。现在,只需要使用不带参数的命令:

 

vi count1.sh

 

该命令将打开 count1.sh 文件。您应该看到类似于清单 2 的内容。如果您使用的是vim,一些字或字母可能有颜色。Vim 有一个语法高亮模型(它不是原始vi编辑器的一部分),默认情况下,在您的系统中它应该是打开的。

 

 

清单 2. 使用vi编辑 count1.sh

 

 

 

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

 

 

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

 

移动

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

 

 

 

  1. h 在当前行往左移动一个字符   
  2. j 向下移动到下一行   
  3. k 向上移动到上一行   
  4. l 在当前行往右移动一个字符   
  5. w 移动到当前行下一个字   
  6. e 移动到当前行下一个字的结束处   
  7. b 移动到当前行上一个字的开始处   
  8. Ctrl-f 向前滚动一页   
  9. Ctrl-b 向后滚动一页  

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

 

移动到行

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

 

 

 

  1. G 移动到文件的特定行。例如,3G 移动到第 3 行。如果没有参数,
    G 将移动到文件的最后一行。   
  2. H 相对于屏幕移动到最上面的行。例如,3H 将移动到屏幕上方往下第三行。   
  3. L 就像 H 一样,不同之处在于移动到屏幕的最后一行。因此,
    2L 移动到屏幕的倒数第二行。   
  4. 离开 vi 关于一个新的编辑器,就有用的一件事情是了解如何在做了不该
    做的事情前离开编辑器,比如要避免销毁重要的配置文件。您可以在保存
    或丢弃更改的情况下离开 vi,也可以用重新启动的方式。如果这些命令无效,
    您可能处于插入模式,这将在后文介绍。如果是这样,可以按 Esc 
    退出插入模式并返回到命令模式,这些命令就会生效。  
  5. :q! 退出编辑文件并放弃所有更改。这是避免麻烦的常用手段。   
  6. :w! 写入文件(无论是否修改)。尝试重写现有文件或只读文件,
    或者其他不可写文件。您可以给定一个文件名作为参数,写入的将是这个
    文件而不是开始的文件。忽略 ! 通常会更加安全,除非您知道您在做什么。   
  7. ZZ 如果修改了文件,则写入文件。是普通 vi 退出常用的方法。   
  8. :e! 编辑文件的当前磁盘副本。这将重载文件,放弃所做的更改。
    如果磁盘副本出于某些原因发生了更改,并且您需要最新的版本,那么可以使用这种方法。   
  9. :! 运行一个 shell 命令。键入命令并按 Enter。当命令完成时,
    您将看到输出和提示返回到 vi 编辑。
    注意:

 

当您键入冒号 (:) 时,您的光标将移动到键入命令和任何参数的屏幕的下一行。

如果忽略上述命令的感叹号,您将收到一条错误消息,比如更改没有保存,输出文件无法重写(例如,编辑只读文件时)。

 

: 命令有一个较长的形式(:quit, :write, :edit),但是很少使用。

 

vi 模式

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

命令模式

在命令模式中,您可以在文件中移动并执行一些编辑操作,比如搜索文本、删除文本等。启动时通常都是命令模式。

 

插入模式

 

在插入模式中,您在插入点向文本键入新文本。要返回到命令模式,按 Esc(Escape)键。

 

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

 

 

编辑文本

 

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

修改文本

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

 

 

 

搜索文本

 

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

搜索文本:

使用 / 后跟正则表达式可以在文件中进行向前搜索。

 

 

 

 

  1. ? 使用 ? 后跟正则表达式可以在文件中进行向后搜索。   
  2. 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> 表示按 Esc 键。

 

清单 3. 向 count1.sh 添加一行的编辑器命令

 

 

 

 

 

 

  1. 1G  
  2. O  
  3. sleep 20<Esc>   
  4. :w! count2.sh   
  5. :q 

这些命令执行以下操作:

 

 

 

 

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

只要知道如何做,vi编辑器的使用一切都很简单。

【编辑推荐】

  1. linux vi编辑器之葵花宝典
  2. 讲述linux vi编辑器的基础命令使用方法
  3. Linux操作系统下VI编辑器常用命令详细介绍
  4. Ubuntu vim实用配置文件用命令截屏
  5. Ubuntu vim显示行号语法高亮自动缩进
责任编辑:张浩 来源: developerWorks 中国
相关推荐

2010-03-24 09:20:07

CentOS vi编辑

2020-12-23 22:25:11

Vi文本编辑器Unix

2018-01-25 18:30:05

编辑器ViVim

2018-02-09 09:58:41

Linux编辑器Vi

2009-10-27 16:47:58

linux vi编辑器

2009-07-31 17:38:47

linux vi命令详linux vi命令屏幕文本编辑器

2009-12-25 13:00:47

Linux编辑器Vi

2009-10-27 12:43:41

linux vi编辑器

2009-12-23 10:27:22

vi编辑器

2009-07-08 09:21:09

Linux安装JDK

2013-10-29 14:57:17

AngularJS项目

2013-11-06 13:55:27

AngularJS服务

2024-02-28 16:26:14

Linuxvi编辑器

2010-11-16 13:21:08

Oracle命令行

2015-07-15 10:46:00

Sublime Tex

2009-10-26 10:47:57

linux vi编辑器

2013-11-06 10:10:15

AngularJSScopes

2013-08-28 14:12:02

Web前端开发前端

2015-10-27 09:25:11

Vi编辑器使用指南

2011-03-22 13:54:57

UbuntuPHP编辑器
点赞
收藏

51CTO技术栈公众号