一.vi的模式
 命令模式:vi启动默认进入的模式,可进入输入模"i",或末行模式(:),除了可以完成命令的功能外,也是后两种模式的转换点
 输入模式:即文本辑辑状态,最后一行显示"-- INSERT --"提示,按ESC返回到命令模式
 末行模式:可完成一些复杂操作,以":"开始,执行完一个末行命令后自动返回命令模式

二.基本使用
 1.vi 编辑器的启动与退出:

 (1).使用命令"vi"直接进入编辑环境
 (2).在命令模式下输入":q!",可以强行退出编辑环境,对文件修改不进行保存
 (3).以文件名作为"vi"命令的参数时,若存在此文件,则vi可对内容进行编辑,若不存在,打开以参数名命名的空文件

 2.文件操作:

 (1).打开新文件:在末行模式下":e filename"关闭当前文件并打开新文件,":e! filename 强制关闭当前文件并打开新文件"
 (2).读取文件内容到当前文件:":r filename",读取的文件内容粘贴到当前文件光标所在行的下面
 (3)保存文件:命令为":w [filename]",如果文件已经命名,可直接使用":w"命令的参数,如果没有命名,第一次保存时需指定文件名作为参数
 (4).另存为文件:命令为":w filename",只保存到新文件,而不更新原来文件的内容
 (5).退出vi编辑器:退出格式为":q",保存并退出为":wq",强行退出为":q!"
 
 3.光标的移动操作(命令模式下)

 (1).光标方向移动:"h"左、"l"右、"k"上、"j"下
 (2).翻页移动:"ctrl+f"前一页、"ctrl+b"后一页、"ctrl+u"前半页、"ctrl+d"后半页
 (3).行内快速跳转:"^"本行首字符、"$"本行尾字符、"w"后一单词首字母、"b"前一单词首字母、"e"后一单词尾字母;可添加数字组合使用,例如:"3w"后三个单词首字母、"4b"前4个单词首字母、"5e"后5个单词尾字母
 (4).文件内行间跳转:显示行号":set nu",取消显示行号":set nonu","1G"跳转到首行,"G"跳转到末尾行,"#G"跳转到第#行
 
 4.编辑操作

 (1).进行输入模式:"i"当前光标处,"a"当前光标后,"A"当前行末,"o"当前行下插入新行,"O"当前行上插入新行,"cw"删除当前光标到所在尾部字符,
"c$"删除当前光标到行尾的字符,"c^"删除当前光标(不包括)之前到行首的字符;以上记忆如有困难,可只记"i"从命令模式进入输入模式,完成编辑后"Esc"退回到命令模式 (2).输入模式的操作:上下左右方向进行光标移动,"Home/End"定位光标到行首行尾,"Page Up /Down"上下翻页,"Backspace"左侧字符的删除,"Delete"删除光标位置的字符 (3).删除操作:在命令模式下,可用以下命令完成删除操作,"x"光标处单个字符,"dd"光标所在行,"dw"当前字符到单词尾(含空格),"de"当前字符到单词尾(不含空格),
"d$"当前字符到行尾,"d^"当前字符到行首,"J"合并当前行与下一行的内容,可添加数字配合使用,例如"3x"当前光标向右3个字符,"2dd"从当前行开始向下两行文本,
"3dw"当前光标向右3个单词,"2de"当前光标向右两个单词(保留一个空格),"5J"合并5行文本
(4).撤销操作:在命令模式下,"u"取消最近一次操作,可重复使用,"U"取消对当前行进行的所有操作,"Ctrl+R"对"u"产生的撤消进行恢复
 (5).复制操作:"yy"整行,"yw"光标到单词尾,"y$"光标到行尾,"y^"光标到行首;与数字组合使用,"5yy"当前及后续共5行,"3yw"当前光标开始的3个单词;
末行命令":m,ny"m行到n行之间的文本,例如:":100,200y"100行到200的内容 (6).粘贴操作:在命令模式下,使用"p"将缓冲区中的内容粘贴到当前文档 5.查找与替换操作(末行模式) (1).自上而下:":/word"查找指定的字符串,"n"查找下一个(自上而下)"N"反向查找下一个(自下而上) (2).自下而上:":?word"自下而上查找指定字符串,"n"查找下一个(自下而上)"N"反向查找下一个(自上而下) (3).普通替换:":s/old/new"由s开始,"old"指被替换的字符串,"new"替换成哪个字符串,此命令只替换当前行中第一个匹配的字符串 (4).行内全部替换:":s/old/new/g",当前行内所有匹配的字符串 (5).在行区域内进行替换:":#,#s/old/new/g","#,#"表示两个行号之间的行区域,例如"3,5"表示第3行到第5行 (6).整个文件内的替换操作:":%s/old/new/g",加%表示整篇文档,危险,慎用 (7).使用替换确认功能:在原替换命令后加"c"可提供确认功能,例如:":s/old/new/c",":s/old/new/gc",":#,#s/old/new/gc",":%s/old/new/gc";
替换命令确认后的提示为"replace with word (y/n/a/q/l/^E/^Y) ?",其中"y"替换,"n"放弃,"a"所有,"q"退出 三、编辑器的多文件操作 1.多文件操作的vi启动:"vi [file1] [file2] .."后跟多个文件名作为参数即可,第一个参数显示在屏幕上,其它文件处于编辑后台状态 2.多文件切换命令: (1).显示多文件信息:":args"结果中显示打开的文件,"[]"内为当前显示文件 (2).前后切换文件:":next"显示后一文件,":prev"显示前一文件,加"!"为强制切换,不保存当前文件 (3).定位首文件和尾文件:":first"定位首文件,":last"定位尾文件 (4).快速文件切换:已经用某个切换命令进行文件切换后,"Ctrl+^"可快速切换到前状态

 

搬移与复制

==========
        利用 delete 及 put 指令可完成资料搬移之目的。
        利用 yank 及 put 指令可完成资料复制之目的。
        yank 和 delete 可将指定的资料复制到记忆体缓冲区,而藉由 put 指令
        可将缓冲区内的资料复制到萤幕上。
        例:
        搬移一行        .在该行执行 dd
                        .游标移至目的地
                        .执行 p
        复制一行        .在该行执行 yy
                        .游标移至目的地
                        .执行 p

.指令重复
=========
        在指令模式中,可在指令前面加入一数字 n,则此指令动作会重复执行 n
        次。
        例:
        删除10行                .10dd
        复制10行                .10yy
                                .游标移至目的地
                                .p
        指标往下移10行  .10j

..取消前一动作(Undo)
===================
        即复原执行上一指令前的内容。

        u       恢复最後一个指令之前的结果。
        U       恢复游标该行之所有改变。

..搜寻
=====
        在vi中可搜寻某一字串,使游标移至该处。

        /字串           往游标之後寻找该字串。
        ?字串           往游标之前寻找该字串。
        n               往下继续寻找下一个相同的字串。
        N               往上继续寻找下一个相同的字串。

..资料的连接
===========
        J       句子的连接。将游标所在之下一行连接至游标该行的後面。

        若某行资料太长亦可将其分成两行,只要将游标移至分开点,进入输入模式
        (可利用 a、i等指令)再按《Enter》即可。

..环境的设定
===========
        :set nu                设定资料的行号。
        :set nonu              取消行号设定。
        :set ai                自动内缩。
        :set noai              取消自动内缩。

        自动内缩(automatic indentation)
        在编辑文件或程式时,有时会遇到需要内缩的状况,『:set ai』即提供自
        动内缩的功能,用下例解释之:
        .vi test
        .(进入编辑视窗後)
          this is the test for auto indent
          《Tab》start indent           ← :set ai (设自动内缩)
          《Tab》data
          《Tab》data
          《Tab》data                   ← :set noai (取消自动内缩)
        the end of auto indent.
        .注:<Ctrl><d> 可删除《Tab》字元。

 

 

从当前位置删除到行尾

d$
从当前位置复制到行尾
y$ 如果要粘贴到其他地方 p 就可以了

 

13.

:%s/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串 

14.光标控制

k:上移 nk 上移n行
j:下移 nj 下移n行


将光标移到第n行,按下 mk
将光标移到第m行,按下 "ay'k
即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等

这样就可以将你常用的需要复用的内容粘贴到不同的寄存器中以备用


想粘贴到某处,直接将光标移到某地,按下 ‘ap 即可,以此类推,b,c........寄存器等

在当前屏幕中
H 跳到第一行
M 跳到中间一行
L 跳到最后一行

15.
表8-2 删除命令
删除命令操作
d l 删除当前字符(与x命令功能相同)
d 0 删除到某一行的开始位置
d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)
d w 删除到某个单词的结尾位置
d 3 w 删除到第三个单词的结尾位置
d b 删除到某个单词的开始位置
d W 删除到某个以空格作为分隔符的单词的结尾位置
d B 删除到某个以空格作为分隔符的单词的开始位置
d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置
d) 删除到某个语句的结尾位置
d 4) 删除到第四个语句的结尾位置
d( 删除到某个语句的开始位置
d } 删除到某个段落的结尾位置
d { 删除到某个段落的开始位置
d 7 { 删除到当前段落起始位置之前的第7个段落位置
d d 删除当前行
d /t e x t 删除从文本中出现“ t e x t”中所指定字样的位置,一直向前直到下一个该字样所出现的
位置(但不包括该字样)之间的内容
d fc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括
该字符)之间的内容
d tc 删除当前行直到下一个字符“ c”所出现位置之间的内容
D 删除到某一行的结尾
d $ 删除到某一行的结尾
5 d d 删除从当前行所开始的5行内容
d L 删除直到屏幕上最后一行的内容
d H 删除直到屏幕上第一行的内容
d G 删除直到工作缓存区结尾的内容
d 1 G 删除直到工作缓存区开始的内容

 

替换命令
替换命令操作
s 将当前字符替换为一个或多个字符
S 将当前行替换为一个或多个字符
5 s 将从当前字符开始的5个字符替换为一个或多个字符


vi替换使用规则:
:g/s1/s/s2/s3/g
第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换
s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串