(一) 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,n 2 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
:取消行号