一。教程提示
我应该学习这门教程吗?
此教程阐述了如何使用功能强大的可视化编辑器 vi。它使用一种加速“巧表单”方法,目的是使您不用花费大量时间,就可以精通 vi。您将会快速学会在 vi 中移动、编辑文本、使用插入模式、拷贝粘贴文本及使用重要 vim 扩展功能,如可视化模式和多窗口编辑。
如果您还不知道 vi 或不习惯用它,应认为您有这方面欠缺而接受本教程,加紧学习这种最流行功能强大的 Linux/UNIX 可视化编辑程序。
导航
在此教程中导航非常容易:
获取帮助
有关本教程的技术问题,请与作者 Daniel Robbins 联系,他的邮件地址是 drobbins@gentoo.org。
Daniel Robbins 生活在 New Mexico 的 Albuquerque,是 Gentoo Technologies, Inc. 的总裁/CEO,是 Gentoo Linux 的创始人,Gentoo Linux 是 PC 的高级 Linux,是 Portage 系统,Linux 的下一代 ports 系统。他还是 Macmillan books Caldera OpenLinux Unleashed, SuSE Linux Unleashed 和 Samba Unleashed 撰稿作家。Daniel has been involved with computers in some fashion since the second grade, when he was first exposed to the Logo programming language as well as a potentially dangerous dose of Pac Man. This probably explains why he has since served as a Lead Graphic Artist at SONY Electronic Publishing/Psygnosis. Daniel enjoys spending time with his wife, Mary, and his new baby daughter, Hadassah.
二。第一步
学习 vi -- 快速
学习 vi 有一点很难 -- vi 有许多命令。 要高效地使用 vi,必须记住一些命令。这可能要花好长时间,而此教程的目标之一就是少花一点时间。因此,如何帮您在短时间内记住诸多命令是本教程的一个挑战。
要处理好这个挑战,随着教程的深入,我们将逐渐把这些命令一起放在一个“巧表单”中。此表将包含所有 vi 重要命令。学完教程后,如果忘记某一个命令,就可以参考巧表单。过一段时间后,当您记住这些命令,就不用过分依赖于巧表单。
学习过程
本教程将使用几种技术帮您学习。首先,就象您期望那样,让我们来讨论一下一个命令是如何工作的。然后,要求您在 vi 中尝试使用这些命令(练习),最后,让您将命令转录到巧表单(以备参考)。如果想要快速学会 vi,按照这个步逐进行是很重要的。试着在 vi 中使用一条命令,然后记在您的 巧表单 上便于记忆。
介绍 vim
vi 版本有多种,在此将介绍如何使用称为 vim 的版本。vim 非常流行,它有一些更好的扩展功能(因此无论何时我在演示 vi 特定命令时都要作记录),如果您需安装 vim,可以从 http://www.vim.org 上下载。除了是加强的命令行 vi,vim 还带有一个很不错的图形编辑器 gvim,您可以对其进行配置来使用 GTK+ GUI 库。下面是从我的系统抓下的一屏:
如果您是 vi 新用户,应该在系统上运行 gvim。对于初学者,从 GUI 使用 vi 会容易许多。
三。开始
选一个文件
在使用 vi 编辑文件之前,需要知道如何使用 vi 在文件中移动。vi 有许多移动命令,让我们来介绍一下。作为这一部分练习,找一个不重要的文本文件,按照下列方式,将文件装入 vi 中:
MILY: Courier New, Courier, monospace"> $ vi myfile.txt
如果您安装的是 vim,输入“vim myfile.txt”。如果您愿意使用 gvim,输入“gvim myfile.txt”。myfile.txt 应是系统上的一个文件名。
在 vi 中
在 vi 中装入文件后,将会在屏幕看到文本文件的一部分。 恭喜 -- 您已在使用 vi! 与其它许多编辑器有所不同,vi 启动后,处于一种特殊的“命令模式”。这意味着如果您按“l”,光标将向右移动一个字符,而不是在文件当前位置插入“l”。在命令模式下,键盘上的字符是用来向 vi 发送命令,而不是插入文字字符。最基本命令类型之一是移动命令;让我们来介绍一些。
在 vi 中移动,第一部分
在命令模式下,可以使用 h、j、k 和 l 键向左、向下、向上和向右移动光标。如果您使用的是当今 vi 流行的版本,还可以使用方向键来实现移动。然而,一旦您习惯了 h、j、k 和 l 键,就很方便,因为这样您的手指就不必从主键盘行移开。尝试一下,使用 h、j、k 和 l (及方向键)让光标在文本文件中移动。试着按住 h 键直到光标来到行首。注意,当光标已在行首时,vi 不允许用 h 键折到上一行。同样,当光标在行末时,也不允许使用 l 键折到下一行。
在 vi 中移动,第二部分
vi 提供一些特殊的快捷方式让光标跳到当前行的行首或行末。您可以按 0 (零) 或^跳到一行的第一个字符,按 $ 跳到一行的最后一个字符,试试看。既然 vi 有许多方便的移动命令,因此它可做成很大“pager”(就像更多或更少命令)。将 vi 用作 pager 还能帮您快速学会所有移动命令,移动到文件结尾G或着:$。
您还可以用 ^F (control-F) 和 ^B (control-B) 一次向前或向后翻页,还可以用 ^d (control-d) 和 ^u (control-u) 一次向前或向后翻半页。目前 vi 流行版本(像 vim)允许您使用 PGUP 和 PGDOWN 来翻页。
单词移动,第一部分
vi 还允许您以单词为单位向左或向右移动。要移到下一个单词的第一个字符,请按 w。要移到下一个单词的最后一个字符,请按 e。要移到前一个单词的第一个字符,请按 b。不妨试试看。
单词间移动,第二部分
练习完单词移动后,您可能意识到这种情况:vi 将某些单词(如 foo-bar-oni)认为是 5 个单独的单词!这是因为缺省情况下,vi 按空格或标点符号分隔单词。因此 foo-bar-oni 被认为是 5 个单词:“foo”、“-”、“bar”、“-”和“oni”。
有时需要这样,但有时不需要这样。可喜的是,vi 还能识别“长单词”,即 vi 只按空格或新行来分隔长单词。这意味着尽管 foo-bar-oni 被 vi 认为是 5 个单词,但被认为是 1 个长单词。
单词间移动,第三部分
要跳到前一个或后一个长单词,可以使用大写单词间移动命令。使用 W 可跳到下一个长单词的第一个字符,使用 E 跳到下一个长单词的最后一个字符,使用 B 跳到上一个长单词的第一个字符。练习一下,并比较匹配单词间移动命令和匹配长单词间移动命令的不同。
快速移动
在开始把这些命令集中到 巧表单之前,让我们再来学习几条命令。您可以使用 ( 和 ) 字符将光标移到前一个句子或后一个句子的句首。此外,可以使用 { 或 } 跳到当前段或下一段段首。测测看!
退出 |
我们已经学习了基本移动命令,但还有几个命令您需要知道。输入 :q 退出 vi,如果不起作用,可能是您不小心修改了文件,要让 vi 不保存任何更改退出,请输入 :q!。这些操作应在命令提示模式下进行。
在 vi 中,以“:”开始的所有命令都是“ex-mode” 命令。这是因为 vi 有一个非可视化编辑器叫做“ex”。类似地,它可以用来执行基于行的编辑操作。此外,还可用来退出 vi,如上所述。如果您在命令模式下敲 Q 键,将转换到 ex 模式。如果处于 ex 模式,您将会看到 : 提示符,此时敲 Enter 键,整屏向上滚动。要回到 vi 的命令模式,敲入 vi 并回车。
开始巧表单
已经学习了许多命令,该是将他们转录到巧表单的时候了。为了做巧表单,需要一张 A4 大小的信纸(我们将要在上面放许多信息!)。 下面是我的巧表单,我已将所有到目前为止所学的命令转录到其上。如果可能,仿效我的布局,以便能在一张纸填下所有内容。
四。各种vi命令
光标移动
让我们继续快速学习命令。在命令模式下,输入<行号>G 可以跳到特定行。要跳到文件第一行,输入 1G。注意,G 是大写。
如果要跳到特定文本样式下一次出现的地点,输入 /regexp 并回车,regexp 是指要查找的正则表达式。如果您不知道如何使用正则表达式,不用担心,输入 /foo 将会来到下一个 foo。需要注意的是, 在涉及到字符 ^、.、$ 或 时,在这些字符前加上反斜杠(),才能正常查找。例如,/foo.gif 将会匹配“foo.gif”。
要向前重复搜索,按 n 键。要向后搜索,按 N 键。同样,在您的 vi 编辑器测一测这些命令。
保存及另存为...
我们已经介绍如何使用 ex 命令 :q 从 vi 中退出。如果想保存更改,输入 :w。如果想将更改保存为另一个文件,输入 :w filename.txt 便可另存为 filename.txt。如果想保存并退出,输入 :x 或 :wq。
在 vim (及其它高级 vi 编辑器,像elvis) 的 :w 中,可以一次打开多个缓冲。要将一个文件在新窗口中打开,输入 :sp filename.txt。filename.txt 将出现在分开的新窗口中。要在窗口间切换,输入 ^w^w (control-w 两次)。如果输入 :q、:q!、:w 和 :x 命令,则只对当前激活窗口有效
简单编辑
现在,可以学习一些简单编辑命令了。之所以称之为简单,是因为这些命令仍是命令模式下使用。更复杂的编辑命令会自动地切换到插入模式,插入模式允许从键盘输入文字数据。稍后我们会学这类命令。
现在,尝试移动光标,并重复击 x 键。您将会看到 x 键可删除当前光标所在的字符。然后,将光标移到文本文件的某段中间并击 J 键(大写),您将会看到 J 命令将下一行接到当前行行末。现在,将光标移到一个字符并敲 r,然后输入新字符;您将看到原字符被替换掉,r单字符替换,R多字符替换,s多字符替换单字符,S整行替换。最后,将光标移到文件的任意行,键入 dd,您将会看到 dd 删除了当前行。u放弃上次操作。
重复及删除
敲 . 键可以重复任何编辑命令。 试验一下,您就会发现输入 dd.. 将删除 4 行,J...... 将连接 4 行。通常,vi 提供另一种便捷方式。
要删除文本,还可以联合使用 d 命令和移动命令。例如,dw 用来删除从当前位置到下一个单词词首的所有字符;d) 用来删除到下一个句首;d} 删除本段剩余部分。试验一下 d 命令和其它编辑命令直到熟练。
恢复!
已经练习了删除,下一步该学习如何撤消所作的更改。按 u 键,以前版本的 vi 只允许您撤消上一步更改。然而,新版本 vi 像 vim 允许您重复按 u 键一步步撤消对文件所作的更改。结合使用一下 d 命令和 u 命令,然后继续下一屏。
更新巧表单
该更新 巧表单了!添入所学的所有命令,您的巧表单看起来应类似于:
五。插入模式
插入模式
到目前为止,我们已经学习了在 vi 中移动光标、执行文件输入输出和执行基本编辑操作。然而,还没有介绍如何真正以自由文本格式输入。这是故意安排的,因为如果一开始就讲 vi 插入模式,这过于复杂。但是在您熟练掌握插入模式后,其复杂性(和灵活性)就成为您的资本。
在插入模式下,您可以直接向屏幕输入文本,就像在许多其它可视化编辑器一样。输入或修改完后,按 Escape 键可返回命令模式。要进入插入模式,按 i 或 a 即可。如果按 i,输入的文本将插在光标处字符之前,如果按 a 输入文本将追加再光标处字符之后。请记住,输入文本后,按 escape 键返回命令模式。
插入模式的好处
我们继续学习使用 a 和 i 命令。按 a 或 i,输入一些文本,然后按 escape 回到命令模式。按 a 或 i 后,按一下回车键,看看出现什么情况。试着使用方向键和删除键,去感觉一下插入模式是如何工作的。如果使用方向键和删除键,可以执行功能更强的编辑步骤而无需不停地切换插入模式。
插入选项
有一些其它便捷方法进入插入模式。按 A (大写),输入文本将追加到当前行末,不管光标在当前行何处。同样,I (大写)将输入文本插到当前行的行首。按 o 可在当前行下面生成一空行并插入文本,按 O (大写)在当前行上面生成一空行。要以一新行替换当前整行,按 clearcase/" target="_blank" >cc。要替换光标当前所在位置到行末,请输入 c$。要替换光标当前所在位置到行首,输入 c0。
这些命令除了执行特殊操作,还使 vi 处于插入模式。输入文本后,按 escape 返回命令模式。
更改文本
当我们键入 cc、c0、c$ 时,我们已在开始使用 c (更改)命令了。cc 是一种特殊形式的更改命令,类似于 dd。c0 和 c$ 命令就是更改命令和移动命令联合使用的例子。在这种形式下,c 类似于 d,但它使 vi 处于插入模式,以便可以在删除区输入要替换的文本。尝试将一些移动命令与 c 一起使用,并在您的文件中实验一下(提示: cW、ce、c(、.)。
复合命令
在您开始使用复合命令(像 d{ 和 cw)时,vi 确实已成为功能强大的编辑器了。除了这些命令外,您还可以将移动命令与数字一起使用,例如 3w,它让光标向右跳 3 个单词。还有更多的复合移动命令示例:12b、4j。
除了(数字)(移动命令)一起使用,vi 还允许 d 和 c 与数字或移动命令一起使用。应此,d3w 将删除光标后 3 个单词,d2j 将删除当前行和下两行。测测 c 和 d 与一些移动命令一起使用的例子,然后感受一下强大并简洁的 vi 编辑功能。一旦熟悉了这些命令,您就可以以惊人的速度进行文件编辑。
更新巧表单
又该更新巧表单了。到现在为止,它应类似于:
六。高效特性
嗯,真不错...
到目前为止,我们已学习了如何移动、保存并退出、进行简单的编辑和删除、使用插入模式。按照 巧表单所列,您应该能够使用 vi 进行几乎所有的任务。
然而,vi 还有许多功能更强的命令。本章里,将要学习如何剪切、拷贝和粘贴、搜索和替换以及自动缩进功能。这些命令有助于使 vi 更有趣、更有效。
可视模式
剪切和粘贴的最佳方法是使用可视化模式,这是一种特殊模式,已经加入新版本的 vi,如 vim 和 elvis。您可以认为可视化模式是“高亮显示文本”模式。一旦文本被高亮显示,就可以进行拷贝或删除,并进行粘贴。如果您使用 gvim,可以通过按住鼠标左键,简单拖拉要选区域便可高亮显示:
此外,您还可以按 v 进入可视化模式(如果您使用的是 vi,这可能是唯一选择)。然后,用移动命令移动光标(通常用方向键)来选中一段文本。选中后,就可以进行剪切或拷贝文本。
如果要拷贝文本,按 y (代表“yank”),如果要剪切文本,按 d,然后,vi 将回到命令模式。现在,将光标移到要插入剪切的或拷贝的文本处,按 P 插到光标之后,按 p 插到光标之前。好,剪切/拷贝和粘贴就完成了!多测几个拷贝/剪切和粘贴操作,然后继续下一屏。
替换文本
要替换文本式样,应使用 ex 模式。如果想替换当前行出现的第一个式样,输入 :s/regexp/replacement/ 并按回车键,其中 regexp 是要匹配的式样,replacement 是替换字符串。要替换当前行所有匹配,输入 :s/regexp/replacement/g 并按回车。要替换文件中所有匹配式样(这通常是需要的),输入 :%s/regexp/replacement/g。如果要进行全程替换时,希望 vi 每次给出确认提示,输入 :%s/regexp/replacement/gc (代表“confirm”) 并回车。
缩进
在编辑源代码时,vi 支持自动缩进。编辑源文件(如 .c 文件)时,大多数新版本 vi(像 vim)将自动启用自动缩进模式。如果自动缩进功能启用,可以使用 ^d (control-d) 来向左缩进一级,用 ^t (control-t) 向右缩进一级。如果未自动启用自动缩进,可通过在 ex 命令模式下输入 :set autoindent 来手动启用。还可以按喜好设置 tab 大小,设置命令为 :set tabstop 命令;目前 :set tabstop=4 很流行。
最后的巧表单
好,我们已学完了 vi! 把所有高级编辑命令加入巧表单,现在,看起来如下:
七。总结
卷起巧表单
把 巧表单卷起来放在旁边,开始使用 vi 编辑文件写电子邮件。必要时参考一下巧表单;您将会发现在一星期内会记住所有命令,到时您就知道 vi 的功能有多强大!
参考资料
下面是一些参考资料,可能对您进一步学习 vi 有所帮助:
您的反馈意见
请告诉我们:此教程是否对您受益匪浅?怎样才能做的更好?同时我们希望您能提出一些其他教程主题。谢谢!
对本教程的内容,如果您有问题,请联系我们的 Linux 编辑,developer@cn.ibm.com。