
第3章vi编辑器的使用.ppt
53页LinuxLinux操作系统操作系统 第第3章章 vi编辑器的使用编辑器的使用 3.1 vi的工作模式的工作模式 3.2 vi的启动和退出的启动和退出 3.3 vi长指令和短指令长指令和短指令 3.4 vi高级应用高级应用 习题习题 LinuxLinux操作系统操作系统 3.1 vi的工作模式的工作模式 在使用vi之前,首先应该了解一下vi的工作模式 vi有两种工作模式:编辑模式和指令模式在vi中用户可以在这两种模式间切换 编辑模式:用来输入和编辑文件的模式,屏幕上会显示用户的键入,按键不是被解释为命令执行,而是作为文本写到用户的文件中LinuxLinux操作系统操作系统 指令模式:用来编辑、存盘和退出文件的模式运行vi 后,首先进入指令模式此时输入的任何字符都被视为指令对待,键入的命令不会在屏幕上显示 状态行:屏幕底部一行,通常是第24行,被vi编辑器用来反馈编辑操作结果错误消息或者提供信息的消息会在状态行中显示出来vi还会在24行显示那些以冒号(:)或者问号(?)开头的命令LinuxLinux操作系统操作系统 如果从指令模式切换到编辑模式,则可以按【Insert】键;如果从编辑模式切换到指令模式,则可以按【Esc】键。
如果不能断定目前处于什么模式,则可以多按几次【Esc】键,这时系统会发出蜂鸣声,证明已经进入指令模式 【注意】 Linux下的命令是大小写敏感的LinuxLinux操作系统操作系统 3.2 vi的启动和退出的启动和退出 1. 启动vi 要进入vi,可以直接在系统提示字符下键入vi,按空格,然后再输入文件名(本例中以test.txt作为文件名),像下面一行: vi test.txt 图3-1显示了用vi新建文件test.txt的初始画面LinuxLinux操作系统操作系统 ~~~~~~“test.txt” [new file] 0 lines 0 characters图图3-1 进入进入vi的初始化画面的初始化画面LinuxLinux操作系统操作系统 vi可以自动帮你载入所要编辑的文件或是开启一个新文件如果test.txt文件已存在,vi就会在屏幕上显示文件的第一页(前23行)如果test.txt是一个新文件,vi就会清屏,光标会出现在屏幕的左上角,屏幕左方会出现波浪符号“~”,凡是列首有该符号就表示此列目前是空的。
LinuxLinux操作系统操作系统 2. 退出vi 要离开vi可以在指令模式下键入“:q”,“q!”或“:wq”离开(注意冒号) (1) :q 如果用户只是读文件的内容而未对文件进行修改,可以使用“:q”退出vi;如果用户对文件的内容作了修改,则用“:q”退出vi,那么vi在屏幕的底行会提示下面的信息,vi编辑器还保留在屏幕上: No write since last change (:q! overrides).LinuxLinux操作系统操作系统 (2) :q! 如果用户对文件的内容作了修改,然后决定要放弃对文件的修改,可以使用“:q!”强行退出vi,在这种情况下文件的内容不变 (3) :wq 在大多数情况下,用户在编辑结束时,用“:wq”命令保存文件,然后退出vi (4) :n,mw filename 该指令将第n~m行的文本保存到指定的文件filename中 LinuxLinux操作系统操作系统 (5) ZZ 该指令表示快速保存文件的内容,然后退出vi,功能和“:wq”一样。
(6) :w! vi编辑器通常防止覆盖一个已存在的文件比如用户键入“:w test.txt”并按回车键,而test.txt文件已存在时,vi会显示如下的信息提出警告: "test.txt" File exist – use ":w! to overwrite" LinuxLinux操作系统操作系统 3.3 vi长指令和短指令长指令和短指令 vi的指令分为两种:长指令和短指令 长指令以冒号开头,键入冒号后,在屏幕的最末尾一行会出现冒号提示符,等待用户键入指令,输入完指令后回车,vi就会执行该指令 短指令和快捷键相似,键入短指令之后,vi不会给任何提示就直接执行 接下来我们以分组的形式来介绍vi常用的指令LinuxLinux操作系统操作系统 (1) 输入输出命令的作用如表3-1所示表3-1 输入输出命令命 令作 用a在光标后输入文本A在当前行末尾输入文本i在光标前输入文本I在当前行开始输入文本o在当前行后输入新一行O在当前行前输入新一行LinuxLinux操作系统操作系统 (2) 光标移动命令的作用如表3-2所示。
表3-2 光标移动命令命 令作 用B移动到当前单词的开始e移动到当前单词的结尾w向后移动一个单词h向前移动一个字符j向下移动一行k向上移动一行l向后移动一个字符LinuxLinux操作系统操作系统 (3) 删除操作命令的作用如表3-3所示表3-3 删除操作命令命 令作 用x删除光标所在的字符dw删除光标所在的单词d$删除光标至行尾的所有字符D同d$dd删除当前行LinuxLinux操作系统操作系统 (4) 改变与替换命令的作用如表3-4所示表3-4 改变与替换命令命 令作 用r替换光标所在的字符R替换字符序列cw替换一个单词ce同cwcb替换光标所在的前一字符c$替换自光标位置至行尾的所有字符C同c$cc替换当前行LinuxLinux操作系统操作系统 (5) 查询命令的作用如表3-5所示表3-5 查 询 命 令命 令作 用/abc向后查询字串“abc”?abc向前查询字串“abc”n重复前一次查询N重复前一次查询,但方向相反LinuxLinux操作系统操作系统 (6) 拷贝与粘贴命令的作用如表3-6所示 表3-6 拷贝与粘贴命令命令作 用yw将光标所在单词拷入剪贴板y$将光标至行尾的字符拷入剪贴板Y同y$yy将当前行拷入剪贴板p将剪贴板中的内容粘贴在光标后P将剪贴板中的内容粘贴在光标前LinuxLinux操作系统操作系统 (7) 文件保存及退出命令的作用如表3-7所示。
表3-7 文件保存及退出命令命 令作 用:q不保存退出:q!不保存强制性退出:w保存编辑:w filename存入文件filename中:w! filename强制性存入文件 filename 中:wq保存退出:x同 :wqZZ同 :wqLinuxLinux操作系统操作系统 (8) 其他命令的作用如表3-8所示 表3-8 其他vi命令命 令作 用u取消上一次的操作U可以恢复对光标所在行的所有改变J把两行连接到一起:set用来设置或浏览vi系统当前的选项:X对所编辑的文件进行简单加密LinuxLinux操作系统操作系统 3.4 vi高级应用高级应用 3.4.1 设置设置vi环境环境 vi编辑器的行为可以通过设置编辑参数来定义,并且有许多种方法可以进行这种设置最直接的方法是使用vi的set命令进行设置这种情况下,vi在进行设置前必须处于指令状态使用这种方法的用户可以设置任何选项,但是选项的改变是临时的,并且只在用户当前编辑会话下有效当用户退出vi编辑器时,设置会被丢弃LinuxLinux操作系统操作系统 本小节介绍一些有用的vi参数,表3-9对它们进行了汇总(按字母顺序列出)。
大多数选项名有缩写形式,用户进行设置时既可以使用选项名的全称,也可以使用缩写LinuxLinux操作系统操作系统 表3-9 vi 选 项选 项缩 写功 能autoindentai将新行与前一行的开始对准ignorecaseic在搜索选项下,忽略大小写magic-在搜索时,允许使用特殊字符numbernu显示行号report-告知用户最后一个命令作用行的行号scroll-设定使用[Ctrl-d]命令翻滚的行数shiftwidthsw设定缩进空格数,一般与autoindent一同使用show modesmd在屏幕右角显示vi编辑器模式terse-缩短错误信息wrapmarginwm将右边界设定为一定的字符个数LinuxLinux操作系统操作系统 1. autoindent 选项 autoindent选项将用户键入的每个新行与前一行的开始对齐该选项对于使用C等其他结构化程序设计语言编写程序时十分有用使用【Ctrl-d】可减少一级缩进,每次执行【Ctrl-d】,会增加一个由shiftwidth选项指定的数值本选项的默认值为noaiLinuxLinux操作系统操作系统 2. ignorecase 选项 vi编辑器提供大小写敏感的搜索,也就是说它区分大写字母和小写字母。
要使vi忽略大小写,键入“:set ignorecase”并按回车键要返回大小写敏感状态,键入“:set noignorecase”并按回车键 3. magic选项 某些符号(如方括号[ ])在用于搜索时有特殊的含义当用户将这些符号开头置为nomagic时,这些符号不再有特殊含义LinuxLinux操作系统操作系统 4. number 选项 vi编辑器一般情况下不显示每行的行号显示行号可以使用户对自己文件的大小及自己正在编辑文件的哪一部分等心里有数要显示行号,键入“:set number”,然后按回车键如果不希望显示行号,键入“:set nonumber”并按回车键 LinuxLinux操作系统操作系统 5. report选项 vi 编辑器对用户的编辑工作并不给予任何反馈例如,如果用户键入“dd”,vi删除当前行文本,但不会在屏幕上显示任何确认消息如果希望在屏幕上看到自己编辑的反馈信息,用户可以使用report选项来实现该参数被设为使vi编辑器报告发生变化的行的最小行数。
LinuxLinux操作系统操作系统 要将report选项设为2行时有效,键入“:set report = 2”并按回车键于是,当用户的编辑工作作用两行时,vi显示相应报告例如,删除两行并复制两行,将在屏幕底部产生类似下面的报告信息:2 lines deleted2 lines yankedLinuxLinux操作系统操作系统 6. scroll选项 scroll选项用于设定用户在使用【Ctrl-d】时希望滚动的行数例如,要想使屏幕滚动5行,键入“:set scroll = 5”并按回车键 7. shiftwidth 选项 该选项设定在设置了自动缩进时,使用【Ctrl-d】时的空格数该选项的默认设置为“sw = 8”例如,要把该设置改为10,键入“:set sw = 10”并按回车键LinuxLinux操作系统操作系统 8. showmode 选项 vi编辑器并不显示任何可见的反馈信息来告知当前是处于文本输入模式还是指令模式,这可能导致混淆,尤其是对于新手。
用户可以设置showmode选项来提供可见的反馈到屏幕,或者说showmode选项在状态行上指示你所处的模式LinuxLinux操作系统操作系统 要打开showmode选项,键入“:set showmode”并按回车键接着,根据用户需要在文本输入和指令模式之间切换,而vi在屏幕的右下角显示不同的信息如果用户键入“a”或“A”切换到编辑模式,vi显示APPEND MODE;如果用户键入“i”或“I”,vi将显示INSERT MODE;如果用户键入“O”或“o”,vi显示OPEN MODE等等 这些信息将一直显示在屏幕上,直到用户按【Esc】键切换到指令模式当屏幕上没有信息时,vi处于指令模 式 要 关 闭 showmode选 项 , 键 入 “: set noshowmode”并按回车键LinuxLinux操作系统操作系统 9. terse选项 该选项使vi编辑器显示缩短的错误消息该选项默认值为noterse 10. wrapmargin选项 该选项定义右边距用户的终端屏幕通常为80列。
当键入到行的末尾时(超过第80列),屏幕即开始一个新行,这就是所说的行回绕在用户按回车键时,屏幕同样开始一个新行因此,屏幕上一行的长度可以为1~80个字符之间的任何长度 LinuxLinux操作系统操作系统 但是,vi编辑器只在用户按回车键时,才在用户文件中生成一个新行如果用户在按回车键前键入了120个字符,这时键入的文本看起来是在2行,但实际在文件中,这120个字符只在1行中 过长的行在文件打印时可能会出现问题,并且屏幕显示的行号与实际文件中的行号相对应时容易产生混淆最简单的限制行长度的方法是在到达屏幕行末尾前按回车键另一种方法是设定wrapmargin参数以使vi编辑器自动插入回车LinuxLinux操作系统操作系统 例如,要将wrapmargin设为10(10是从屏幕右边界计数的字符的个数),键入“wm = 10”并按回车键于是当用户键入到第70列时,vi编辑器强迫回车,开始一个新行,以便留出右边距如果用户正在键入一个字时超过第70列,vi编辑器将把该字整个移至新行这也意味着右边界可能会对不齐wrapmargin选项的默认值是0,要关闭这个选项,键入“:set wrapmargin = 0”并按回车键即可。
LinuxLinux操作系统操作系统 3.4.2 缩写与宏缩写与宏 vi编辑器为用户提供一些捷径,以使用户的输入更快速、更简单ab”和“:map”是两个用于该目的的命令 1. 缩写操作符 缩写操作符“:ab”(缩写)命令使得用户给任何字符串指定缩写,该功能可以帮助用户提高输入速度用户可以为自己经常输入的文本选择一个易记的缩写,在vi编辑器中设置缩写后,就可使用该缩写代替原来的文本例如,要缩写本书中常用的文本Unix Operating System,键入“:ab uno Unix Operating System”并按回车键LinuxLinux操作系统操作系统 在这个例子中,“uno”是赋给Unix Operating System的缩写,因此,当vi处于文本输入模式时,任何时间用户键入“uno”接着键入一个空格时,vi都将uno变为Unix Operating System如果uno是另一个字的一部分,如unofficial,则并不会发生改变vi通过uno前后的空格来识别出uno是一个缩写,并把它扩展 要取消一个缩写,用户可以使用“:unab”(未缩写)操作符。
例如,要取消uno缩写,键入“:unab uno”并按回车键即可LinuxLinux操作系统操作系统 【实例3.1】(1) 键入“:ab lc linux course”并按回车键,将lc指定为linux course的缩写2) 键入“:ab 123 one,two,three,etc.”并按回车键,将123指定为one,two,three,etc.的缩写3) 键入“:ab”并按回车键,显示所有指定的缩写: lc linux course 123 one,two,three,etc.(4) 键入“:unab 123”并按回车键,取消123缩写LinuxLinux操作系统操作系统 2. 宏操作符 宏操作符(map)使用户能将一系列键指定给某一键如同缩写操作符给用户一个文本输入模式下的捷径一样,map给用户一个在指令模式下的捷径例如,将指令dd指定为q,键入“:map q dd”并按回车键此后,当vi处于指令模式时,每当用户键入q时,vi应删除光标所在的行 要取消一个map指定,用户可以使用“:unmap”操作符键入“:unmap q”并按回车键。
LinuxLinux操作系统操作系统 要查看map键的列表和它们指定的内容,键入“:map”并按回车键 用户也可以使用map指令为自己的终端指定功能键在这种情况下,用户键入“#n”作为键名,n代表功能键号例如,要指定dd到【F2】,键入“:map #2 dd”并按回车键即可此后,如果用户在vi的指令模式下按【F2】键,vi应删除光标所在的行LinuxLinux操作系统操作系统 【实例3.2】 下面例子显示部分指定键 (1) 键入“:map V /linux”并按回车键,将V键指定为搜索linux的搜索指令 (2) 键入“:map #3 yy”并按回车键,将【F3】指定为拷贝一行 (3) 键入“:map”并按回车键,显示已经指定的键: V /linux #3 yyLinuxLinux操作系统操作系统 【实例3.3】 假设用户希望在文件中查找“linux”,并将它替换为“LINUX”。
进行下面的操作: (1) 键 入 “:/linux”并 按 回 车 键 , 查 找 单 词“linux” (2) 键 入 “cwLINUX”, 然 后 按 【 Esc】 键 , 将“linux”改为“LINUX”并返回vi指令模式LinuxLinux操作系统操作系统 在映射键指定中,命令行中按【Ctrl-v】【Return】来代表回车,用【Ctrl-v】【Esc】来代表【Esc】键这样,要映射前面的命令到一个键中,比如说V键,键入“:map v /linux”,接着按【Ctrl-v】【Return】,然后键入“cwLINUX”,再按【Ctrl-v】【Esc】该命令行中使用了不可打印字符【Ctrl-v】和【Esc】,所以用户看到的屏幕如下所示: :map v /linux ^McwLINUX^[LinuxLinux操作系统操作系统 3.4.3 “.exrc”文件文件 用户在vi编辑器中所设置的所有选项都是临时的,当用户退出vi时,它们都会失效 要使这些设置成为永久的,而不需在每次使用vi时重新设置,可以将选项的设置保存到文件“.exrc”中。
LinuxLinux操作系统操作系统 【注意】 以“.”(点)开头的文件被称为隐藏文件 当用户打开vi编辑器时,它自动查看用户当前工作目录中的“.exrc”文件,并根据在文件中找到的内容设 置 编 辑 环 境 如 果 vi没 有 在 当 前 目 录 中 发 现“.exrc”文件,它将查找用户的主目录,并根据在那里发现的“.exrc”文件设置编辑环境如果vi一个“.exrc”文件也没有找到,则它对选项使用默认值LinuxLinux操作系统操作系统 vi检查“.exrc”文件存在的方式给用户提供了强大的工具,用户可以根据自己的不同的编辑需要定义“.exrc”文 件 例 如 , 可 以 创 建 一 个 通 用 的“.exrc”文件存在主目录用户可以用vi创建一个“.exrc”文件,或修改现有的“.exrc”文件LinuxLinux操作系统操作系统 【实例3.4】 创建一个“.exrc”文件,键入“vi .exrc”并按回车键,然后输入用户想要的set和其他命令下面是一个具体的例子: set report = 0 set showmode set number set icLinuxLinux操作系统操作系统 set wm = 10set scroll = 5ab uop UNIX Operating Systemmap q ddLinuxLinux操作系统操作系统 3.4.4 运行Shell命令 用户可以在vi的命令行运行Linux Shell命令。
这一方面的特性使用户可以临时抛弃vi来运行Shell命令通知vi后面是一个Shell命令例如,要在vi编辑器中运行date命令,键入“:!date”后按回车键vi编辑器将清除屏幕,执行date命令,我们可以看到类似如下的屏幕显示: Sat Feb 8 14:00:52 EDT 2003 [Hit any key to continue]LinuxLinux操作系统操作系统 按任意一个键即可返回vi编辑器,并可在前面离开的地方继续编辑如果用户希望,也可以将Shell命令执行的结果读进来并加到用户文本中使用“:r”(读取)命令,后面紧跟“!”和相应的Shell命令来将命令的结果写到用户的文本中LinuxLinux操作系统操作系统 【实例3.5】 要读取系统的时间和日期,键入“:r!date”后按回车键,vi响应,将当前系统日期和时间放在当前行下面vi编辑器保持在文本输入模式 This is a test! We are from Shenzhen. The date and time is Sat Feb 8 14:00:52 EDT 2003 ~ ~LinuxLinux操作系统操作系统 【实例3.6】下列命令说明了!的使用。
1) 键入“:!ls”后按回车键,列出目录中的文件2) 键入“:!who”后按回车键,显示谁当前登录到系统上3) 键入“:!date”后按回车键,显示当前日期和系统时间4) 键入“:!pwd”后按回车键,显示当前工作目录的路径LinuxLinux操作系统操作系统 (5) 键入“:r!date”后按回车键,读取date命令的 结果,并将其放置在正在编辑文本的光标后边 (6) 键入“:r!cal 3 2003”后按回车键,读取2003年3月的日历,并将其放置在正在编辑文本的光标后边 (7) 键入“:!vi test.txt”后按回车键,调用另一个vi来编辑test.txt文件LinuxLinux操作系统操作系统 习习 题题1.从编辑模式切换到指令模式可以使用____键A. F2 B. ShiftC. TabD. Esc2. vi中,命令____从光标所在行的第一个非空白字符前面开始插入文本A. i B. I C. a D. SLinuxLinux操作系统操作系统 3. 删除整行文本的指令是_____。
A. d B. yy C. dd D. q4. 存盘并退出vi的指令是_____A. q! B. q C. w D. wq5. 对所编辑的文件进行简单加密的指令是_____A. U B. x C. X D. y。
