Linux基础教程(1) 操作系统基础清华大学计算机基础教育课程系列教材 汤荷美 董渊 李莉 程志锐 编著总 目 录第1部分 Linux操作系统第1章 操作系统概述 第2章 处理机管理 第3章 存储管理 第4章 调度 第5章 设备 第6章 文件系统第2部分 操作系统命令及shell编程第7章 Linux基本命令 第8章 使用vi编辑文件 第9章 shell编程第3部分 系 统 管 理第10章 Linux系统软件的获取和安装 第11章 账号管理 第12章 文件系统管理 第13章 TCP/IP网络管理 第14章 备份与恢复 第15章 XWindow及Genie应用程序第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其实是vimvi与vim的用法很像 ,因为vim是vi的增强版,所以vi的功能vim都有, 而且vim新增了许多vi没有的功能,它比vi容易使用 本章介绍vi编辑程序的两种工作模式,即命令模 式和输入模式1. vi的启动 输入vi命令后,便进入全屏幕编辑环境,此时 的状态为命令模式 (1) vi 进入vi的一个临时缓冲区,光标定位在该缓冲 区第1行第1列的位置上 (2) vi file1 如果file1文件不存在,将建立此文件;如该文 件存在,则将其拷贝到一个临时缓冲区光 标定位在该缓冲区第1行第1列的位置上8.1 vi的启动与退出(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 file12. 编辑一系列文件 要想编辑多个文件,需要在vi命令之后列多个文件名 ,中间用空格分开键入:n进入下一个文件要想 跳转到下一个文件,而不保存对当前文件所做的修 改,则键入:n!来代替:n vi file1 file2 file3 3. 文件之间复制行 为将行从一个文件file1复制到另一个文件file2,先编 辑第一个文件file1,用#yy(#代表数字)把要复制的 行拷贝到缓冲区,不退出vi,编辑另一个文件,键 入, :n file2 再按p键,把缓冲区中的内容贴在当前光标位置。
8.6 小结 本章主要介绍了vi编辑器的使用,重点要掌握vi的两 种操作模式:输入模式和命令模式,并熟练掌握命 令模式下的插入、修改、删除、拷贝粘贴,以及查 找和替换命令习题 8-1 vi中拷贝一行文字并粘贴到另一位置用什么命令 ? 8-2 vi中把某个字符串全程替换为另一个字符串的命 令是什么? 8-3 使用vi编辑器在目录里创建一个文本文件,然后 输入一篇英文文章,并练习使用各种编辑命令。