Vi常用基本命令.docx
- 文档编号:12729062
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:30
- 大小:29.77KB
Vi常用基本命令.docx
《Vi常用基本命令.docx》由会员分享,可在线阅读,更多相关《Vi常用基本命令.docx(30页珍藏版)》请在冰豆网上搜索。
Vi常用基本命令
进入vi的命令1
移动光标类命令1
屏幕翻滚类命令2
编辑插入文本类命令2
删除命令4
搜索及替换命令4
选项设置5
组合命令6
最后行方式命令9
寄存器操作10
进入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:
(注意是数字零)光标移至当前行首
$:
光标移至当前行尾
^光标移到行首
f光标移到当前光标位置后面的第一个指定的字符下
F光标移到当前光标位置前面的第一个指定的字符下
t光标移到当前光标位置后面的第一个指定的字符前
T光标移到当前光标位置前面的第一个指定的字符前
%光标移动到与当前括号匹配的括号处
:
n光标移动到指定行
按数字:
0:
移到文章的开头。
按G:
移动到文章的最后。
按w:
光标跳到下个字的开头
按e:
光标跳到下个字的字尾
按b:
光标回到上个字的开头
按:
#l:
光标移到该行的第#个位置,如:
5l,56l。
跳至指定的行
Ctrl+g列出光标所在行的行号。
#G:
例如,15G,表示移动光标至文章的第15行行首
14.光标控制
k:
上移nk上移n行
j:
下移nj下移n行
将光标移到第n行,按下mk
将光标移到第m行,按下"ay'k
即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等
屏幕翻滚类命令
Ctrl+u:
向文件首翻半屏
Ctrl+d:
向文件尾翻半屏
Ctrl+f:
向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:
将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
zz将当前行置于屏幕中央
zt将当前行置于屏幕顶端
zb将当前行置于屏幕底端
编辑插入文本类命令
i:
在光标前
I:
在当前行首
a:
光标后
A:
在当前行尾
o:
在当前行之下新开一行
O:
在当前行之上新开一行
r:
替换当前字符
R:
替换当前字符及其后的字符,直至按ESC键
s:
从当前光标位置处开始,以输入的文本替代指定数目的字符
S:
删除指定数目的行,并以所输入文本代替之
ncw或nCW:
修改指定数目的字
nCC:
修改指定数目的行
J删除换行符
u取消上次操作
ctr-R重做
c修改指定的内容,和d相似
p将删除缓冲区中的内容插入光标当前的位置
y复制
viabc
:
n跳至下一个文件,:
e#回到刚才编辑的文件。
比如当前编辑文件为a,:
n跳至b,再:
n跳至c,:
e#回到b,想回到a的话用:
ea
打开一个,vi文件名
然后在vi的命令输入状态下输入
:
sp另外一个文件的路径及文件名
如此就可以在一个窗口打开3个文件了。
可以使用ctrl+两次按w
在3个文件中切换
:
edit编辑一个新的文件
:
previous打开文件列表中的前一个文件
:
next打开文件列表中的后一个文件
:
args指定一个文件列表
:
saveas给文件改名
:
file给正在编辑的文件改名,但不保存
:
split将窗口分成上下两个窗口
:
vsplit将窗口分成左右两个窗口
:
split文件为制定的文件打开新窗口
:
new打开新窗口,以及一个无名的缓冲区
:
close关闭窗口
ctr-ww切换窗口
ctr-w[hjkl]切换到窗口
ctr-w[HJKL]移动窗口
:
only只保存当前窗口,其他窗口关闭
ctw-w+增加当前窗口高度
ctw-w-减小当前窗口高度
:
qall所有的窗口都退出
:
wall所有的窗口内容都写入文件
取消上一命令(Undo)
重复命令(Redo)
重复命令只能在命令模式下工作,在该模式下按“.”键既可。
执行一个重复命令时,其结果是依赖于光标当前位置的。
取消上一命令(Undo)
重复命令(Redo)
重复命令只能在命令模式下工作,在该模式下按“.”键既可。
执行一个重复命令时,其结果是依赖于光标当前位置的。
fx往右移动到x字元上
Fx往左移动到x字元上
tx往右移动到x字元前
Tx往左移动到x字元前
;配合f&t使用,重复一次
配合f&t使用,反方向重复一次
/string往右移动到有string的地方
?
string往左移动到有string的地方
n配合/&?
使用,重复一次
N配合/&?
使用,反方向重复一次
d删除(delete)
y复制(yank)
p放置(put)
c修改(change)
x删除光标下的字符("dl"的缩写)
X删除光标前的字符("dh"的缩写)
D从当前位置删除到行尾("d$"的缩写)
dw从当前位置删除到下一个单词开头
db从当前位置删除到前一个单词的开头
diw删除光标上的单词(不包括空白字符)
daw删除光标上的单词(包括空白字符)
dG删除到文末
dgg删除到文首
如果你用"c"代替"d",这会变成修改命令;而改用"y",则变成拷贝命令
「cw」:
更改光标所在处的字到字尾处
「c#w」:
例如,「c3w」表示更改3个字
复制
「yw」:
将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:
复制#个字到缓冲区
「yy」:
复制光标所在行到缓冲区。
「#yy」:
例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」:
将缓冲区内的字符贴到光标所在位置。
注意:
所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
daB删除{}及其内的内容(在非v可视模式下)
diB删除{}中的内容
ab选择()中的内容
ib选择()中的内容(不含())
aB选择{}中的内容
iB选择{}中的内容(不含{})
·变量定位
gd转到光标下局部变量的定义处
Gd转到光标下全局变量的定义处
:
rfilename将文件filename插入在当前行之下
复制与剪切
xp交换前后两个字符的位置
ddp上下两行的位置交换
:
g/fred/t$拷贝行,从fred到文件末尾(EOF)
删除命令
ndw或ndW:
删除光标处开始及其后的n-1个字
do:
删至行首
d$:
删至行尾
ndd:
删除当前行及其后n-1行
x或X:
删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:
删除输入方式下所输入的文本
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替换
/向后搜索
?
向前搜索
``跳转到前一个位置
`a跳转到标记为a的位置
ma将光标的当前位置标记为a
`[跳转到最后一次修改的起始位置
`]跳转到最后一次修改的结束位置
`"跳转到上次编辑该文件时光标最后停留的位置
:
s替换
:
substitute替换
:
%s/a/a/c对所有行替换
:
m,ns/a/a/c对从m到n行替换
rc用c替换光标所指向的当前字符
nrc用c替换光标所指向的前n个字符
5rc用c替换光标所指向的前5个字符
x删除光标所指向的当前字符
nx删除光标所指向的前n个字符
3x删除光标所指向的前3个字符
dw删除光标右侧的字
ndw删除光标右侧的n个字
3dw删除光标右侧的3个字
db删除光标左侧的字
ndb删除光标左侧的n个字
5db删除光标左侧的5个字
dd删除光标所在行,并去除空隙
ndd删除n行内容,并去除空隙
3dd删除3行内容,并去除空隙
从正文中删除的内容(如字符、字或行)并没有真正丢失,而是被剪切并复制到了一个
内存缓冲区中。
用户可
将其粘贴到正文中的指定位置。
完成这一操作的命令是:
p小写字母p,将缓冲区的内容粘贴到光标的后面
P大写字母P,将缓冲区的内容粘贴到光标的前面
yy复制当前行到内存缓冲区
nyy复制n行内容到内存缓冲区
5yy复制5行内容到内存缓冲区
/str1正向搜索字符串str1
n继续搜索,找出str1字符串下次出现的位置
?
str2反向搜索字符串str2
给出一个字符串,可以通过搜索该字符串到达指定行。
如果希望进行正向搜索,将待搜
索的字符串置于两个“
/”之间;如果希望反向搜索,则将字符串放在两个“?
”之间。
例如:
:
/str/正向搜索,将光标移到下一个包含字符串str的行
:
?
str?
反向搜索,将光标移到上一个包含字符串str的行
:
/str/wfile正向搜索,并将第一个包含字符串str的行写入file
文件
:
/str1/,/str2/wfile正向搜索,并将包含字符串str1的行至包含字符串s
tr2的行写
正文替换
利用:
s命令可以实现字符串的替换。
具体的用法包括:
:
s/str1/str2/用字符串str2替换行中首次出现的字符串str1
:
s/str1/str2/g用字符串str2替换行中所有出现的字符串str1
:
.,$s/str1/str2/g用字符串str2替换正文当前行到末尾所有出现的字符串str1
:
1,$s/str1/str2/g用字符串str2替换正文中所有出现的字符串str1
:
g/str1/s//str2/g功能同上
从上述替换命令可以看到:
g放在命令末尾,表示对搜索字符串的每次出现进行替换;
不加g,表示只对搜索
字符串的首次出现进行替换;g放在命令开头,表示对正文中所有包含搜索字符串的行
进行替换操作。
:
s/p1/p2/g:
将当前行中所有p1均用p2替代
:
n1,n2s/p1/p2/g:
将第n1至n2行中所有p1均用p2替代
:
%s/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串
字串搜寻与取代
s(substitute)指令可搜寻某行列范围。
g(global)指令则可搜寻整个编辑缓冲区的资料。
s指令以第一个满足该条件的字串为其取代的对象,若该行有数个满足该条
件的字串,也仅能取代第一个,若想取代所有的字串则需加上g参数。
7)查找替换
/
/
:
g/str/s/str1/str2/g
第一个g表示对每一个包括s1的行都进行替换,
第二个g表示对每一行的所有进行替换
包括str的行所有的str1都用str2替换
:
%s/f$/for$/g将每一行尾部的“f”(f键和空格键)替换为for
:
%s/^/mv/g在每一行的头部添加“mv”(mv键和空格键)
:
s/fred/
:
g/
#替换一个visual区域
#选择一个区域,然后输入:
s/Emacs/Vim/等等,vim会自动进入:
模式
:
'<,'>s/Emacs/Vim/g前面的'<,'>是vim自动添加的
#在多个文档中搜索
:
bufdo/searchstr
:
argdo/searchstr
全局替换
语法为:
[addr]s/源字符串/目的字符串/[option]
全局替换命令为:
:
%s/源字符串/目的字符串/g
[addr]表示检索范围,省略时表示当前行。
如:
“1,20”:
表示从第1行到20行;
“%”:
表示整个文件,同“1,$”;
“.,$”:
从当前行到文件尾;
s:
表示替换操作
[option]:
表示操作类型
如:
g表示全局替换;
c表示进行确认
p表示替代结果逐行显示(Ctrl+L恢复屏幕);
省略option时仅对每行第一个匹配串进行替换;
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
选项设置
all:
列出所有选项设置情况
term:
设置终端类型
ignorance:
在搜索中忽略大小写
list:
显示制表位(Ctrl+I)和行尾标志($)
number:
显示行号
report:
显示由面向行的命令修改过的数目
terse:
显示简短的警告信息
warn:
在转到别的文件时若没保存当前文件则显示NOwrite信息
nomagic:
允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:
禁止vi在搜索到达文件两端时,又从另一端开始
mesg:
允许vi显示其他用户用write写到自己终端上的信息
状态命令
命令显示在vi状态行上的vi状态信息,包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标之前的行占整个文件的百分比。
autoindent设置该选项,则正文自动缩进
ignorecase设置该选项,则忽略规则表达式中大小写字母的区别
number设置该选项,则显示正文行号
ruler设置该选项,则在屏幕底部显示光标所在行、列的位置
tabstop设置按Tab键跳过的空格数。
例如:
settabstop=n,n默认值为8
mk将选项保存在当前目录的.exrc文件中
环境的设定
==========
:
setnu设定资料的行号。
:
setnonu取消行号设定。
:
setai自动内缩。
:
setnoai取消自动内缩。
17.vi环境选项Solarisksh
noautoindentnomodelinesnoshowmode
autoprintnonumbernoslowopen
noautowritenonovicetabstop=8
nobeautifynooptimizetaglength=0
directory=/var/tmpparagraphs=IPLPPPQPPLIpplpipnpbtags=tags/usr/lib/tags
noedcompatibleprompttagstack
noerrorbellsnoreadonlyterm=vt100
noexrcredrawnoterse
flashremaptimeout
hardtabs=8report=5ttytype=vt100
noignorecasescroll=11warn
nolispsections=NHSHHHUuhsh+cwindow=23
nolistshell=/bin/kshwrapscan
magicshiftwidth=8wrapmargin=0
mesgnoshowmatchnowriteany
ForC-Shell:
setenvEXINIT"setnu"
ForBourneorKornShell:
EXINIT="setnu";exportEXINIT
ForKornShellOnly(alternatemethod):
typeset-xEXINIT="setnu"
在.profile里设置vi的环境选项,以上均测试过
18.标记文本
mchar 用字母char标记当前光标的位置
`char 移至char所标记处
'char 移至char标记所在行的开头处
" 移至当前行上一次所在位置(在光标移动之后)――一个双引号
'' 移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号
19.
同时vi多个文件时,CTRL-SHIFT-6回到上一个文件,在本次vi的文件和上次vi的文件之间切换。
但是我发现一个BUG:
在用CTRL-SHIFT-6切换到上一个文件后,用:
args查看多文件vi状态时,
屏幕底部仍然显示目前vi的是刚才的文件。
(在HP-UX,Solaris,AIX上通过)
也可以使用:
:
e#
进行切换
组合命令
"dw"命令删除一个单词。
你可能认出来了,"w"是词移动命令。
实际上,"d"命
令后面可以跟任何"动作"(motion)命令,它会删除从当前位置到光标移动到的目标
位置的的全部内容。
例如"4w"命令能够向后移动四个单词。
所以"d4w"命令删除4个单词。
如果你用"e"命令作为动作,这时Vim认为你是想删掉整个单词(包括最后一个字符)
"$"命令移动到行尾。
所以,"d$"命令从当前的位置一直删除到本行行尾。
这是一个"包含的"命令,所以,这行的最后一个字符也会被删除
另一个操作符命令是"c",表示修改,change。
它的作用方式与"d"操作符相似,只是完成后会切换到插入模式。
例如,"cw"修改一个词,更精确的说,它删除一个词,并切换到插入模式。
这里"c2wbe
c修改操作符
2w移动两个单词的距离(与操作符合起来,它删除两个单词并进入插入模式)
be插入be这个单词
"d$"删除到行尾;"c$"则修改到行尾。
这就象先用"d$"删除一行再用"a"启动插入模式并加入新的文字。
快捷键
有些"操作符-动作"命令由于经常被使用,所以被设置为单字符命令:
x表示dl(删除当前光标下的字符)
X表示dh(删除光标左边的字符)
D表示d$(删除到行尾)
C表示c$(修改到行尾)
s表示cl(修改一个字符)
S表示cc(修改一整行)
重复一个修改
"."是Vim中一个非常简单而有用的命令。
它重复最后一次的修改操作。
例如,假设你在
编辑一个HTML文件,你想删除所有的标记。
你把光标移到第一个"<"上,然后用
"df>"命令删除。
然后你就可以移到的<上面用"."命令删除它。
"."命令
执行最后一次的修改命令(在本例中,就是"df>")。
要删除下一个标记,移动到下
一个<的位置,再执行"."命令即可。
Togenerateatableofcontents
f<找第一个<--->
df>删除到>-->
f<找下一个<--------->
重复df>--->
f<找下一个<------------->
重复df>-->
"."命令重复任何除"u"(undo),CTRL-R(redo)和冒号命令外的修改。
关于粘贴的更多知识
"P"命令象"p"一样也是插入字符,但插入点在光标前面。
当你用"dd"删除一行,
"P"会把它插入到光标所在行的前一行。
而当你用"dw"删除一个单词,"P"会把它
插入到光标前面。
你可以执行这个命令多次,每次会插入相同的文本。
"p"和"P"命令接受个数前缀,被插入的文本就会被插入指定的次数。
所以"dd"后
加一个"3p"会把删除行的三个拷贝插入到文本中。
交换两个字符
经常发生这样的情况,当你输入字符的时候,你的手指比你的脑子转得快(或者相反?
)。
这样的结果是你经常把"the"敲成"teh"。
Vim让你可以很容易得修正这种错误。
只要把
光标移到"teh"的"e"上,然后执行"xp"即可。
这个工作过程是:
"x"删除一个字符,
保存到寄存器。
"p"把这个被保存的字符插入到光标的后面,也就是"h"的后面了。
tehththe
xp
由于"y"是一个操作符,所以"yw"命令就是拷贝一个单词了。
当然了,个数前缀也是
有效的。
要拷贝两个单词,就可以用"y2w"。
例如:
letsqr=LongVariable*
-------------->
y2w
letsqr=LongVariable*p
letsqr=LongVariable*LongVariable
注意:
"yw"命令包括单词后面的空白字符。
如果你不想要这个字符,改用"ye"命令。
"yy"命令拷贝一整行,就像"dd"删除一整行一样。
出乎意料地是,"D"删除到行尾而
"Y"却是拷贝一整行。
要注意这个区别!
"y$"拷贝到行尾。
使用剪贴板
"Cut"菜单项会在把文字拷进剪贴板前删除它。
"Copy","Cut"和"Paste"命令在弹出
菜单中也有(当然了,前提是有弹出式菜单)。
如果你的Vim有工具条,在工具条上
也能找到这些命令。
如果你用的不是GUI,或者你根本不喜欢用菜单,你只能用其它办法了。
你还是可以用普通
的"y"(yank)和"p"(put)命令,但在前面必须加上"*(一个双引号加一个星号)。
例如,要拷贝一行到剪贴板中:
"*yy
要粘贴回来:
"*p
这仅在支持剪贴板的Vim版本中才能工作。
文本对象
如果你在一个单词的中间而又想删掉这个单词,在你用"dw"前,你必须先移到这个单词的
开始处。
这里还有一个更简单的方法:
"daw"。
thisissomeexampletext.
daw
thisissometext.
"daw"的"d"是删除操作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Vi 常用 基本 命令