2023年8月2日发(作者:)

vi命令汇总vi命令汇总vi⽅⾯⽹上⼀搜⼀⼤堆,这个在我想不起来的时候查阅的多⼀点,我⽤的shell是zsh进⼊vi的命令vi filename :打开或新建⽂件,并将光标置于第⼀⾏⾸

vi +n filename :打开⽂件,并将光标置于第n⾏⾸

vi + filename :打开⽂件,并将光标置于最后⼀⾏⾸

vi +/pattern filename:打开⽂件,并将光标置于第⼀个与pattern匹配的串处

vi -r filename :在上次正⽤vi编辑时发⽣系统崩溃,恢复filename

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:从光标开始处向⽂件⾸搜索pattern

n:在同⼀⽅向重复上⼀次搜索命令

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:在转到别的⽂件时若没保存当前⽂件则显⽰NO write信息

nomagic:允许在搜索模式中,使⽤前⾯不带“”的特殊字符

nowrapscan:禁⽌vi在搜索到达⽂件两端时,⼜从另⼀端开始

mesg:允许vi显⽰其他⽤户⽤write写到⾃⼰终端上的信息

最后⾏⽅式命令:n1,n2 co n3:将n1⾏到n2⾏之间的内容拷贝到第n3⾏下

:n1,n2 m n3:将n1⾏到n2⾏之间的内容移⾄到第n3⾏下

:n1,n2 d :将n1⾏到n2⾏之间的内容删除

:w :保存当前⽂件

:e filename:打开⽂件filename进⾏编辑

:x:保存当前⽂件并退出

:q:退出vi

:q!:不保存⽂件并退出vi

:!command:执⾏shell命令command

:n1,n2 w!command:将⽂件中n1⾏⾄n2⾏的内容作为command的输⼊并执⾏之,若不指定n1,n2,则表⽰将整个⽂件内容作为command的输⼊

:r!command:将命令command的输出结果放到当前⾏

寄存器操作"?nyy:将当前⾏及其下n⾏的内容保存到寄存器?中,其中?为⼀个字母,n为⼀个数字

"?nyw:将当前⾏及其下n个字保存到寄存器?中,其中?为⼀个字母,n为⼀个数字

"?nyl:将当前⾏及其下n个字符保存到寄存器?中,其中?为⼀个字母,n为⼀个数字

"?p:取出寄存器?中的内容并将其放到光标位置处。这⾥?可以是⼀个字母,也可以是⼀个数字

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

VI的使⽤⼀、插⼊⽂本命令iIaAoOR⼆、移动光标命令ij或下箭头k或上箭头描述在当前字符前插⼊⽂本向下移动⼀⾏     向上移动⼀⾏     描述在当前字符前插⼊⽂本在⾏⾸插⼊⽂本在当前字符后添加⽂本在⾏末添加⽂本    在当前⾏后⾯插⼊⼀空⾏ 在当前⾏前⾯插⼊⼀空⾏ 以改写⽅式输⼊⽂本h或左箭头命令l或右箭头w     W     b     B     0     Ctrl-F  Ctrl-B  nG    G     三、替换⽂本命令$     (     )     {     }     四、删除⽂本命令r   c   cw  cnw 五、⽂本编辑命令yy yn ynw描述左移⼀个字符     描述右移⼀个字符     右移⼀个词      右移⼀个以空格分隔的词左移⼀个词      左移⼀个以空格分隔的词移到⾏⾸       向前翻页       向后翻页       到第n⾏        到最后⼀⾏      描述到⾏尾   到句⼦的开头到句⼦的末尾到段落的开头到段落的末尾描述替换⼀个字符     修改⽂本直到按下Esc健修改下⼀个词      修改接下来的n个词   将⼀⾏⽂本移到缺省缓冲区中将下⼀个词移到缺省缓冲区中将后⾯的n个词移到缺省缓冲区中如果缺省缓冲区中包含⼀⾏⽂本,则在当前⾏后⾯插⼊⼀个空⾏井将缺省缓冲区中的声容粘贴到这⼀⾏中;如果缺省缓冲区中包含多个词,把p  这些词粘贴到光标的右边.  P如果缺省缓冲区中包含⼀⾏⽂本,则正当前⾏前⾯插⼊⼀个空⾏井将缺省缓冲区中的内容粘贴到这⼀⾏中;如果缺省缓冲区中包含多个词, 把这些词粘贴到光标的左边    六、保存退出命令zz          :w filename      :W          :x          :q!         :q          描述保存并退出          写⼊⽂件           写⼊⽂件           保存(如果当前⽂件修改过)并退出不保存⽂件,直接退出     退出vi            VI常⽤技巧VI命令可以说是Unix/Linux世界⾥最常⽤的编辑⽂件的命令了,但是因为它的命令集众多,很多⼈都不习惯使⽤它,其实您只需要掌握基本命令,然后加以灵活运⽤,就会发现它的优势,并会逐渐喜欢使⽤这种⽅法。本⽂旨在介绍VI的⼀些最常⽤命令和⾼级应⽤技巧。⼀、基本命令介绍1.光标命令k、j、h、l——上、下、左、右光标移动命令。虽然您可以在Linux中使⽤键盘右边的4个光标键,但是记住这4个命令还是⾮常有⽤的。这4个键正是右⼿在键盘上放置的基本位置。nG——跳转命令。n为⾏数,该命令⽴即使光标跳到指定⾏。Ctrl+G——光标所在位置的⾏数和列数报告。w、b——使光标向前或向后跳过⼀个单词。

2.编辑命令i、a、r——在光标的前、后以及所在处插⼊字符命令(i=insert、a=append、r=replace)。cw、dw——改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。x、d$、dd——删除⼀个字符、删除光标所在处到⾏尾的所有字符以及删除整⾏的命令。

3.查找命令/string、?string——从光标所在处向后或向前查找相应的字符串的命令。

4.拷贝复制命令yy、p——拷贝⼀⾏到剪贴板或取出剪贴板中内容的命令。

⼆、常见问题及应⽤技巧1.在⼀个新⽂件中读/etc/passwd中的内容,取出⽤户名部分。vi file:r /etc/passwd 在打开的⽂件file中光标所在处读⼊/etc/passwd:%s/:.*//g 删除/etc/passwd中⽤户名后⾯的从冒号开始直到⾏尾的所有部分。

您也可以在指定的⾏号后读⼊⽂件内容,例如使⽤命令“:3r /etc/passwd”从新⽂件的第3⾏开始读⼊ /etc/passwd的所有内容。我们还可以使⽤以下⽅法删掉⽂件中所有的空⾏及以#开始的注释⾏。

cat t | grep -v ^$ | grep -v ^

2.在打开⼀个⽂件编辑后才知道登录的⽤户对该⽂件没有写的权限,不能存盘,需要将所做修改存⼊临时⽂件。

vi file

:w /tmp/1 保存所做的所有修改,也可以将其中的某⼀部分修改保存到临时⽂件,例如仅仅把第20~59⾏之间的内容存盘成⽂件/tmp/1,我们可以键⼊如下命令。12vi file

:20,59w /tmp/13.⽤VI编辑⼀个⽂件,但需要删除⼤段的内容。⾸先利⽤编辑命令“vi file”打开⽂件,然后将光标移到需要删除的⾏处按Ctrl+G显⽰⾏号,再到结尾处再按Ctrl+G,显⽰⽂件结尾的⾏号。:23,1045d 假定2次得到的⾏号为23和1045,则把这期间的内容全删除,也可以在要删除的开始⾏和结束⾏中⽤ma、mb命令标记,然后利⽤“:a,bd”命令删除。4.在整个⽂件的各⾏或某⼏⾏的⾏⾸或⾏尾加⼀些字符串。123456vi file

:3,$s/^/some string / 在⽂件的第⼀⾏⾄最后⼀⾏的⾏⾸插⼊“some string”。

:%s/$/some string/g 在整个⽂件每⼀⾏的⾏尾添加“some string”。

:%s/string1/string2/g 在整个⽂件中替换“string1”成“string2”。

:3,7s/string1/string2/ 仅替换⽂件中的第3⾏到第7⾏中的“string1”成“string2”。

注意: 其中s为substitute,%表⽰所有⾏,g表⽰global。5.同时编辑2个⽂件,拷贝⼀个⽂件中的⽂本并粘贴到另⼀个⽂件中。12345vi file1 file2

yy 在⽂件1的光标处拷贝所在⾏

:n 切换到⽂件2 (n=next)

p 在⽂件2的光标所在处粘贴所拷贝的⾏

:n 切换回⽂件16.替换⽂件中的路径。使⽤命令“:%s#/usr/bin#/bin#g”可以把⽂件中所有路径/usr/bin换成/bin。也可以使⽤命令“:%s//usr/bin//bin/g”实现,其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。

2023年8月2日发(作者:)

vi命令汇总vi命令汇总vi⽅⾯⽹上⼀搜⼀⼤堆,这个在我想不起来的时候查阅的多⼀点,我⽤的shell是zsh进⼊vi的命令vi filename :打开或新建⽂件,并将光标置于第⼀⾏⾸

vi +n filename :打开⽂件,并将光标置于第n⾏⾸

vi + filename :打开⽂件,并将光标置于最后⼀⾏⾸

vi +/pattern filename:打开⽂件,并将光标置于第⼀个与pattern匹配的串处

vi -r filename :在上次正⽤vi编辑时发⽣系统崩溃,恢复filename

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:从光标开始处向⽂件⾸搜索pattern

n:在同⼀⽅向重复上⼀次搜索命令

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:在转到别的⽂件时若没保存当前⽂件则显⽰NO write信息

nomagic:允许在搜索模式中,使⽤前⾯不带“”的特殊字符

nowrapscan:禁⽌vi在搜索到达⽂件两端时,⼜从另⼀端开始

mesg:允许vi显⽰其他⽤户⽤write写到⾃⼰终端上的信息

最后⾏⽅式命令:n1,n2 co n3:将n1⾏到n2⾏之间的内容拷贝到第n3⾏下

:n1,n2 m n3:将n1⾏到n2⾏之间的内容移⾄到第n3⾏下

:n1,n2 d :将n1⾏到n2⾏之间的内容删除

:w :保存当前⽂件

:e filename:打开⽂件filename进⾏编辑

:x:保存当前⽂件并退出

:q:退出vi

:q!:不保存⽂件并退出vi

:!command:执⾏shell命令command

:n1,n2 w!command:将⽂件中n1⾏⾄n2⾏的内容作为command的输⼊并执⾏之,若不指定n1,n2,则表⽰将整个⽂件内容作为command的输⼊

:r!command:将命令command的输出结果放到当前⾏

寄存器操作"?nyy:将当前⾏及其下n⾏的内容保存到寄存器?中,其中?为⼀个字母,n为⼀个数字

"?nyw:将当前⾏及其下n个字保存到寄存器?中,其中?为⼀个字母,n为⼀个数字

"?nyl:将当前⾏及其下n个字符保存到寄存器?中,其中?为⼀个字母,n为⼀个数字

"?p:取出寄存器?中的内容并将其放到光标位置处。这⾥?可以是⼀个字母,也可以是⼀个数字

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

VI的使⽤⼀、插⼊⽂本命令iIaAoOR⼆、移动光标命令ij或下箭头k或上箭头描述在当前字符前插⼊⽂本向下移动⼀⾏     向上移动⼀⾏     描述在当前字符前插⼊⽂本在⾏⾸插⼊⽂本在当前字符后添加⽂本在⾏末添加⽂本    在当前⾏后⾯插⼊⼀空⾏ 在当前⾏前⾯插⼊⼀空⾏ 以改写⽅式输⼊⽂本h或左箭头命令l或右箭头w     W     b     B     0     Ctrl-F  Ctrl-B  nG    G     三、替换⽂本命令$     (     )     {     }     四、删除⽂本命令r   c   cw  cnw 五、⽂本编辑命令yy yn ynw描述左移⼀个字符     描述右移⼀个字符     右移⼀个词      右移⼀个以空格分隔的词左移⼀个词      左移⼀个以空格分隔的词移到⾏⾸       向前翻页       向后翻页       到第n⾏        到最后⼀⾏      描述到⾏尾   到句⼦的开头到句⼦的末尾到段落的开头到段落的末尾描述替换⼀个字符     修改⽂本直到按下Esc健修改下⼀个词      修改接下来的n个词   将⼀⾏⽂本移到缺省缓冲区中将下⼀个词移到缺省缓冲区中将后⾯的n个词移到缺省缓冲区中如果缺省缓冲区中包含⼀⾏⽂本,则在当前⾏后⾯插⼊⼀个空⾏井将缺省缓冲区中的声容粘贴到这⼀⾏中;如果缺省缓冲区中包含多个词,把p  这些词粘贴到光标的右边.  P如果缺省缓冲区中包含⼀⾏⽂本,则正当前⾏前⾯插⼊⼀个空⾏井将缺省缓冲区中的内容粘贴到这⼀⾏中;如果缺省缓冲区中包含多个词, 把这些词粘贴到光标的左边    六、保存退出命令zz          :w filename      :W          :x          :q!         :q          描述保存并退出          写⼊⽂件           写⼊⽂件           保存(如果当前⽂件修改过)并退出不保存⽂件,直接退出     退出vi            VI常⽤技巧VI命令可以说是Unix/Linux世界⾥最常⽤的编辑⽂件的命令了,但是因为它的命令集众多,很多⼈都不习惯使⽤它,其实您只需要掌握基本命令,然后加以灵活运⽤,就会发现它的优势,并会逐渐喜欢使⽤这种⽅法。本⽂旨在介绍VI的⼀些最常⽤命令和⾼级应⽤技巧。⼀、基本命令介绍1.光标命令k、j、h、l——上、下、左、右光标移动命令。虽然您可以在Linux中使⽤键盘右边的4个光标键,但是记住这4个命令还是⾮常有⽤的。这4个键正是右⼿在键盘上放置的基本位置。nG——跳转命令。n为⾏数,该命令⽴即使光标跳到指定⾏。Ctrl+G——光标所在位置的⾏数和列数报告。w、b——使光标向前或向后跳过⼀个单词。

2.编辑命令i、a、r——在光标的前、后以及所在处插⼊字符命令(i=insert、a=append、r=replace)。cw、dw——改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。x、d$、dd——删除⼀个字符、删除光标所在处到⾏尾的所有字符以及删除整⾏的命令。

3.查找命令/string、?string——从光标所在处向后或向前查找相应的字符串的命令。

4.拷贝复制命令yy、p——拷贝⼀⾏到剪贴板或取出剪贴板中内容的命令。

⼆、常见问题及应⽤技巧1.在⼀个新⽂件中读/etc/passwd中的内容,取出⽤户名部分。vi file:r /etc/passwd 在打开的⽂件file中光标所在处读⼊/etc/passwd:%s/:.*//g 删除/etc/passwd中⽤户名后⾯的从冒号开始直到⾏尾的所有部分。

您也可以在指定的⾏号后读⼊⽂件内容,例如使⽤命令“:3r /etc/passwd”从新⽂件的第3⾏开始读⼊ /etc/passwd的所有内容。我们还可以使⽤以下⽅法删掉⽂件中所有的空⾏及以#开始的注释⾏。

cat t | grep -v ^$ | grep -v ^

2.在打开⼀个⽂件编辑后才知道登录的⽤户对该⽂件没有写的权限,不能存盘,需要将所做修改存⼊临时⽂件。

vi file

:w /tmp/1 保存所做的所有修改,也可以将其中的某⼀部分修改保存到临时⽂件,例如仅仅把第20~59⾏之间的内容存盘成⽂件/tmp/1,我们可以键⼊如下命令。12vi file

:20,59w /tmp/13.⽤VI编辑⼀个⽂件,但需要删除⼤段的内容。⾸先利⽤编辑命令“vi file”打开⽂件,然后将光标移到需要删除的⾏处按Ctrl+G显⽰⾏号,再到结尾处再按Ctrl+G,显⽰⽂件结尾的⾏号。:23,1045d 假定2次得到的⾏号为23和1045,则把这期间的内容全删除,也可以在要删除的开始⾏和结束⾏中⽤ma、mb命令标记,然后利⽤“:a,bd”命令删除。4.在整个⽂件的各⾏或某⼏⾏的⾏⾸或⾏尾加⼀些字符串。123456vi file

:3,$s/^/some string / 在⽂件的第⼀⾏⾄最后⼀⾏的⾏⾸插⼊“some string”。

:%s/$/some string/g 在整个⽂件每⼀⾏的⾏尾添加“some string”。

:%s/string1/string2/g 在整个⽂件中替换“string1”成“string2”。

:3,7s/string1/string2/ 仅替换⽂件中的第3⾏到第7⾏中的“string1”成“string2”。

注意: 其中s为substitute,%表⽰所有⾏,g表⽰global。5.同时编辑2个⽂件,拷贝⼀个⽂件中的⽂本并粘贴到另⼀个⽂件中。12345vi file1 file2

yy 在⽂件1的光标处拷贝所在⾏

:n 切换到⽂件2 (n=next)

p 在⽂件2的光标所在处粘贴所拷贝的⾏

:n 切换回⽂件16.替换⽂件中的路径。使⽤命令“:%s#/usr/bin#/bin#g”可以把⽂件中所有路径/usr/bin换成/bin。也可以使⽤命令“:%s//usr/bin//bin/g”实现,其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。