(一) vi的常用操作
vi是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视 窗设备,通过它可以编辑文件.基本上vi可分为三种操作状态,分别是命令模式(Command mode)、插入模式(Insert mode)和底线命令模式(Last line mode),各模式的功能区分如下:
1. Comand mode:控制屏幕光标的移动,字符或光标的删除,移动复制某区段及进入Insert mode下,在Command mode下按‘i’、‘a’或‘o’三键就可进入Insert mode;按”:”,”?”,”/”等键进入Last line mode.
2. Insert mode:唯一的功能即是输入文字数据,按Esc键可回到Comand mode。
3. Last line mode:将储存文件或离开编辑器,也可设置编辑环境,如寻找字符串、列出行号等。按ESC键转换回Command mode.
不过可以把vi简化成两个模式,即是将Last line mode也算入Command mode,把vi分成Command 和Insert mode。在系统提示符号输入vi及文件名称后,即可进入vi全屏幕编辑画面.
Insert mode:
i:插入,在目前的光标位置输入文字
I:该命令是将光标移到当前行的行首,然后在其前插入文本
a:用于在光标当前所在位置之后追加新文本
A:将光标移到所在行的行尾,从那里开始插入新文本
o:在光标下面插入一行
O:在光标所在行的上面插入一行
Command mode :
移动光标
h 或←左
j 或↓下
k 或↑上
l 或→右
Ctrl+B:屏幕往后移动一页。
Ctrl+F:屏幕往前移动一页。
Ctrl+U:屏幕往后移动半页。
Ctrl+D:屏幕往前移动半页。
Ctrl+E: 向后卷动一行
Ctrl+Y:向前卷动一行
0 (数字零):光标移动到该行的开头。
$:光标移到所在行的行尾。
G:光标移动到最后一行的行首。
W或w:光标跳到下个word的开头。
e:光标跳到下个word的字尾。
b:光标回到上个word的开头。
^:移到该行第一个非空白的字符。
~:改变字母大小写
数字+|:光标移到指定的字符,例如,”7|”表示将光标移到该行的第七个字符
Ctrl+g ctrl+G:在窗口的最后一行显示内容的总行数以及目前所在的行数
%:将光标停留在某个右括号或左括号,然后按%键,可以检查是否有相应的右括号或左括号
H:屏幕最上
M:中央
L:屏幕最下
{:光标向前移动一个段落
}:光标向后移动一个段落
复制文字:
yy:复制光标所在行,复制后的部分并不会反色显示
yw: 将光标所在位置的整个单字复制
p:将缓冲区内的字符粘贴到光标所在位置
数字+yy:如:6yy表示将目前光标所在位置以及其后的五行一起复制
数字+yw:如:2yw 表示将目前光标所在位置以及基后的两个字一起复制
“ayy:将复制行放入buffer a, vi提供buffer功能,可将常用的数据存在buffer
“ap:将放在buffer a的数据粘贴。
“b3yy:将三行数据存入buffer b。
“b3p:将存在buffer b的资料粘贴
删除
x:删除光标所在位置的字符
X:大字的X,删除光标所在位置的前面一个字符。
数字+x:例如,6x 表删除光标所在位置及后方5个字符
数字+X:例如,20X 表删除光标所在位置的前面20个字符。
dd:删除光标所在行,按住d可以连续删除数行
数字+dd:例如,6dd表删除从光标所在的行及往下的5行的文字。
D:可删除同一行中光标所在位置之后的所有字符
dw::删除光标所在位置之后的一个单词,如果光标在某个词的中间,则从光标所在位置开始删至词尾并连同空格
ndw:删除n个指定的单词
db:删除光标所在位置之前的一个词
ndb:删除光标所在位置之前的n个词
d+←:可将光标所在位置的前一个字符删除
d+→:可将光标所在位置的字符删除
d+↑:可将光标所在位置的行与上一行同时删除
d+↓:可将光标所在位置的行与下一行同时删除
数字+ d+↑:删除指定的范围,如2d+↑,即可删除光标所在的行及上方2行
数字+ d+↓:删除指定的范围,如2d+↓,即可删除光标所在的行及下方2行
替换
r:替换某个位置的字符,先按r键,再输入要替换的字符,替换光标所指向的当前字符,按n继续查找下个要替换的字符
nrc:用字符c替换光标所指向的前n个字符
R:可以一直替换字符,直到按esc键才停止
撤销和重复
u :假如您误操作一个指令,可以马上按u,回复到上一个操作
U:取消对行所做的所有改变
。:重复执行上一个命令
搜索字符串
/str:往右移动到有str的地方
?str:往左移动到有str的地方
n:向相同的方向移动到有str的地方
N:向相反的方向移动到有str的地方
退出
ZZ:保存内容并退出
ZQ:不保存退出
Last line mode :
跳行:
输入数字:如果直接输入数字再按回车键,可将光标移到该行的行首
退出:
q:退出
q!:强制退出
wq:保存并退出
文件相关:
e+文件名:新建立一个文件
n+文件名:加载另一个文件
w:保存文件
w file:将当前编辑的内容写到file文件中
nl,n2w file:将从n1开始到n2结束的行写到file文件中
nw file :将第n行写到file文件中
1,。w file:将从第一行起到光标当前位置的所有内容写到file文件中
。,$w file:将从光标当前位置起到文件结尾的所有内容写到file文件中
r file:打开另一个文件file
f file:把当前文件改名为file文件
字符串搜索,替换,删除
/str/:从当前光标开始往右移动到有str的地方
?str? :从当前光标开始往左移动到有str的地方
/str/w file:将包含有str的行写到文件file中
/str1,str2/w file:将从str1开始到str2结束的内容写入 file文件中
s/str1/str2/g:将所有的str1替换为str2
s/str1/str2:将第一个str1替换为str2
。,$ s/str1/str2/g:将当前位置到结尾的所有的str1替换为str2
1,$s/string/replae/g:在last line mode输入“1,$s/string/replace/g”会将全文的string字符串取代为replace字符串,其中1,$s就是指搜寻区间为文章从头至尾的意思,g则是表示全部取代不必确认。
%s/string/replace/c:同样会将全文的string字符串取代为replace字符串,和上面指令不同的地方是,%s和1,$s是相同的功能,c则是表示要替代之前必须再次确认是否取代。
1,20s/string/replace/g:将1至20行间的string替代为relpace字符串。
文本的复制,移动和删除
n1,n2 co n3:将从n1开始到n2为止的所有内容复制到n3后面
n1,n2 m n3:将从n1开始到n2为止的所有内容移动到n3后面
d:删除当前行
nd:删除从当前开始的n行
n1,n2 d:删除从n1开始到n2为止的所有内容
。,$d:删除从当前行到结尾处的所有内容
/str1/,/str2/d:删除从str1开始到str2为止的所有内容
执行SHELL命令:
!Cmd:运行shell命令Cmd
n1,n2 w!:将n1到 n2的内容作为Cmd命令的输入,如果不指定n1和n2,则将整个文件的内容作为命令Cmd的输入
r!Cmd:将命令运行的结果写入当前行位置
设置VI环境
:set autoindent:缩进每一行,使之与前一行相同,通常用于程序的编写
:set noautoindent:取消缩进
:set ruler:在屏幕底部显示光标所在的行,列位置
:set noruler:不显示光标所在的行,列位置
:set nu:在文件中的每行行首加入行号
:set nonu:取消行号