240 likes | 350 Views
第 8 章 使用 vi 编辑文件. 8.1 vi 的启动与退出 8.2 vi 的两种模式 8.3 基本 vi 命令 8.4 使用 vi 查找和替换 8.5 编辑多个文件 8.6 小结 习题. vi 的名字取自于 visual ,意为“直观”,它是一个 全屏幕文本编辑程序。在 Linux 系统中 vi 是最常用的 编辑程序,它的文本编辑功能十分强大,但使用起来 比较复杂。初学者可能感到困难,经过一段时间的学 习和使用后,你就会体会到使用 vi 非常方便。 Linux
E N D
第8章 使用vi编辑文件 8.1 vi的启动与退出 8.2 vi的两种模式 8.3 基本vi命令 8.4 使用vi查找和替换 8.5 编辑多个文件 8.6 小结 习题
vi的名字取自于visual,意为“直观”,它是一个 全屏幕文本编辑程序。在Linux系统中vi是最常用的 编辑程序,它的文本编辑功能十分强大,但使用起来 比较复杂。初学者可能感到困难,经过一段时间的学 习和使用后,你就会体会到使用vi非常方便。Linux 系统中的vi其实是vim。vi与vim的用法很像,因为 vim是vi的增强版,所以vi的功能vim都有,而且vim 新增了许多vi没有的功能,它比vi容易使用。本章介 绍vi编辑程序的两种工作模式,即命令模式和输入模 式。
8.1 vi的启动与退出 1. vi的启动 输入vi命令后,便进入全屏幕编辑环境,此时的 状态为命令模式。 (1) vi 进入vi的一个临时缓冲区,光标定位在该缓冲区 第1行第1列的位置上。 (2) vi file1 如果file1文件不存在,将建立此文件;如该文件 存在,则将其拷贝到一个临时缓冲区。光标定位在该 缓冲区第1行第1列的位置上。
(3) vi+file1 如果file1文件不存在,将建立此文件;如该文件 存在,则将其拷贝到一个临时缓冲区。光标定位在文 件最后1行第1列的位置上。 (4) vi+Nfile1(N:为数字) 如果file1文件不存在,将建立此文件;如该文件 存在,则将其拷贝到一个临时缓冲区。光标定位在文 件第N行第1列的位置上。 (5) vi+/string file1 如果file1文件不存在将建立此文件;如该文件存 在则将其拷贝到一个临时缓冲区。光标定位在文件中 第一次出现字符串string的行首位置。
2. 退出vi 建议在退出vi前,先按ESC键,以确保当前vi的 状态为命令方式,然后再键入“:”(冒号),输入下列 命令,退出vi。 (1) :w 将编辑缓冲区的内容写入文件,则新的内容就替 代了原始文件。这时并没有退出vi,必须进一步输入 下述命令才能退出vi: :w filename(存入指定文件) :q
(2) :wq 即将上面的两步操作可以合成一步来完成,先执 行w,后执行q。 (3) :x和zz(注意:zz前面没有“:”) 功能与(2)等价。 (4) :q!(或:quit) 强行退出vi,使被更新的内容不写回文件中。仅 键入命令:q时,如vi发现文本内容已被更改,将提示 用户使用“:quit”命令退出。
8.2 vi的两种模式 当vi工作在命令模式下,输入的字符被视为执行 特定vi功能的命令;而工作在输入模式下,输入的字 符是编辑文件的正文。命令模式是vi的默认模式,命 令模式下输入英文大小写字母的含义是有区别的。两 种模式的切换见图8.1。 图8.1 模式转换示意图
在命令模式下,你所能进行的操作有移动光标在在命令模式下,你所能进行的操作有移动光标在 屏幕上的位置,标记、删除、移动、复制字符或文本 区块,还可以将文件写入或退出编辑器,亦可设置编 辑环境,如寻找字符串、列出行号等。此外在系统提 示符下输入vi及文件名称后,即进入vi全屏幕编辑画 面(命令模式)。 只有在输入模式下,才可进行文字输入,按ESC 键可以回到命令模式。在命令模式下可按“i”或“a”或 “o”等键进入输入模式。
i——在目前光标前插入所要输入之文字。 a——在目前光标后开始输入文字。 o——在当前光标所在行下新增一空行,并从行首开 始输入文字。 I——插于行首。 A——插于行尾。 O——在当前光标所在行上新增一空行,并从行首开 始输入文字。 按下ESC键随时可返回vi的命令模式。如果不能 确定现在vi是在哪个模式下,按下ESC键以使其在命 令模式下,然后再从这里继续;如果按下ESC键时已 经在命令模式了,系统会鸣叫且屏幕闪一下,通知你 已在命令模式中。
8.3 基本vi命令 1. 移动光标 移动光标h、j、k、l:分别控制光标左、下、 上、右移一格。 Ctrl+b: 上滚一屏。 Ctrl+f: 下滚一屏。 Ctrl+d: 下滚半屏。 Ctrl+u: 上滚半屏。 G: 移到文件最后。 w: 移到下个字的开头。 b: 跳至上个字的开头。
2. 删除 x: 删除当前光标所在后面一个字符。 #x: 删除当前光标所在后面#个字符。例如,5x表示 删除5个字符。 dd: 删除当前光标所在行。 #dd: 删除当前光标所在后面#行。例如,5dd表示删 除自光标算起的5行。 :l,#d: 例如,:1,12d表示删除自行1至行12的文字。 X: 删当前光标的左字符。 D: 删至行尾。
3. 更改 cw: 更改光标处的字到此单字的字尾处。 c#w: 例如,c3w表示更改3个字。 cc: 修改行。 C: 替换到行尾。 4. 取代 r: 取代光标处的字符。 R: 取代字符直到按ESC为止。
5. 复制 yw: 拷贝光标处的字到字尾至缓冲区。 P: 把缓冲区的资料贴上来。 yy: 拷贝光标所在之行至缓冲区。 #yy: 例如,5yy,拷贝光标所在之处以下5行至缓冲 区。 6. 复原 u: 复原至上一操作。 g: 列出行号,及相关信息。 7. 列出行号 :set nu (nu为行数)
8. 寻找字符串 /word由首至尾寻找“word”字符串,按n可往下继续 找。 ?word由尾至首寻找“word”字符串,按N可往前继续 找。 9. 跳行 :100可跳至第100行。 10. 重复上一个命令 .重复上一个命令。
8.4 使用vi查找和替换 vi提供了几种定位查找一个指定的字符串在文件 中位置的方法。同时还提供一种功能强大的全局替换 功能。 1. 查找一个字符串 一个字符串是一行上的一个或几个字符。 为查找一个字符串,在vi命令模式下键入“/”,后 面跟要查找的字符串,再按回车。vi将光标定位在该 串下一次出现的地方上。键入n跳到该串的下一个出 现处,键入N跳到该串的上一个出现处。
为了在文件中回头查找,使用?代替/。在此情况为了在文件中回头查找,使用?代替/。在此情况 下,键入n跳到该串的上一个出现处,键入N跳到该 串的下一个出现处。 如果vi找到要求的串,光标会停留在该串第一次 出现的地方。如果没有找到该串,vi会在屏幕的最后 一行显示pattern not found。 查找通常是区分大小写的,如果希望vi在查找过 程中忽略大小写,则键入:set ic。要使其变回默认状 态,则键入:set noic。
某些特殊字符(/&!.^*$\?)对查找过程有特殊 意义,因此如果这些字符出现在查找串中必须进行 转意。为转意一个特殊字符,需要在该字符前面加 一个反斜杠(\)。例如,要查找字符串anything?,则 键入/anything\?再按回车键。
2. 精确查找字符串 在vi中可以通过在字符串中加入如下特殊字符, 从而使得查找更加精确。 匹配行首,字符串要以^开头 匹配行尾,字符串要以$结束 匹配词首,字符串的串首键入\< 匹配词尾,字符串的串尾键入\> 匹配任意字符,字符串的要匹配的位置键入一个 点(.)
例如,要查找一个以search为行首的行,则键入 /^search ,要查找一个以search为行尾的行,则键入 /search$。 3. 替换一个字符串 替换字符串是以查找为基础,所有用于查找的特 殊匹配字符都可以用于查找和替换。替换时要指定替 换的范围(1,n),1和n指行号,n为$时指最后一行。 S是替换命令,g代表全程替换。例如, :l,$s/patternl/pattern2/g——将行l至结尾的文 字,patternl的字符串改为pattern2的字符串,如无g 则仅更换每一行所匹配的第一个字符串,如有g则将 每一个字符串均做更换。
8.5 编辑多个文件 1. 将一个文件插入另一个文件中 将另一个文件filename插入当前文件的line#行位 置。命令格式, :line# r filename 例如,将文件file1插入到当前文件的当前光标位 置,键入, :r file1
2. 编辑一系列文件 要想编辑多个文件,需要在vi命令之后列多个文 件名,中间用空格分开。键入:n进入下一个文件。要 想跳转到下一个文件,而不保存对当前文件所做的修 改,则键入:n!来代替:n。 vi file1 file2 file3 3. 文件之间复制行 为将行从一个文件file1复制到另一个文件file2, 先编辑第一个文件file1,用#yy(#代表数字)把要复制 的行拷贝到缓冲区,不退出vi,编辑另一个文件,键 入,:n file2 再按p键,把缓冲区中的内容贴在当前光标位置。
#include <stdio.h> #include <math.h> main() { int i; double a; for(i=1;i<11;i++) { a=i*1.0; printf(“%2d,%3d,%4d,%7.5f\n”, i,i*i,i*i*i,sqrt(a)); } }
8.6 小结 本章主要介绍了vi编辑器的使用,重点要掌握vi 的两种操作模式:输入模式和命令模式,并熟练掌握 命令模式下的插入、修改、删除、拷贝粘贴,以及查 找和替换命令。
习题 8-1 vi中拷贝一行文字并粘贴到另一位置用什么命令? 8-2 vi中把某个字符串全程替换为另一个字符串的命令是什么? 8-3 使用vi编辑器在目录里创建一个文本文件,然后输入一篇英文文章,并练习使用各种编辑命令。