1.一般模式:移动
n<space>:向右移动这一行的n个字元;
0:移动到这一行的最前面
$:移动到这一行的最后面
H:移动到这一屏的最上面
M:移动到这一屏的最中间
L:移动到这一屏的最下面
G:移动到这个文件的最后一行
nG:移动到这个文件的第n行
gg:移动到这个文件的第一行
n<Enter>:向下移动n行
2.一般模式:查找与取代
/word:向下查找一个名称为word的字串
?word:向上查找一个名称为word的字串
n:重复前一个搜寻的动作
N:与n相反
:n1,n2s/word1/word2/g:在第 n1 与 n2 行之间寻找 word1 这个字串,并将该字串取代为 word2
:1,$s//word1/word2/g:从第一行到最后一行寻找 word1 这个字串,并将该字串取代为 word2
:1,$s//word1/word2/gc:从第一行到最后一行寻找 word1 这个字串,并将该字串取代为 word2,在替代前需要用户确认。
3.一般模式:删除、复制与粘贴
x,X:在一行中,x为向后删除一个,X为向前删除一个
nx:向后删除n个
dd:删除当前行
ndd:向下删除n行
d1G:删除从当前行到第一行
dG:删除从当前行到最后一行
d$:删除当前位置到当前行的最后一个
d0:删除当前位置到当前行的第一个
yy:复制当前行
nyy:向下复制n行
y1G:复制从当前行向上到第一行
yG:复制从当前行到最后一行
y0:复制从当前位置到当前行行首
y$:复制从当前位置到当前行行尾
p,P:p 为将已复制的资料在游标下一行贴上,P 则为贴在游标上一行!
J:将游标所在行与下一行合并
u:复原前一个动作
[Ctrl]+r:重做上一个动作
4.进入编辑模式
i, I:i 为『从目前游标所在处插入』, I 为『在目前所在行的第一个非空白字元处开始插入』
a, A:a 为『从目前游标所在的下一个字元处开始插入』, A 为『从游标所在行的最后一个字元处开始插入』
o, O:o 为『在目前游标所在的下一行处插入新的一行』; O 为在目前游标所在处的上一行插入新的一行!
r, R:取代∶r 会取代游标所在的那一个字元;R会一直取代游标所在的文字,直到按下 ESC 为止;
Esc:退出编辑模式,回到一般模式中
5.指令模式
:w:保存
:w!:强制保存
:q:退出
:q!:不保存,强制退出
:wq:保存并退出
:e!:还原到最原始的状态
ZZ:若没改变则不保存离开,若有改变则保存后离开
:w[filename]:将编辑的资料保存为另一个文件
:r[filename]:在编辑的文件中,读入另一个文件的内容,加入游标所在行的后面
:n1,n2 w [filename]:将n1行到n2行的内容储存为filename文件
:!command:暂时离开 vi 到指令列模式下执行 command 的显示结果
:set nu:显示行号
:set nonu:取消行号
举例子:
1. 请在 /tmp 这个目录下建立一个名为 vitest 的目录;
2. 进入 vitest 这个目录当中;
3. 将 /etc/man.config 拷贝到本目录底下(或由上述的连结下载man.config 档案);
4. 使用 vi 开启本目录下的 man.config 这个档案;
5. 在 vi 中设定一下行号;
6. 移动到第 58 行,向右移动 40 个字元,请问您看到的双引号内是什么目录?
7. 移动到第一行,并且向下搜寻一下『 bzip2 』这个字串,请问他在第几行?
8. 接著下来,我要将 50 到 100 行之间的 man 改为 MAN,并且一个一个挑选是否需要修改,如何下达指令?
9. 修改完之后,突然反悔了,要全部复原,有哪些方法?
10. 我要复制 51 到 60 行这十行的内容,并且贴到最后一行之后;
11. 删除 11 到 30 行之间的 20 行;
12. 将这个档案另存成一个 man.test.config 的档名;
13. 去到第 29 行,并且删除 15 个字元;
14. 储存后离开吧!
整个步骤如下:
1. 『mkdir /tmp/vitest』
2. 『cd /tmp/vitest』
3. 『cp /etc/man.config .』
4. 『vi man.config』
5. 『:set nu』
6. 先按下『58G』再按下『40→』会看到『/dir/bin/foo』这个字样在双引号内;
7. 先执行『1G』或『gg』后,直接输入『/bzip2』,则会去到第 116 行才对!
8. 直接下达『 :50,100s/man/MAN/gc 』即可!
9. (1)简单的方法可以一直按『 u 』回复到原始状态,(2)使用不储存离开『 :q! 』之后,再重新读取一次该档案;
10. 『51G』 然后再『 10yy 』之后按下『 G 』到最后一行,再给他『 p 』贴上十行!
11. 『11G』 之后,再给他『 20dd 』即可删除 20 行了;
12. :w man.test.config
13. 『29G』 之后,再给他『 15x 』即可删除 15 个字元;
14. 『:wq!』