Linux vi 命令大全.docx

上传人:b****6 文档编号:8176552 上传时间:2023-01-29 格式:DOCX 页数:13 大小:23.23KB
下载 相关 举报
Linux vi 命令大全.docx_第1页
第1页 / 共13页
Linux vi 命令大全.docx_第2页
第2页 / 共13页
Linux vi 命令大全.docx_第3页
第3页 / 共13页
Linux vi 命令大全.docx_第4页
第4页 / 共13页
Linux vi 命令大全.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Linux vi 命令大全.docx

《Linux vi 命令大全.docx》由会员分享,可在线阅读,更多相关《Linux vi 命令大全.docx(13页珍藏版)》请在冰豆网上搜索。

Linux vi 命令大全.docx

Linuxvi命令大全

Linuxvi命令大全

Vim(vi)是Linux中功能强大的编辑工具。

VI是visualedit的缩写

文本编辑器是所有计算机系统中最常用的一种工具。

UNIX下的编辑器有ex,sed和vi等,其中,使用最为广泛的是vi,而vi命令繁多,以下稍做总结,

1vi有3中主要的模式:

1.1Normal mode:

当进入vi时,默认的模式就是normal mode。

在此模式下,无法输入任何文字,不过可以利用按键命令(并不是输入“:

”再输入命令的方式)来执行许多操作命令,例如移动光标位置、复制、删除。

1.2 Insert mode:

进入vi输入a、i、或o键。

即可进入insert mode,此模式下可以输入文字内容。

1.3Command-line mode:

normalmode中输入“:

”即会进入command-line mode,在此模式下,可以做一些与输入文字无关的事,例如通过输入命令如:

“:

setnumber”, “:

s/p1/p2/g”, “:

wq”搜索字符串、保存文件或结束编辑等。

2进入vi的命令(Shell提示符下输入)

e.g.$vi+/whileexercise1解释:

打开文件exercise1,并将光标置于第一个与“while”匹配的串处,注意其中的“+”是必须的。

vifilename:

打开或新建文件,并将光标置于第一行首

vi+nfilename:

打开文件,并将光标置于第n行首

vi+filename:

打开文件,并将光标置于最后一行首

vi+/patternfilename:

打开文件,并将光标置于第一个与pattern匹配的串处

vi-rfilename:

在上次正用vi编辑时发生系统崩溃,恢复filename

vifilename....filename:

打开多个文件,依次进行编辑

3Normalmode

3.1移动光标类命令

Number+“→”:

光标右移number个字符

Number+“←”:

光标左移number个字符

Number+“↑”:

光标上移number行

Number+“↓”:

光标下移number行

h:

光标左移一个字符

l:

光标右移一个字符

space:

光标右移一个字符

Backspace:

光标左移一个字符

k或Ctrl+p:

光标上移一行

j或Ctrl+n:

光标下移一行

Enter:

光标下移一行

w或W:

光标右移一个字至字首

b或B:

光标左移一个字至字首

e或E:

光标右移一个字至字尾

):

光标移至句尾

(:

光标移至句首

}:

光标移至段落开头

{:

光标移至段落结尾

nG:

光标移至第n行首,必须是大写的G

n+:

光标下移n行

n-:

光标上移n行

n$:

光标移至第n行尾

H:

光标移至屏幕顶行

M:

光标移至屏幕中间行

L:

光标移至屏幕最后行

0:

(注意是数字零)光标移至当前行首

$:

光标移至当前行尾

3.2屏幕翻滚类命令

Ctrl+u:

向文件首翻半屏

Ctrl+d:

向文件尾翻半屏

Ctrl+f:

向文件尾翻一屏

Ctrl+b;向文件首翻一屏

nz:

将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

3.3删除、复制及修改指令介绍

d(delete)、c(change)和y(yank)这一类的指令在vi中的指令格式为:

number+operation+scope=command

(运算子)(范围)

比如:

yw表示复制当前word

4yw复制当前以及后面3个字,总工4个字,4+yank+w(word)

3.4复制命令

yy命令复制当前整行的内容到vi缓冲区

yw复制当前光标所在位置到单词尾字符的内容到vi缓存区,相当于复制一个单词

y$复制光标所在位置到行尾内容到缓存区

y^复制光标所在位置到行首内容到缓存区

#yy例如:

5yy就是复制5行

#yw例如:

2yw就是复制两个单词,本身及后面一个单词

  如果要复制第m行到第n行之间的内容,可以在末行模式中输入m,ny例如:

3,5y复制第三行到第五行内容到缓存区。

3.5删除命令

d:

先按d键,放开后按←键,可将光标位置前一个字符删除;按→键,则会将光标位置的字符删除;按↑键,可将当前光标所在的行与前一行一并删除。

按↓键,可将当前的光标所在的行与下一行删除。

D:

可删除一行中光标所在位置之后的所有字符。

dd:

连续按2次d键可删除光标所在的那一行。

dw:

将光标停在某个字的第一个字符,按dw键时,会将此字整个删除。

如将光标置在某个字中间的字符上,则会将此字中光标后面的字符删除。

nd:

n为数字,如按3d,再按下↑键,则删除光标上方的3行,再包括本身1行,共删除4行。

若按下↓键,则删除光标下方3行再包括本身1行,共4行。

ndd:

若按3dd键,表示删除当前光标位置的1行和下面的2行。

x:

删除光标所在位置的字符

X:

删除光标所在位置的前一个字符,与d+←键一样

nx:

按4x键,表示删除光标位置后的3个字符和光标本身所在的字符

nX:

按4X键,表示删除光标位置之前的4个字符(不包括光标的字符)

ndw或ndW:

删除光标处开始及其后的n-1个字

d0:

删至行首,数字0

d$:

删至行尾

ndd:

删除当前行及其后n-1行

x或X:

删除一个字符,x删除光标后的,而X删除光标前的

Ctrl+u:

删除输入方式下所输入的文本

文本删除

在编辑文本时,经常需要删除一些不需要的文本,我们可以用键将输错或不需要的文本删除,但此时有一个限制就是当删到行头之后,再想删上面那行的内容是不可能的。

在命令模式下,Vi提供了许多删除命令。

这些命令大多是以d开头的。

常用的有:

1.删除单个字符

x:

删除光标处的字符。

若在x之前加上一个数字n,则删除从光标所在位置开始向右的n个字符。

X:

删除光标前面的那个字符。

若在X之前加上一个数字n,则删除从光标前面那个字符开始向左的n个字符。

显然这两个命令是删除少量字符的快捷方法。

2.删除多个字符

dd:

删除光标所在的整行。

在dd前可加上一个数字n,表示删除当前行及其后n-1行的内容。

D或d$:

两命令功能一样,都是删除从光标所在处开始到行尾的内容。

d0:

删除从光标前一个字符开始到行首的内容。

dw:

删除一个单词。

若光标处在某个词的中间,则从光标所在位置开始删至词尾。

同dd命令一样,可在dw之前加一个数字n,表示删除n个指定的单词。

如果用户不小心进行了误删除操作,也不要紧,Vi提供了恢复误操作的命令,并且可以将恢复的内容移动,放在文本的任何地方。

恢复命令用2np,其中n为寄存器号。

这是因为Vi内部有9个用于维护删除操作的寄存器,分别用数字1,2,?

,9表示,它们分别保存以往用dd命令删除的内容。

这些寄存器组成一个队列,例如最近一次使用dd命令删除的内容被放到寄存器1中;当下次再使用dd命令删除文本内容时,Vi将把寄存器1的内容转存到寄存器2中,而寄存器1中又将是最近一次dd命令删除的内容。

以此类推,Vi可以保存有最近九次用dd命令删除的内容,而前面的用dd命令删除的内容则被抛弃。

[例18]假设当前编辑文件为xu.c

/*thisisaexample*/

#include

voidmain()

{

inti,j;

printf(“pleaseinputanumber:

/n”);

scanf(“%d”,&i);

j=i+100;

printf(“/nj=%d/n”,j);

return;

}

我们对其进行如下操作:

将光标移至文件第一行,按dd命令,此时文件第一行的内容被删除,且被删除的内容保存在寄存器1中;

按5j使光标下移至第一个printf语句行;

按dd命令将该行删除,此时寄存器1中将保存刚刚被删除的内容:

printf(“pleaseinputanumber:

\n”);

而寄存器1原有的内容:

/*thisisaexample*/

则被保存到寄存器2中;

在最末行模式下,也可以对文件内容进行删除,但它只能删除整行,一次可将某个指定范围内(起始行号,终止行号)的所有行全部删除。

需要注意的是,用此种方法进行删除时,Vi并不把所删内容放入寄存器中,因而当发生误删除操作时,不能用2np命令恢复,只能用u命令进行有限的恢复。

3.6重复操作与撤消

命令.(点号)、u、U

.重复上一次的操作,当并不是那种重作,他只是重复你上次输入的命令。

Ctrl+R重做,注意大写的R

u撤消上次操作

U撤消当前行进行的任意修改。

^R:

(^意为Ctrl键)按此键就是执行redo命令,可以恢复刚才undo的操作

取消上一命令(Undo)

取消上一命令(Undo),也称复原命令,是非常有用的命令,它可以取消前一次的误操作或不合适的操作对文件造成的影响,使之回复到这种误操作或不合适操作被执行之前的状态。

取消上一命令有两种形式,在命令模式下键入字符u和U。

它们的功能都是取消刚才输入的命令,恢复到原来的情况。

小写u和大写U在具体细节上有所不同,二者的区别在于,大写U命令的功能是恢复到误操作命令前的情况,即如果插入命令后使用U命令,就删除刚刚插入的内容;如果删除命令后使用U命令,就相当于在光标处又插入刚刚删除的内容。

这里把所有修改文本的命令都视为插入命令。

也就是说,U命令只能取消前一步操作,如果用U命令撤消了前一步操作,当再按U键时,并不是撤消再前一步的操作,而是撤消了刚才U命令执行的操作,也就是又恢复到第一次使用U命令之前的状态,结果是什么都没做。

而小写u命令的功能是把当前行恢复成被编辑前的状态,而不管此行被编辑了多少次。

[例19]原来屏幕显示内容为:

#include

main()

{

}

在命令模式下输入命令o,插入一新行,输入需要插入的内容后再按回到命令模式,屏幕显示内容为:

#include

main()

{

printf(“Howdoyoudo!

”);

}

若想取消这一插入操作,请按命令U后,屏幕恢复到原来显示的情况。

注意:

对于取消命令仍可以再使用取消命令。

这时会产生一种“负负得正”的效果,文件状态将恢复到第一次执行取消命令之前的状态,如同没做任何操作一般。

例如在上例中,再使用一次命令U,屏幕将显示的内容仍为插入后的内容。

重复命令(Redo)

重复命令也是一个非常常用的命令。

在文本编辑中经常会碰到需要机械地重复一些操作,这时就需要用到重复命令。

它可以让用户方便地再执行一次前面刚完成的某个复杂的命令。

重复命令只能在命令模式下工作,在该模式下按“.”键既可。

执行一个重复命令时,其结果是依赖于光标当前位置的。

[例20]屏幕显示内容为:

#include

main()

{

}

输入命令o,并输入一行内容后,再返回到命令模式下,屏幕显示内容为:

#include

main()

{

printf(“Howdoyoudo!

”);

}

此时输入命令“.”,屏幕显示内容为:

#include

main()

{

printf(“Howdoyoudo!

”);

printf(“Howdoyoudo!

”);

3.7状态命令

命令显示在vi状态行上的vi状态信息,包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标之前的行占整个文件的百分比。

4Command-linemode

4.1搜索及替换命令

/pattern :

从光标开始处向文件尾搜索pattern(按ESC,再按“/”)

?

pattern :

从光标开始处向文件首搜索pattern(按ESC,再按“?

”)

n :

在同一方向重复上一次搜索命令

N :

在反方向上重复上一次搜索命令

s/p1/p2/g :

将当前行中所有p1均用p2替代(按ESC,再按“:

”,接着输入“s/p1/p2/g”)

n1,n2s/p1/p2/g:

将第n1至n2行中所有p1均用p2替代

g/p1/s//p2/g:

将文件中所有p1均用p2替换,注意s后面是“//”

example:

当要将文章中的某一个字符串全部替换时(例如将所有的temp替换成tmp),使用“:

g/temp/s//tmp/g”或“:

1,s/temp/tmp/g”命令,可立刻将所有的“temp”替换成“tmp”字符串。

如果不是所有的“temp”字符串都要替换时,可用“:

g/temp/s//tmp/gc”或“:

1,/s/temp/tmp/gc”命令。

则找到每一个“temp”字符串时,都会将整行显示在屏幕的下方,可输入“y”或“n”决定是否要替换。

4.1.1搜索文本

/向后查找文本进入命令模式输入/[你要查找的文本];例如找edit输入/edit;

而向前查找文本就是输入?

[你要查找的文本];

n当有许多搜索结果时,命令模式下输入n就可以找下一个搜索结果

N则是反向下一个搜索结果。

关于n和N的使用方法,当输入/hello,后vi会标记并跳到第一个hello处,此时直接按键n或N即是查找后一个或前一个匹配的hello,并不需要输入:

n或:

N这样反而是错误的。

r:

替换光标所在的位置的字符。

修改内容不一定要进入insert mode,在normal mode中,只要将光标移到要更改的字符上,然后按R键,就可以输入要查找的字符了。

R:

连续替换光标所在的位置的字符,按Esc键停止替换

cc:

按cc键可以替换光标所在的那一行

4.2选项设置(:

setoption)

e.g.:

setnumber

setnu显示行号

setnonu不显示行号

setic查找时不考虑大小写

setnoic查找时考虑大小写

setall:

列出所有选项设置情况

setterm:

设置终端类型

setignorance:

在搜索中忽略大小写

setlist:

显示制表位(Ctrl+I)和行尾标志($)

setnumber:

显示行号

setreport:

显示由面向行的命令修改过的数目

setterse:

显示简短的警告信息

setwarn:

在转到别的文件时若没保存当前文件则显示NOwrite信息

setnomagic:

允许在搜索模式中,使用前面不带"\"的特殊字符

setnowrapscan:

禁止vi在搜索到达文件两端时,又从另一端开始

setmesg:

允许vi显示其他用户用write写到自己终端上的信息

4.3最后行方式命令

4.3.1Copy,move,delete

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的输出结果放到当前行

4.4寄存器操作

"?

nyy:

将当前行及其下n行的内容保存到寄存器?

中,其中?

为一个字母,n为一个数字

"?

nyw:

将当前行及其下n个字保存到寄存器?

中,其中?

为一个字母,n为一个数字

"?

nyl:

将当前行及其下n个字符保存到寄存器?

中,其中?

为一个字母,n为一个数字

"?

p:

取出寄存器?

中的内容并将其放到光标位置处。

这里?

可以是一个字母,也可以是一个数字

ndd:

将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。

5insertmode

5.1插入文本类命令(从normalmode转入insertmode)

i:

在光标前

I:

在当前行首

a:

光标后

A:

在当前行尾

o:

在当前行之下新开一行

O:

在当前行之上新开一行

r:

替换当前字符

R:

替换当前字符及其后的字符,直至按ESC键

s:

从当前光标位置处开始,以输入的文本替代指定数目的字符

S:

删除指定数目的行,并以所输入文本代替之

ncw或nCW:

修改指定数目的字

nCC:

修改指定数目的行

6命令详解

6.1进入vi

vitest

6.2离开vi

:

q!

离开vi,并放弃刚在缓冲区内编辑的内容。

:

wq将缓冲区内的资料写入磁盘中,并离开vi。

:

ZZ同wq

同wq

:

w将缓冲区内的资料写入磁盘中,但并不离开vi。

:

q离开vi,若文件被修改过,则会被要求确认是否放弃修改的内容,此指令可与:

w配合使用。

6.3输入模式:

a(append)游标之后加入资料。

A该行之末加入资料

i(insert)游标之前加入资料

I该行之首加入资料

o(open)新增一行与该行之下供输入资料

O新增一行与该行之上供输入资料

6.4指令模式:

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)游标所在字元

yyyank整行,使游标所在该行复制到记忆体缓冲区

显示该行之行号、档案名称、档案中最末之行号、游标所在行号占

总行号之百分比

$由游标所在位置至该行的最后一个字元。

)由游标所在位置至下一个句子的第一个字元。

(由游标所在位置至该句子的第一个字元。

{由游标所在位置至该段落的最后一个字元。

}由游标所在位置至该段落的第一个字元

yank和delete可将指定的资料复制到记忆体缓冲区,而藉有put指令可将缓冲区内的资料复制到荧幕上

例如:

搬移一行:

在该行执行dd

游标移至目的地

执行p

复制一行:

在该行执行yy

游标移至目的地

执行p

视窗移动:

视窗往下卷一页

视窗往上卷一页

视窗往下卷半页

视窗往上卷半页

视窗往下卷一行

视窗往上卷一行

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1