vi 是visual edit 的缩写
进入vi
vi test
离开vi
:q! 离开vi,并放弃刚在缓冲区内编辑的内容。
:wq 将缓冲区内的资料写入磁盘中,并离开vi。
:ZZ 同wq
:x 同wq
:w 将缓冲区内的资料写入磁盘中,但并不离开vi。
:q 离开vi,若文件被修改过,则会被要求确认是否放弃修改的内容,此指令可与: w 配合使用。
Vi 的操作模式
Vi 提供两种操作模式:
输入模式(insert mode)
指令模式(command mode)
当使用者进入vi后,既处于指令模式下,此刻键入任何字元皆被视为指令。
输入模式:a(append) 游标之后加入资料。
A 该行之末加入资料
i (insert) 游标之前加入资料
I 该行之首加入资料
o (open) 新增一行与该行之下供输入资料
O 新增一行与该行之上供输入资料
指令模式:B 移至该行第一个字符,若光标在该行第一字符则光标移至上一行第一字符。
b 由游标所在位置之前一个字串的第一个字元
cc 删除整行,修改整行的内容。
D 以行为单位,删除游标在内后面的所有字符。
db 删除该行光标前字符
dd 删除该行
de 删除自光标开始后面的字符
d加字符 删除光标所在位置至字符之间的单
E 移至该行最后字符,若光标在该行最后字符则光标移至下一行最后字符
e 由游标所在位置至该字串的最后一个字元
G 移至该档案的最后一行
h 向前移一个字元
j 向下移一个字元
k 向上移一个字元
0 移至该行之首
M 移至视窗的中间那行
L 移至视窗的最后一行
l 向后移一个字符
0 由游标所在位置该行的第一个字元
nG 移至该档案的第n行
n+ 自游标所在位置向后移n行至该行的第一字符
n- 自游标所在位置向前移n行至该行的第一字符
R 进入取代状态,直到《ESC》为止
s 删除游标所在字元,并进入取代模式直到《ESC》
S 删除游标所在之该行资料,并进入输入模式直到《ESC》
w 由游标所在位置之下一个字串的第一个字元
x 删除游标所在该字元。
X 删除游标所在之前一字元。
r 用接于此指令之后的字元取代(replace)游标所在字元
yy yank整行,使游标所在该行复制到记忆体缓冲区
<ctrl><g> 显示该行之行号、档案名称、档案中最末之行号、游标所在行号占
总行号之百分比
$ 由游标所在位置至该行的最后一个字元。
) 由游标所在位置至下一个句子的第一个字元。
( 由游标所在位置至该句子的第一个字元。
{ 由游标所在位置至该段落的最后一个字元。
} 由游标所在位置至该段落的第一个字元
yank和delete可将指定的资料复制到记忆体缓冲区,而藉有put指令可将缓冲区内的资料复制到荧幕上
例如:搬移一行 :在该行执行dd
游标移至目的地
执行p
复制一行 :在该行执行yy
游标移至目的地
执行p
视窗移动:
<ctrl><f> 视窗往下卷一页
<ctrl><b> 视窗往上卷一页
<ctrl><d> 视窗往下卷半页
<ctrl><u> 视窗往上卷半页
<ctrl><e> 视窗往下卷一行
<ctrl><y> 视窗往上卷一行
删除、复制及修改指令介绍:
d(delete)、c(change)和y(yank)这一类的指令在vi 中的指令格式为:
operation+scope=command
(运算子)(范围)
运算子:
d 删除指令。删除资料,但会将删除资料复制到记忆体缓冲区。
y 将资料(字组、行列、句子或段落)复制到缓冲区。
p 放置(put)指令,与d和y配合使用。可将最后delete或yank的资料放置于
游标所在位置之行列下。
c 修改(change)指令,类似delete于insert的组合。删除一个字组、句子等
资料,并插入新键入的资料。
指令重复:在指令模式中,可在指令前加入一数字n,则此指令动作会重复执行n次。
例如: 删除10行 :10dd
复制10行 :10yy
取消前一动作(undo):即复原执行上一指令前的结果。
u 恢复最后一个指令之前的结果。
U 恢复游标该行之所有改变。
搜寻:在vi中可搜寻某一字串,使游标移至该处。
/字串 往游标之后寻找该字串。
?字串 往游标之前寻找该字串。
n 往下继续寻找下一个相同的字串。
N 往上继续寻找下一个相同的字串。
资料的连接:
J 句子的连接。将游标所在之下一行连接至游标该行的后面。
若某行资料太长亦可将其分成两行,只要将游标移至分开点,进入输入模式(可利用a、i等指令)在按《ENTER》即可。
使用vi
作为Unix最重要的编辑工具,熟练的掌握vi对于开发人员和系统管理员同样的重要。下面是我的vi的使用经验,希望能够对大家有所帮助。
一.我们先看一下vi的设置项。
ignorecase/noignorcase 忽略/不忽略大小写
tabstop=n 设置tab相当于n个空格
list/nolist 显示/不显示制表符
number/nonumber 显示/不显示行号
二.vi的编辑命令
ndd或nD 删除n行
nyy 拷贝n行
ma 定义宏,使用'a调用
“a 定义缓冲区
/string 查找string字符串
s/old_str/new_str/g 用new_str串替换old_str
. 重复上一次操作/光标所在行
ctrl+g 在屏幕底显示文件信息
shift+g 到文件尾
shift+a 到行尾
shift+i 到行首(最先面的字符)
ctrl+f/ctrl+d 向下翻一屏/半屏
ctrl+b/ctrl+u 向上翻一屏/半屏
h/l/j/k 向前/后/下/上移动
u 恢复上一个操作
e filename 编辑另一个文件
e# 切换会上一个文件
n 当一次编辑多个文件时,编辑下一个文件;也可以
是重复上一个查找
r filename 从filename中读内容到光标的下一行
w filename 将当前文件的内容写到filename中
sh 暂退出编辑文件,但此文件仍处于编辑状态,
用exit或ctrl+d回到编辑文件
! 在编辑状态下,执行shell命令
!! 重复执行上一个shell命令
^ 表示行首
$ 表示行尾
g line_no 到line_no行
shift+5 扩号的匹配(包括小扩号,大扩号,中扩号)
n<</ n>> 将n行向左/右移动一个tab键的距离的位置
cw 替换一个词
三.举例
1.删除文件中的几行
到删除的开始处 ma
到删除的结束处 d'a
2.拷贝文件中的几行
到拷贝的开始处 ma
到拷贝的结束处 y'a
3.替换文件中所有匹配的字符
替换文件中的 lesson为course
s/lesson/course/g
注意:可能替换含有lesson的其他词
4.替换文件中一个区域的字符
start_line, end_line %s/lesson/course/g 或者
采用宏的方式
‘a,. %s/lesson/course/g #需要定义宏;'.'是指光标所在行
5.替换一个文件中某些词
比如替换none为nothing
查找 /none
替换 cw,输入nothing,按键盘Esc
继续查找 n
替换 .
6.重复执行一个shell命令
编译一个程序
保存编辑后的文件 :w
编译文件 :!make
修改文件后,在保存 :w
再编译 :!!
7.在两个文件互拷贝
第一种方法:
编辑源文件 vi source_file
到拷贝的部分开始处 ma
到拷贝的部分结束处 :.,'a w tempfile
退出当前文件 :q
编辑目的文件 vi dest_file
到拷贝的地方 :r tempfile
第二种方法:
编辑源文件 vi source_file
到拷贝的部分开始处 ma
到拷贝的部分结束处 “ay'a
不退出源文件编辑目的文件 :e dest_file
到拷贝的地方 “ap
标签: