- 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-@设置标号