• 1. 第一部分 vi的基本概念与操作一、vi的基本概念 vi是UNIX系统提供的全屏幕文本编辑器,是行编辑器ex的扩充,包括命令与编辑两种模式,使用键可切入到命令模式。 UNIX系统的行编辑器有ed、ex、edit emacs是流行于UNIX的另外一个屏幕编辑器,是单模式的编辑器。 二、进入vi $vi filename 此时进入vi界面的命令状态,须键入编辑命令(O、R…….)方可进入编辑状态 。 若将编辑状态再转为命令状态(需要转换编辑命令或者退出时),须按下Esc键。 屏幕最下行通常为状态行,提示文件名等操作信息
  • 2. 三、退出vi 属于命令模式 常用退出命令: : wq 保存编辑内容并退出 : ZZ 文件内容有修改时则保存并推出 : x 与: ZZ相同 : q! 强行退出,不保存(放弃缓冲区内容) 四、vi的操作方式 vi工作在3种方式下: 插入方式(属于编辑模式):进入vi界面后(命令模式)键入某种插入命令,则进入编辑状态,此时键盘上所有字符均做为编辑内容 命令方式(属于命令模式):各种编辑命令都须转为命令模式后方可使用。此时键盘上的相关字符均作为编辑命令。 ex转义方式(属于命令模式):可对编辑的文件进行其它设置和管理。
  • 3. 方法: 在命令模式下键入冒号 : 则: 作为命令提示符出现在状态行 可键入ex的命令,对文件进行其他编辑管理 : r lj (注意在命令模式下) 上述命令在文件当前行插入文件名为lj的文本内容 五、vi的基础命令 1、文本插入: 命令: i 插入到光标之前 I 插入到行首 a 插入到光标之后 A 插入到行尾 o 在光标所在行下插入一行 O 在光标所在行上插入一行
  • 4. 光标移动:使用四个方向键帮助移动光标,但越界时系统会发出嘟嘟声,此时进入命令模式! 使用回退字符后,只在缓冲区删除,被回退字符暂留在屏幕上,转入命令模式则消失 S 光标回退至刚插入串首,继续输入并按下则覆盖原串 W 光标回退至刚插入字首,继续输入并按下则覆盖原字 T 在光标位置插入相应数目的空格 2、在窗口中移动光标 (多数光标移动命令前可加数字表示移动相应的单位) l、空格、右移键 向右移动字符 例:20l h、 H、Backspace、左移键 向左移动字符 例:2h j、 J、 N、下移键 向下移动 例:12j k、 P、 上移键 向上移动 例:10k +、Return 移至下一行首 G ( G) 跳转行(取得当前行号,在状态行显示) 例:20G 定位在第20行 若直接键入G则跳转至文件最后一行行首 L 跳转列 例:9L 定位至第9列
  • 5. 命令操作-移至上一行首w移至下一个词或标点、符号首W移至下一个词首e移至下一个词或标点、符号尾E移至下一个词尾b移至当前词或标点、符号首B移至当前词首O (^)移至行首(首个非空字符)$移至行尾(移至当前句子起始处)移至下一句子起始处{移至上一段起始处}移至下一段起始处[[移至上一节起始处]]移至下一节起始处
  • 6. 3、文本编辑命令 1)修改— c、C、cc 2)取代— r、R 3)替换— s、S 3)删除— x、X、d、D、dd 删除的文本放在一片单独的缓冲内存中,后者会覆盖某些前者 4)恢复— p、P p将删除内容恢复至当前光标的右边,若为整行删除则恢复至当前光标下一行 P将删除内容恢复至当前光标的左边,若为整行删除则恢复至当前光标上一行 恢复命令与删除命令结合相当于移动 5)取消— u、U 6)复制— y、Y (复制到编辑缓冲区,需与恢复命令结合使用) 7)重复— . 重复插入命令则相当于复制 8)行结合— J (nJ) 9)文本移位— >、<、>>、<< 10)过滤— ! 命令格式为 !<光标移动命令><回车>
  • 7. 4、vi的屏幕命令 1)滚屏— U、D 2)分页— F、B 3)显示屏幕状态— G 4)屏幕调零— [行号]z[行数]、[行号]z[行数].、[行号]z[行数]- 以上三项分别以给出的行号为首行、屏幕中间行、屏幕底行显示要求的行数;若省略给出行数,则默认显示一屏 六、编辑一个文件 1、编辑新文件 $vi filename 2、编辑已存在文件 从头开始 $vi filename 从第n行开始 $vi +n filename 从某个词开始 $vi +/词名 filename
  • 8. 第二部分 vi的其它命令与工作缓冲区一、文本搜索 1、vi的字符串检索命令(ex命令) 1)向下(前)搜索: /字符串 例: /unix 则光标定位至当前向后的第一个unix串首(u位置上) /字符串/位移 : /串/-数字(+数字) 数字缺省时默认为1 例:/unix/-5 则光标定位至当前向后的匹配行之前倒数第5行行首 /unix/+3 则光标定位至当前向后的匹配行之下数第5行行首 ed中此命令为’ // ’ 2)向上(后)搜索 ?字符串 例: ?unix 则光标定位至当前向上的第一个unix串首(u位置上) ?字符串?位移 : ?串?-数字(+数字) 数字缺省时默认为1 例:?unix?-5 则光标定位至当前向上的匹配行之前倒数第5行行首 ed中此命令为’ ?? ’
  • 9. 3)重复检索命令:n、N n 重复上一步检索命令(同向,继续检索出下一个匹配项) 例: /unix 之后(在命令太)输入n,则继续向前找到下一个unix,光标定位至’u’ N 重复上一步检索命令(反向,检索出当前位置相邻匹配项) 例:?unix?-5 之后(在命令态)键入n,再键入N,则回到查找之初的’unix’串首 N与n并不重复检索命令中的位移 2、字符的搜索 1)特殊字符: 查找含* . $ ^ [ } / \ 等特殊字符的串时,须在这些特殊字符之前加上’\’ 2)普通字符 f、F命令分别在当前行上向前或向后查找,光标定位在匹配字符上 例: fa 相应的重复查找命令为 ;(同向重复搜索)、,(反转搜索方向) t、T命令在当前行上查找到匹配字符后,将光标分别定位在其前或后位置上 相应的重复查找命令仍为 ;(同向重复搜索)、,(反转搜索方向)
  • 10. 3、标记字符:m 例:ma 为字符a置标记,并不在屏幕显示 ‘a 移至标记行行首 设置标记后,可配合vi命令进一步操作 如: 键入ma 移动光标至当前位置 键入d ‘a 结果是删除从标记字符a到当前位置的所有内容 4、全局搜索替换命令(ex命令):g 格式:g/模式/命令表 模式:欲搜索内容 命令表:vi命令及参数列表 g/unix/p g/unix/s//linux/ g/unix/s//linux/g g/unix/s//linux/gp g/unix/s//linux/gc g/unix/s/linux/LINUX/g
  • 11. g/^/s// /g 在每一行首插入若干空格 s/模式/替代文本/g s/模式/替代文本 s/unix/UNIX(/g) 注意此命令只在当前行操作 二、移动和复制文本 移动:d与p结合 复制:y与p结合 移出命令y 命令操作yw移出一个单词3yw移出三个单词y$移出一直到行尾的字符y)移出一直到句尾的字符y}移出一直到段尾的字符yy或Y移出当前行3Y从当前行开始,移出三行Y}移出一直到段尾的所有行
  • 12. 三、vi的工作缓冲区 除了编辑缓冲区外,vi还保留了其他一些临时存储区,称为工作缓冲区: 一块未命名缓冲区:vi自动使用它存放上次移动、删除或修改的文本,后者覆盖前者,p或P命令即使用该缓冲区内容 26个命名缓冲区:分别以a、b、c、d……z来表示。vi不能自动使用它们存放文本,命令格式为:”[缓冲区名称][命令] 如:”a3Y 把三行文本移出到缓冲区a ”ap 将缓冲区a中的文本重新移回到文本中 9个编号缓冲区:放置命令d删除的文本 1号缓冲区存放最近一次删除的文本 2号缓冲区存放倒数第二次删除的文本……依此类推 如:”1p 把最近一次删除的文本放在当前行下 四、编辑多个文件 vi可以一次编辑多个文件,命令如下: $ vi filename1 fileneme2 filename3… 使用命令:w对filename1存盘,接着键入命令:n则开始编辑filename2……
  • 13. 例:$ vi f1 f2 f3 … ”a9Y :n … ”b2Y :n … ”ap ”bp 则最终结果是从f1中移出9行、f2中移出2行,均放入f3当前行下 五、ex命令 1、e命令:可将新指定的文件放入编辑缓冲区,替换前编辑缓冲区内容 格式: :e filename 注意此时前文件须已经保存或未修改,否则不执行e命令,而: :e! filename 则可忽略前一文件的任何编辑,强行编辑新文件 :e +n filename 从新文件的第n行开始编辑 :e # 返回前一文件的编辑 (%表示当前文件) 2、w命令:将编辑缓冲区中全部或部分内容写到当前或另一文件中 格式: :w filename (filename缺省则写入当前文件) :w! filename 可强行创建不存在的filename :w>> filename 将缓冲区中内容附加到现有文件尾
  • 14. :w! <命令> 可将指定的各行写入指定命令中 如: :1, 3 w! filename 则将当前文件1至3行写入filename 3、r命令:可将指定的文件或shell命令的输出读入编辑缓冲区(当前文件的当前位置) :r filename :r! filename 例: :r! date 则在当前位置读入shell的date命令的输出 4、q命令:退出vi编辑 :q! 强行退出 :wq :wq! 将缓冲区中内容附加到现有文件尾 :x filename(可缺省) 等同于: ZZ
  • 15. 第三部分 vi的设置选项、高级应用、emacs简介一、vi的设置选项 1、设置vi选项:可使vi按照用户意愿工作 vi中有3类设置选项:开关选项、数字选项、字符串选项(教材p49表3-8) 设置方式:3种 1)在vi中设置 :set [开关选项] 例::set number 为文件每行加行号 :set sm 键入左边圆括号、花括号(方)时自动补齐右边的 :set [数字选项]=[参数] 例: :set reprot=2 用户做2行以上修改时显示统计信息 :set [字符串选项][字符串] 例: :set shell :/usr/bin/sh 使用SystemⅤ中的shell来执行vi中以!或 :!开头的shell命令 2)使用.exrc文件:2种方法 可将所有set命令放置在$home/.exrc文件中,启动vi则自动生效 还可以在不同的工作目录中放置不同的.exrc文件,使不同工作目录有自己的编辑格式或种类(如在程序目录启动vi,可有自己的符合程序编辑的格式)
  • 16. (当前工作目录的.exrc文件优先级高于$home/.exrc文件) 若使用这种方法,首先需要在$home/.exrc文件中放置语句:set exrc ,而后即可在不同目录中的.exrc文件中放置不同的set命令。 例: 在目录prog中放置计算机程序,就可以定义此目录下的.exrc文件,为其设置使用vi编辑程序时的格式,如: :set ai noic nomagic 在目录menos中放置备忘录,就可以定义此目录下的.exrc文件,为其设置使用vi编辑备忘录时的格式,如: :set noai ic magic wm=15 nu 3)使用变量EXINIT 通过在.profile或.login文件中设置变量EXINIT,可以定义登录时的vi选项,使 vi以相同方式工作在任何目录中。 ( 设置变量EXINIT可让vi启动得更快) 在UNIX System 或Korn shell中,可将下两句放在.profile文件中 EXINIT=“set noai ic magic wm=15 nu” export EXINIT 在C shell中,可将上两句放在.login文件中
  • 17. 设置选项类型缺省描述autoindent, aiOn/Offnoai(不)从与上一行相同列开始一行autowrite, awOn/Offnoaw执行某命令前(自动)将更改写入缓冲区flashOn/Offflash闪烁屏幕而不振铃ignorecase, icOn/Offnoic在搜索中大小写(不)等同magicOn/Offmagicnomagic忽略^.$外正则表达式特殊含义number, nuOn/Offnonu给各行(不)加上行号reportNumeric5显示上一命令修改正文的行数shell, shStringlogin shellvi命令执行:!或!shell命令showmode, smdOn/Offnosmd在输入方式下屏幕右下显示INPUTNODEterseOn/Offnoterseterse选项提供简短的出错信息timeoutOn/Offtimeout有时间限制,必须在1秒内输入宏名wrapmargin, wmNumeric0(off)在距右边界wm空格处自动折行
  • 18. 2、显示当前设置 :set optionname 查看任何选项设置的确切值 例: :set nu :set 查看更改过的所有选项值 :set all 查看所有选项值 3、取消当前设置 :set no optionname 例::set no nu 二、vi的高级应用 1、编写vi宏 宏是一串从键盘上输入的命令字符 vi提供的map功能可以将一系列编辑命令合成一个命令,并称之为宏 可以使用map功能组合成多达100个vi命令,并将它映射到任何一个按键上 1)输入宏 (产生的宏在命令模式) 宏定义格式: :map macroname commends Return :map Q :q! ^M 将命令:q! 映射到大写字母Q (命令模式键入Q) :map v i \ fB ^ [ ea \fp ^[ ^M (^M 表示回车 , ^ [ 表示Esc)
  • 19. 2)在输入模式中定义宏 以map!定义的宏将工作在输入模式中 宏定义格式::map! macroname string Return :map! ZZ ^ [ :wq ^M 上句意思为:在输入模式下输入ZZ时,相当于:按Esc键、输入:wq、按回车键 3)在.exrc文件或EXINIT变量中定义宏 可将map定义宏的命令语句加入.exrc文件,或加入.profile或.login文件的EXINIT变量中 宏的名字要简短,最多几个字符。尤其使用输入模式的宏,如ZZ,要求1秒钟内输完,否则Z会作为字符插入文本中。 2、取消vi的宏 使用unmap命令取消某个宏 格式: :unmap macroname :unmap Q
  • 20. 3、几个实用的文本处理宏 1)在文本中检查拼写错误 使用UNIX系统中的检查拼写错误程序spell $spell kkk >erros $vi kkk : r erros 2)vispall宏 可使用带vispall宏的vi检查拼并更改拼写错误 事先将如下宏定义加入.exrc文件,或加入.profile或.login文件的EXINIT变量中:map #1 1G!Gvispell ^M^[ 则宏的名字叫做#1,指F1键或1号功能键 用户在vi中只需按下F1键或1号功能键就会得到一个拼写错误的单词清单 3)search宏 search宏在.exrc文件或EXINIT变量中定义为:map #2 Gi/ \<^[A\>^”adda 则宏的名字叫做#2,用户在vi中输入/unix后,只需按下F2键或2号功能键就会得到文本中所有unix拼写错误的单词清单
  • 21. 三、emacs简介 emacs是流行于UNIX用户中的另一个屏幕编辑器,不同于vi和ed的是,它是单模式编辑器。即不分输入模式和编辑模式。 emacs有多种版本,GNU Emacs是最为普遍的版本。Korn shell也支持emacs。 emacs可以同时工作在命令模式和输入模式中: 正常的字符和文本将被作为文本接受 控制字符和转义字符(前面加一个Esc字符或CTRL字符)将被编辑器解释为命令。 1、在emacs中创建文本 $emacs filename (filename也是编辑缓冲区的名称) emacs总是处在输入模式中,所有输入的标准字符都将进入编辑缓冲区内。 2、退出emacs 完成正文输入后,使用CTRL-X或CTRL-C退出编辑,若有修改系统会提示是否保存,y可作为肯定。n则需要重新回答yes或no。
  • 22. 移动命令 命令操作命令操作CTRL-F向右移一个字符单位Esc->移至缓冲区最后一个字符后面CTRL-B向左移一个字符单位CTRL-N移至下一行Esc-< 移至缓冲区第一个字符前面CTRL-P移至上一行CTRL-E移至当前行尾Esc-V向后移动一屏CTRL-A移至当前行首CTRL-V向前移动一屏CTRL-X 2将当前窗口分为2个CTRL-L刷新屏幕,将当前行置于屏幕中间CTRL-X 1关闭除当前窗口外的所有窗口Esc-F移至词尾CTRL-X O关闭当前窗口Esc-B移至上一行的词首CTRL-X o移到另一个窗口
  • 23. 编辑命令 命令操作命令操作DEL删除上一行字符CTRL-X CTRL-X交换标号与光标位置CTRL-D删除当前光标处字符CTRL-Y将删除文本移入缓冲区(配合CTRL-W,可将删除内容放置到当前光标所在位置)Esc-DEL删除上一个词CTRL-S向前查找字符串Esc-D删除当前光标处的词CTRL-R向后查找字符串CTRL-K删除到行尾所有字符CTRL-W删除从标号到光标间所有字符CTRL-@设置标号