VI常用命令和快捷键.docx
《VI常用命令和快捷键.docx》由会员分享,可在线阅读,更多相关《VI常用命令和快捷键.docx(20页珍藏版)》请在冰豆网上搜索。
VI常用命令和快捷键
语法]:
vi[-wn][-R]文件…
[说明]:
vi是一个基于行编辑器ex上的全屏幕编辑器,可以在vi中使用ex,ed的全部命令,vi选项中-wn指将编辑窗口大小置为n行,-R为将编辑的文件置为只读模式,vi工作模式分为命令模式和输入模式,一般情况下在命令模式下,可敲入vi命令,进入输入模式下时可以编辑要编辑的文本,命令aAiIoOcCsSR可进入输入模式,在输入模式下按ESC键可推出输入模式,回到命令模式,在命令模式中敲入:
命令,则可进入ex方式,在屏幕底部出现提示符:
,此时可使用任意ex命令,屏幕底行也用来作/?
!
命令的提示行,大多数命令可以在其前面加数字,表示命令执行的重复次数,下面简单介绍一下vi的命令集:
^表示(CTRL)键
^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,yw文件将x至y行写入指定文件中
:
r文件将文件读到光标位置
:
r!
命令将系统命令的输出读到光标位置
:
q退出编辑
:
q!
强制退出
:
x与命令ZZ相同
:
e文件名编辑另一文件
:
e!
重新编辑文件,放弃任何改变
:
sh执行sh,结束后回到编辑
:
!
命令执行命令后回到编辑
:
n编辑下一文件
:
n文件表重新定义待编辑文件表
:
set设置vi的选项,例如setnu表示每行前显示行号,在选项前加no则表示清除该选项,例如setnonu表示每行前不显示行号,下面是一些常用的选项:
ai自动缩进
aw编辑下一文件前自动存盘
ic查找字符串时不区分大小写
nu每行前显示行号
sm输入)及}时显示与之配对的(或{
slow插入时延迟屏幕刷新
ws使查找能绕过文件尾从头进行
wa写文件之前不作对文件的检查
:
s/old/new用new替换行中首次出现的old
:
s/old/new/g用new替换行中所有出现的old
:
#,#s/old/new/g用new替换从第#行到第#行中出现的old
:
%s/old/new/g用new替换整篇中出现的old
如果替换的范围较大时,在所有的命令尾加一个c命令,强制每个替换需要用户进行确认,例如:
s/old/new/c或s/old/new/gc
u取消操作
i插入命令a附加命令o打开命令c修改命令r取代命令s替换命令Esc退出命令
G文件尾行1G文件首行#G文件的#行
:
setnu:
setnonu显示行号不显示行号
Vi是一个历史悠久且功能强大的UNIX文书编辑器。
在古早的年代,许多键盘都只有一些基本按键,连上下左右键都没有,所以vi大多数的功能都必须使用一些特殊的按键。
Vi在使用时可以分成二种模式,一种是「编辑模式」,另一种则为「命令模式」。
在编辑模式时,我们可以使用上下左右键来移动光标并编辑输入我们所要编辑的文字内容。
而命令模式时,我们可以进行档案操作(开文件、存盘等)、搜寻等功能。
使用vi时,我们会很常按键,键可以让我们离开编辑模式并进入命令模式。
请执行viexample.txt来编辑example.txt这个档案,一进入vi时,预设会处于命令模式,我们必需先输入"o"、"i"、或"a"才能进入编辑模式。
以下即为进入编辑模式的指令:
按键意义
iInsert(插入),在目前光标前开始输入。
aAppend(附加),在目前光标后开始输入。
o在光标下方新增一空白行并开始编辑。
O在光标上方新增一空白行并开始编辑。
如果您输入错误,您无法使用或来删除,我们必须使用vi的其它命令来进行。
请先按来进入命令模式,接着您就可以使用下列指令来进行进阶编辑:
按键意义
x删除光标所在位置的字符。
dw删除游标所在到字尾,即删除一个字。
dd删除游标所在一整行。
d+数字+删除从光标所在位置到其下方n行。
例如输入d5,将删除光标所在位置起6行。
yw复制光标开始到字尾。
yy复制游标所在一整行。
y+数字+复制从光标所在位置到其下方n行。
例如输入y4,将复制光标所在位置起5行。
p贴上上一次复制的内容。
:
w存档。
:
w文件名称另存新檔。
您必输在w后输入新的档名。
:
q离开vi。
如果档案有修改过会无法离开。
:
wq存档并离开。
:
q!
不存档并离开。
接下来我们说明一下如何在档案中穿梭移动:
按键意义
h游标向左移。
j游标向下移。
k游标向上移。
l游标向右移。
^跳到行首。
$跳到行尾。
w游标跳到下个字的开头。
e游标跳到下个字的结尾。
b游标跳到上个字的开头
+d光标往下移动半个屏幕。
+u光标往上移动半个屏幕。
+f光标往上移动一个屏幕。
+b光标往下移动一个屏幕。
:
数字跳到n行,例如输入:
100即可将光标移到第100行。
/欲搜寻的字符串输入/后,您可以在/后输入所要搜寻的字符串,如果要找下一个,则直接按/即可。
只要您熟悉了上列指令,您大概就可以很轻松的使用vi了。
Vi还有许多功能,你可以manvi来获得更多信息。
进入vi的命令
vifilename:
打开或新建文件,并将光标置于第一行首
vi+nfilename:
打开文件,并将光标置于第n行首
vi+filename:
打开文件,并将光标置于最后一行首
vi+/patternfilename:
打开文件,并将光标置于第一个与pattern匹配的串处
vi-rfilename:
在上次正用vi编辑时发生系统崩溃,恢复filename
vifilename….filename:
打开多个文件,依次进行编辑
移动光标类命令
h:
光标左移一个字符
l:
光标右移一个字符
space:
光标右移一个字符
Backspace:
光标左移一个字符
k或Ctrl+p:
光标上移一行
j或Ctrl+n:
光标下移一行
Enter:
光标下移一行
w或W:
光标右移一个字至字首
b或B:
光标左移一个字至字首
e或E:
光标右移一个字至字尾
):
光标移至句尾
(:
光标移至句首
}:
光标移至段落开头
{:
光标移至段落结尾
nG:
光标移至第n行首
n+:
光标下移n行
n-:
光标上移n行
n$:
光标移至第n行尾
H:
光标移至屏幕顶行
M:
光标移至屏幕中间行
L:
光标移至屏幕最后行
0:
(注意是数字零)光标移至当前行首
$:
光标移至当前行尾屏幕翻滚类命令
Ctrl+u:
向文件首翻半屏
Ctrl+d:
向文件尾翻半屏
Ctrl+f:
向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:
将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
插入文本类命令
i:
在光标前
I:
在当前行首
a:
光标后
A:
在当前行尾
o:
在当前行之下新开一行
O:
在当前行之上新开一行
r:
替换当前字符
R:
替换当前字符及其后的字符,直至按ESC键
s:
从当前光标位置处开始,以输入的文本替代指定数目的字符
S:
删除指定数目的行,并以所输入文本代替之
ncw或nCW:
修改指定数目的字
nCC:
修改指定数目的行删除命令
ndw或ndW:
删除光标处开始及其后的n-1个字
do:
删至行首
d$:
删至行尾
ndd:
删除当前行及其后n-1行
x或X:
删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:
删除输入方式下所输入的文本搜索及替换命令
/pattern:
从光标开始处向文件尾搜索pattern
?
pattern:
从光标开始处向文件首搜索
patternn:
在同一方向重复上一次搜索命令
N:
在反方向上重复上一次搜索命令
:
s/p1/p2/g将当前行中所有p1均用p2替代
:
n1,n2s/p1/p2/g将第n1至n2行中所有p1均用p2替代
:
g/p1/s//p2/g将文件中所有p1均用p2替换选项设置
all:
列出所有选项设置情况
term:
设置终端类型
ignorance:
在搜索中忽略大小写
list:
显示制表位(Ctrl+I)和行尾标志($)
number:
显示行号
report:
显示由面向行的命令修改过的数目
terse:
显示简短的警告信息
warn:
在转到别的文件时若没保存当前文件则显示NOwrite信息
nomagic:
允许在搜索模式中,使用前面不带“\”的特殊字符nowrapscan:
禁止vi在搜索到达文件两端时,又从另一端开始
mesg:
允许vi显示其他用户用write写到自己终端上的信息最后行方式命令
:
n1,n2con3将n1行到n2行之间的内容拷贝到第n3行下
:
n1,n2mn3将n1行到n2行之间的内容移至到第n3行下
:
n1,n2d将n1行到n2行之间的内容删除
:
w保存当前文件
:
efilename打开文件filename进行编辑
:
x保存当前文件并退出
:
q退出vi
:
q!
不保存文件并退出vi
:
!
command执行shell命令command
:
n1,n2w!
command:
将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:
r!
command:
将命令command的输出结果放到当前行
寄存器操作
“?
nyy:
将当前行及其下n行的内容保存到寄存器?
中,其中?
为一个字母,n为一个数字
“?
nyw:
将当前行及其下n个字保存到寄存器?
中,其中?
为一个字母,n为一个数字
“?
nyl:
将当前行及其下n个字符保存到寄存器?
中,其中?
为一个字母,n为一个数字
“?
p:
取出寄存器?
中的内容并将其放到光标位置处。
这里?
可以是一个字母,也可以是一个数字ndd:
将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。
set命令
显示行号:
setnumber
将文件设为只读:
setreadonly
使vi在“:
n”和“:
!
”命令之前都自动保存文件:
setautowrite
显示用户处在什么模式下:
setshowmode
:
setnoshowmode就是关闭此显示。
vi环境变量还有很多。
了解它们,将给用户使用vi带来更多方便。
用户可以通过vi的联机帮助查到对应的环境变量的详细作用。
vi技巧
1)用指定快捷键如ctrl+j输入#注释符
在":
"提示符下,使用定义快捷键的命令map,然后同时按下ctrl+v,然后再按下ctrl+j,再输入空格,再输入要定义的命令,命令是按"i"键后输入"#",再输入"esc"键.:
map^Bi#
2)给文件加密
在命令行状态:
下,执行命令X,然后输入密码即可,ps:
一般脚本加密码后无法自动执行了
++在vi中搜索了一个单词,该单词以高亮显示,看起来很不舒服,怎么能将它去掉
在vi的命令模式下输入:
nohlsearch就可以了。
另外可以在~/.vimrc中写上下面的语句就会有高亮显示:
sethlsearch
加上下面的语句就不会有高亮显示:
setnohlsearch
vi其它技巧整理:
1、交换两个字符位置xp;
上下两行调换ddp;
上下两行合并J;
从当前位置复制到行尾y$
如果要粘贴到其他地方p就可以了
删除所有行dG
从当前位置删除到行尾d$
2、:
X
保存后就加密了
:
X
然后系统会提示输入密码
输入密码后存盘退出
下次编辑时请使用
vi-xfilename
系统会提示你输入密码,呵呵
例:
以HP-UX为例
a、加密
vifile
:
X
(Areyousure?
(y/n)[n]:
)回答y
输入密码回车以后再保存,就加密成功了
b、解密
vi-Cfile或者vi-xfile
在Key:
后面输入密码进入file
:
X
(Areyousure?
(y/n)[n]:
)回答y
直接回车以后再用wq或者wq!
保存,就把file解密成功了
顺便提一下:
加密后的脚本不能被解释执行!
c、:
X(uppcaseX)
key:
……
后用wq!
存盘,不能用:
x,否则加密失效
打开时:
vi-xfile
key:
…..
3、在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,粘贴下来在光标处
4、单个字符替换用r;
覆盖多个字符用R;
用多个字符替换一个字符用s;
整行替换用S;
:
%s/old_word/new_word/g;
这个指令是于在整个文件中替换特定字符串;
5、H跳到第一行
M跳到中间一行
L跳到最后一行
将光标移到第n行,按下mk
将光标移到第m行,按下"ay'k
即将第n到m的行存到a寄存器,以此类推,b,c……..寄存器等
想粘贴到某处,直接将光标移到某地,按下‘ap即可
6、删除命令
dl删除当前字符(与x命令功能相同)
d0删除到某一行的开始位置
d^删除到某一行的第一个字符位置(不包括空格或TAB字符)
dw删除到某个单词的结尾位置
d3w删除到第三个单词的结尾位置
db删除到某个单词的开始位置
dW删除到某个以空格作为分隔符的单词的结尾位置
dB删除到某个以空格作为分隔符的单词的开始位置
d7B删除到前面7个以空格作为分隔符的单词的开始位置
d)删除到某个语句的结尾位置
d4)删除到第四个语句的结尾位置
d(删除到某个语句的开始位置
d}删除到某个段落的结尾位置
d{删除到某个段落的开始位置
d7{删除到当前段落起始位置之前的第7个段落位置
dd删除当前行
d/text删除从文本中出现“text”中所指定字样的位置,一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容
dfc删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括
该字符)之间的内容
dtc删除当前行直到下一个字符“c”所出现位置之间的内容
D删除到某一行的结尾
d$删除到某一行的结尾
5dd删除从当前行所开始的5行内容
dL删除直到屏幕上最后一行的内容
dH删除直到屏幕上第一行的内容
dG删除直到工作缓存区结尾的内容
d1G删除直到工作缓存区开始的内容
7、修改操作
cl更改当前字符
cw修改到某个单词的结尾位置
c3w修改到第三个单词的结尾位置
cb修改到某个单词的开始位置
cW修改到某个以空格作为分隔符的单词的结尾位置
cB修改到某个以空格作为分隔符的单词的开始位置
c7B修改到前面7个以空格作为分隔符的单词的开始位置
c0修改到某行的结尾位置
c)修改到某个语句的结尾位置
c4)修改到第四个语句的结尾位置
c(修改到某个语句的开始位置
c}修改到某个段落的结尾位置
c{修改到某个段落的开始位置
c7{修改到当前段落起始位置之前的第7个段落位置
ctc修改当前行直到下一个字符c所出现位置之间的内容
C修改到某一行的结尾
cc修改当前行
5cc修改从当前行所开始的5行内容
折行
:
setwrapmargin=4
:
setnumber加行号!
:
g/$/s//ABC/g
:
g/^/s//def/g
在文本每行的头和尾添加字符串.
8、替换操作
s将当前字符替换为一个或多个字符
S将当前行替换为一个或多个字符
5s将从当前字符开始的5个字符替换为一个或多个字符
注:
vi替换使用规则:
:
g/s1/s/s2/s3/g
第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换
s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串
9、移动
fx
往右移动到x字符上–〉fx
往左移动到x字符上–〉Fx
往右移动到x字符前–〉tx
往左移动到x字符后–〉Tx
(注意:
以上四个命令中,其中x是键入的字符)
;–>分号,配合f和t使用,重复一次
–>逗号,配合f和t使用,反方向重复一次
10、
标记文本
mchar 用字母char标记当前光标的位置
`char 移至char所标记处
'char 移至char标记所在行的开头处
" 移至当前行上一次所在位置(在光标移动之后)――一个双引号
'' 移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号
ctrl+f向下翻页,ctrl+b向上翻页(对于telnet上去的时候比较有用)
shift+4到本行末尾,shift+6到本行开头
11、追加到缓冲区
对于已经有内容的缓冲区,可以继续追加内容在其后面,例如:
"Ad4w删除光标后4个字,并附加到缓冲区a
"Ay)取样从光标到文件尾的内容,并附加到缓冲区a
"K3yy取样从光标所在行起的3行内容,并附加到缓冲区k
注意:
在追加缓冲区的命令中,原缓冲区的名字一定要大写,才能将内容追加进去,否则是覆盖原缓冲区的内容。
追加内容在原缓冲区末尾另起一行。
12、在:
命令行模式下,首先可以确定命令的范围
.表示当前行;数字表示行号,如1表示第一行,2表示第二行;$表示最后一行
范围用,分隔
然后用命令
d表示删除,y表示复制……大家都知道的
最后说一句,%表示全文
:
%d
是删除全文
13、恢复前几次操作应用什么命令呀?
:
em52:
14、:
n,n1d
n和n1都是行数,d是删除这些行.表示当前的行。
:
n
n是行数,直接转到n行。
:
r文件名
把文件添加到当前的文件中
:
n,n1w文件名
把从n行到n1行写道另外一个文件中
15、查找:
在一个单词上用*,就向下查找此单词,#是向上
用/\查找hello,就不会查找到hello_world(用此替换也很好用)
替换:
如有