Vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您学会它后,您将在Linux的世界里畅行无阻。
vi 分为三种状态:
命令模式(Command mode):控制光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式和底行模式;
插入模式(Insert mode):只有在此模式下才可以做文字输入,按「ESC」回到命令行模式;
底行模式(Last line mode):将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行 号等。
进入vi:在系统提示符号$下输入vi myfile,就进入vi 全屏幕编辑画面,初态为:命令模式。
1、插入模式的命令简介
在「命令模式」下:
按「i」切换进入插入模式后从光标当前位置开始输入文字;I 从光标所在的行的第一个非空白字符前面开始插入文字。
按「a」进入插入模式后从光标所在位置的下一个位置开始输入文字;A 从光标所在行最后面的地方开始新增文字。
按「o」进入插入模式后在当前行的下一行插入新的一行,从行首开始输入文字;O(大写的字母O) 从光标所在行上方新增一行并进入插入模式。
在「插入模式」下只能一直输入文字,如果输错了字则只能按「ESC」转到「命令模式」来删除。
2、命令模式的命令简介
a):移动
vi 用小写英文字母「h」、「j」、「k」、「l」分别控制光标左、下、上、右移一格。
按「ctrl」+「b」:屏幕往“后”移动一页
按「ctrl」+「f」:屏幕往“前”移动一页
按「ctrl」+「u」:屏幕往“后”移动半页
按「ctrl」+「d」:屏幕往“前”移动半页
按「ctrl」+「e」:屏幕向下滚一行
按「ctrl」+「y」:屏幕项上滚一行
按「ctrl」+「y」:屏幕项上滚一行
按「H」:该命令将光标移至屏幕首行的行首(即左上角);若在H命令之前加上数字n,则将光标移至第n行的行首
按「M」:该命令将光标移至屏幕显示文件的中间行的行首。即如果当前屏幕已经充满,则移到整个屏幕的中间行;如果并未充满,则移动到文本的那些行的中间行
按「L」:当文件显示内容超过一屏时,该命令将光标移至屏幕上的最底行的行首;文件显示内容不足一屏时,该命令将光标移至文件的最后一行的行首
按「G」:移动到文章的最后
按「^」:移动到光标所在行的“行首”
按「$」:移动到光标所在行的“行尾”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「#l」:光标移到该行的第#个位置,如:5l, 56l
b):删除
「x」:每按一次,删除光标所在位置的“后面”一个字符
「#x」:例如,「6x」表示删除光标所在位置的“后面”6 个字符
「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
「dd」:删除光标所在行
「#dd」:从光标所在行开始删除#行
「#dw」:删除一个单词;若光标处在某个词的中间,则从光标所在位置开始删至词尾;也可在dw之前加一个数字#,表示删除#个指定的单词
「D」:删除光标所在行光标后面的内容
「dH」:删除从光标当前所在行至所显示屏幕首行的全部内容
「dM」:删除从光标当前所在行至所显示屏幕文件中间行的全部内容
「dL」:dL将会删除从光标当前行至屏幕底行的全部内容
c):复制
「yw」:将光标所在之处到字尾的字符复制到缓冲区
「#yw」:复制#个字到缓冲区
「yy」:复制光标所在行到缓冲区
「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6 行文字
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能
d):替换
「r」:替换光标所在处的字符
「R」:替换光标所到之处的字符,直到按下「ESC」键为止
e):恢复
「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次恢复
f):文本的修改
Vi提供了三种修改命令,分别是c、C和cc。它们修改文本的范围是由光标位置和光标移动命令二者限定的
「c」:后紧跟光标移动命令,限定修改内容的范围是从光标当前位置开始到指定的位置为止,例如:c7G, 即把光标所在行至第7行(共2行)的内容删除,并进入文本输入模式
「C或c$」:修改从光标当前位置开始到该行末尾或从光标当前位置开始到某行末尾范围内的内容; C之前加上数字n时,表示可以修改指定行数的内容。例如,3C命令就表示把光标所在位置的字符之后(注意不是整行)直到下面两个整行的内容删除,由随后输入的内容代替
「cc」:修改从光标所在行的起始位(不管游标处于该行的何列)到该行末尾或指定某行末尾范围内的内容
「c#w」:例如,「c3w」表示更改3个字
g):文本替换
文本的替换即是用新输入的文本代替原已有的文本。它同文本修改一样,也是先执行删除操作,再执行插入操作。Vi提供的替换的命令有取代命令、替换命令和字替换命令
「r」:用随后输入的一个字符代替当前光标处的那个字符
「R」:用随后输入的文本取代从当前光标处及其后面的若干字符,每输入一个字符就取代原有的一个字符,直到按< Esc >键结束这次取代
「s」:该命令表示用随后输入的文本替换当前光标所在的字符
「S」:该命令表示用新打入的正文替换光标当前行(整行)(不管游标位于何列)
「cw」:替换的是一个狭义的字。输入这个命令后将把光标处的那个字删除,然后用户可输入任何文本内容
「c#w」:例如,「c3w」表示更改3个字
h):跳行
「ctrl」+「g」:列出光标所在行的行号
「#G」:例如,「15G」,表示移动光标至文章的第15行行首
i):文本合并/移动
「J」:该命令其功能是把光标所在行与下面一行合并为一行;如果在J命令之前给出一个数字n,例如3,则表示把光标当前行及其后面的2行(共3行)合并为一行
「<或>」:将限定正文行(屏幕的首行)向左(右)移动,通常是8个空格,
「<<或>>」:将光标所在行左移(右移)8个空格;如果在>>命令之前给出一个数字n,例如4,则表示光标当前行及其下面的3行(共4行)都右移8个空格
「n m k」:表示把第n行移至第k行的下方(底行模式)
j):其他命令
「J」:把下一行内容加到本行行尾
「~」:改变光标所在出字符的大小写
「.」:.重复上一个动作
「:e filename」:使用filename激活vi(底行模式下)
「:r filename」:读取filename文件,并将其内容加到当前文件后
3、底行模式命令简介
在使用「底行模式」之前,请记住先按「ESC」键确定您已经处于「命令模式」下后,再按「:」冒号即可进入「底行模式」;
a) 列出行号
「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号
b) 跳到文件中的某一行
「#」:「#」号表示一个数字,在冒号后输入一个数字,按回车键就会跳到该行,如输入数字15 回车,就会跳到文章的第15行
c) 查找字符
「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可一直按「n」往后寻找到您要的关键字
「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可一直按「n」往前寻找到您要的关键字
d) 保存文件
: w filename.txt (输入「w filename.txt」将文章以指定的文件名另存)
: wq (输入「wq」,存盘并退出vi)
: q! (输入「q!」,不存盘强制退出vi)
:q (输入「q」退出vi ,若用户对编辑的文件有所修改,系统不会让用户使用q命令退出)