16、vi
使用:vi 文件名...
说明:vi 是一个全屏幕编辑器,在命令后跟多个文件时,在第一个文件关闭后,会自动打开第二个文件,依次类推。使用 UNIX开发,vi是必须掌握的。
vi 工作模式分为命令模式和输入模式。在输入模式下,输入的一切作为文本插入到当前编辑的缓冲区。在命令模式下,输入的字符都将被翻译成命令。
在输入模式下按“ESC”键进入命令模式。
在命令模式下,进入输入方式的命令:
a 在当前光标的后面插入文本
A 在当前光标的所在的行末插入文本
C 修改当前行光标后面的文本
cw 修改当前词光标后面的字符
i 在当前光标处添加新文本
I 在当前行开头插入新文本
o 在当前行后插入一行
O 在当前行前插入一行
s 用一串字符替换当前字符
光标移动命令:
h, 左行键, backspace 光标左移
j, 下行键 光标下移
k, 上行键 光标上移
l, 右行键, space 光标右移
0(数字0) 移光标到当前行首
$ 移光标到当前行末
b, B 光标前移一个词,光标落在第一个字符(B忽略标点)
w, W 光标下移一个词,光标落在第一个字符(C忽略标点)
( 移光标到上一句开头
) 移光标到下一句开头
{ 移光标到上一段(段一般以空行为依据)开头
} 移光标到下一段(段一般以空行为依据)开头
[[ 移光标到上一节(节一般以{为依据)开头
]] 移光标到下一节(节一般以{为依据)开头
H 移动光标到当前缓冲区的第一行
L 移动光标到当缓冲区的最后一行
M 移动光标到当缓冲区的中间行
编辑区移动命令(^表示Ctrl键):
^B 上移(回退)一屏
^U 上移(回退)半屏
^F 下移(前移)一屏
^D 下移(前移)半屏
到一个行号:
: n 到第n行
nG 到第n行
1G 到文件第1行
G 到文件尾
vi编辑命令(包括上面提到的进入输入方式的所以命令)还有下面一些常用的:
修改命令:
r 替换一个字符但不进入输入模式
~ 大小写替换
取消和重复改变:
. 重复上次命令来修改缓冲区
u 取消上次最后一条命令
删除文本:
dd 删除当前行
d n d 删除当前下面的n行
dG 删除到文件尾
D 删除到行末
x 删除当前的字符
:line1, line2d 删除line1到line2之间的行
:line1, $ d 删除line1到文件末的所有行($代表文件末)
复制和移动(拷贝时,一般是存储到缺省缓冲区,可以采用“"缓冲区名”的方式指定存储的缓冲区名称,缓冲区名可以是“a~z”的字符,如“"a”指定a缓冲取,“"g”指定g缓冲区;缺省缓冲区不能在文件间使用,但命名缓冲区可以在不同的文件间切换使用,此处的切换是指的不退出vi,而调入新文件的切换;当在不同的文件间进行拷贝时,就可以采用这种命名缓冲区,命名缓冲区的引用采用“"缓冲区名”的方式;可以使用命令“m标记名”方式定义某字符标记当前行,标记名可以是“a~z”的字符,如mj,使用j标记当前行,标记的引用采用“'字符”的方式):
yy 复制当前行(到缺省缓冲区)
"ayy 复制当前行(到a缓冲区)
yny 复制当前n行(到缺省缓冲区)
"ayny 复制当前n行(到a缓冲区)
y'j 复制当前行到字符j所标记行之间的行到缺省缓冲区
"ay'j 复制当前行到字符j所标记行之间的行到a缓冲区
p 粘贴当前缓冲区内容到光标位置之后
P 粘贴当前缓冲区内容到光标位置之前
"ap 粘贴a缓冲区内容到光标位置之后
"aP 粘贴a缓冲区内容到光标位置之后
查找字符串:
/ 模式 向前搜索模式,将光标移动到模式出现处,模式是一个正规表达式
? 模式 向后搜索模式,将光标移动到模式出现处,模式是一个正规表达式
n 重复上次搜索
下面是vi的命令集列表:
^B 退回前一页,前面加数字表示重复次数,每次换页时
保留上一页的两行
^D 在命令模式下,表示下滚屏幕的一半,在输入模式下,表示回退至
左边的自动缩进处
^E 显示屏幕底线之下的一行
^F 前进一页,前面加数字表示重复次数,每次换页时
保留上一页的两行
^G 显示当前文件名,当前行号和文件总行数,并用百分号当前行在
整个文件中的位置
^H(退格) 在命令模式下,光标左移一格;在输入模式下,删去前面的字符
^I(TAB) 在输入模式下,产生一串空格
^J(LF) 光标下移一行
^L 刷新屏幕,即将屏幕重新显示
^M(回车) 在命令模式下,光标移动至下行开头
在输入模式下,开辟一新行
^N 光标下移一行
^P 光标上移一行
^Q 在输入模式下,将其后的非打印字符作为正文插入
^R 刷新屏幕
^U 屏幕上滚一半,前面加数字时表示上滚的行数,此数字对
以后的^D ^U 命令有效
^V 在输入模式下,将其后的非打印字符作为正文插入
^W 在输入模式下,使光标回退一个字
^Y 显示屏幕底线之上的一行
^Z 暂停编辑,退回上层Shell
^[(ESC) 退出输入模式,回到命令模式
! 暂时退出编辑,执行Shell命令
"(双引号) 用于标志有名缓冲区,编号缓冲区1-9用于保存被删去的正文,字
母名缓冲区a-z供用户存放自定义的正文
$ 将光标移动到当前行尾,前加数字则表示前移行数,如2$表示移动
到下一行行尾
% 将光标移动到配对的小括号()或大括号
{}
上去
( 退回句子开头
) 前移到句子开头
- 退到上一行第一个非空格字符
. 重复上一次改变缓冲区内容的命令
/ 模式 向前搜索模式,将光标移动到模式出现处,模式是一个正规
表达式,(参看 grep)
: 在屏幕底部提示:,其后可使用ex命令
? 功能同 / ,但方向是向前查找
[[ 光标回退至前一节分界处
\
转意符
]] 光标前移至节分界处
^(不是CTRL) 光标移至当前行第一个非空字符上
' 连续两个''表示将光标移至其移动前的位置,'后跟字母表示光标字
母标记的行首(参看 m 命令)
A 在行尾插入正文,进入输入模式
B 光标回退一个字
C 替换光标后的内容
D 删除光标后的内容
E 光标前移到字尾
F 字符 在当前行向左查找指定字符
G 光标移动到其前面数字指定的行,若未指定则移动到最后一行
H 光标移动到屏幕顶行,若前面有数字,则移动到屏幕上该数字
指定的行
I 在行开头插入正文
J 连接两行,若前面有数字则连接数字指定的行
L 光标移动到屏幕底行,若前面有数字,则移动到屏幕底线往上数该
数字指定的行
M 光标移动到屏幕中线
N 使用模式查找/或?时,重复找下一个匹配的模式,但方向与上次相
反,其功能同 n ,但方向相反
O 在当前行上开辟一新行
P 将上次被删除的正文插入光标前面,可在其前面加缓冲区编号,编
号1-9用于保存被删去的正文,字母名缓冲区a-z供用户存放自定
义的正文
Q 从vi 推出进入ex命令状态
R 替换字符串
S 替换整行
T 字符 向左查找字符
U 将当前行恢复至第一次修改前的状态
W 光标移至下一个字首
X 删除光标前的字符
Y 将当前行存入无名缓冲区,前面加数字表示存入的行数,也可用有
名缓冲区来保存,以后可用命令p或P将其取出
ZZ 存盘退出vi
a 光标后插入正文
b 光标回退至上一个字首
cw 替换当前字
c) 替换当前句子
dw 删除一个字
dd 删除一行
e 光标移到下一个字末
f 字符 在当前行向前查找字符
h 光标左移一格
i 在光标前插入正文
j 光标下移一行
k 光标上移一行
l 光标右移一格
m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,
(参看'命令)
n 重复上次 / 或 ? 命令
o 在当前行下开辟一新行
p 将用户缓冲区内容放到光标位置(参看P命令)
r 替换当前字符
s 用一串字符替换当前字符
t 字符 光标移动至字符前
u 取消上次操作
w 光标移至下一字首
x 删除当前字符
yw 将当前字存入无名缓冲区,前面可加"x,表示存入名字为x的有名
缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命
令取出
yy 将当前行存入无名缓冲区,用法参看yw
{ 光标移动至前一段开头
| 光标移至行首,若前面加数字,则移到数字指定行的行首
}
光标移至下一段开头
在“:”提示符下,常用命令如下:
:w 当前文件存盘
:w! 强制存盘
:w 文件 将内容写入指定文件
:w! 文件 强制写入指定文件
:x,y w 文件 将 x至 y 行写入指定文件中
:r 文件 将文件读到光标位置
:r ! 命令 将系统命令的输出读到光标位置
:q 退出编辑
:q! 强制退出
:x 与命令ZZ相同
:e 文件名 编辑另一文件
:e ! 重新编辑文件,放弃任何改变
:sh 执行sh,结束后回到编辑
:! 命令 执行命令后回到编辑
:n 编辑下一文件
:n 文件表 重新定义待编辑文件表
:set 设置 vi 的选项,例如 set nu 表示每行前显示行号,在选项前
加no则表示清除该选项,例如 set nonu 表示每行前不显示行
号,下面是一些常用的选项:
ai 自动缩进
aw 编辑下一文件前自动存盘
ic 查找字符串时不区分大小写
nu 每行前显示行号
sm 输入)及
}
时显示与之配对的( 或 {
slow 插入时延迟屏幕刷新
ws 使查找能绕过文件尾从头进行
wa 写文件之前不作对文件的检查