Vi常用基本命令Word文件下载.docx
《Vi常用基本命令Word文件下载.docx》由会员分享,可在线阅读,更多相关《Vi常用基本命令Word文件下载.docx(30页珍藏版)》请在冰点文库上搜索。
F光标移到当前光标位置前面的第一个指定的字符下
t光标移到当前光标位置后面的第一个指定的字符前
T光标移到当前光标位置前面的第一个指定的字符前
%光标移动到与当前括号匹配的括号处
:
n光标移动到指定行
按数字:
移到文章的开头。
按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)
重复命令只能在命令模式下工作,在该模式下按“.”键既可。
执行一个重复命令时,其结果是依赖于光标当前位置的。
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删除光标前的
删除输入方式下所输入的文本
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/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串
字串搜寻与取代
s(substitute)指令可搜寻某行列范围。
g(global)指令则可搜寻整个编辑缓冲区的资料。
s指令以第一个满足该条件的字串为其取代的对象,若该行有数个满足该条
件的字串,也仅能取代第一个,若想取代所有的字串则需加上g参数。
7)查找替换
/<
C-R>
<
C-W>
把狭义单词<
cword>
写到搜索命令行
C-A>
把广义单词<
cWORD>
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/<
c-r>
a/g替换fred成registera中的内容,呵呵
g/<
input|<
form/p显示含<
input或<
form的行
#替换一个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写到自己终端上的信息
状态命令<
Ctrl+G>
命令显示在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="
exportEXINIT
ForKornShellOnly(alternatemethod):
typeset-xEXINIT="
在.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"
是词移动命令。
实际上,"
命
令后面可以跟任何"
动作"
(motion)命令,它会删除从当前位置到光标移动到的目标
位置的的全部内容。
例如"
4w"
命令能够向后移动四个单词。
所以"
d4w"
命令删除4个单词。
e"
命令作为动作,这时Vim认为你是想删掉整个单词(包括最后一个字符)
$"
命令移动到行尾。
所以,"
命令从当前的位置一直删除到本行行尾。
这是一个"
包含的"
命令,所以,这行的最后一个字符也会被删除
另一个操作符命令是"
,表示修改,change。
它的作用方式与"
操作符相似,只是完成后会切换到插入模式。
例如,"
cw"
修改一个词,更精确的说,它删除一个词,并切换到插入模式。
这里"
c2wbe<
Esc>
包括如下操作:
c修改操作符
2w移动两个单词的距离(与操作符合起来,它删除两个单词并进入插入模式)
be插入be这个单词
切换回普通模式
删除到行尾;
c$"
则修改到行尾。
这就象先用"
删除一行再用"
a"
启动插入模式并加入新的文字。
快捷键
有些"
操作符-动作"
命令由于经常被使用,所以被设置为单字符命令:
x表示dl(删除当前光标下的字符)
X表示dh(删除光标左边的字符)
D表示d$(删除到行尾)
C表示c$(修改到行尾)
s表示cl(修改一个字符)
S表示cc(修改一整行)
重复一个修改
."
是Vim中一个非常简单而有用的命令。
它重复最后一次的修改操作。
例如,假设你在
编辑一个HTML文件,你想删除所有的<
B>
标记。
你把光标移到第一个"
上,然后用
df>
命令删除<
。
然后你就可以移到<
/B>
的<
上面用"
命令删除它。
命令
执行最后一次的修改命令(在本例中,就是"
)。
要删除下一个<
标记,移动到下
一个<
的位置,再执行"
命令即可。
To<
generate<
atableof<
contents
f<
找第一个<
--->
删除到>
-->
找下一个<
--------->
重复df>
------------->
命令重复任何除"
u"
(undo),CTRL-R(redo)和冒号命令外的修改。
关于粘贴的更多知识
P"
命令象"
p"
一样也是插入字符,但插入点在光标前面。
当你用"
dd"
删除一行,
会把它插入到光标所在行的前一行。
而当你用"
删除一个单词,"
会把它
插入到光标前面。
你可以执行这个命令多次,每次会插入相同的文本。
和"
命令接受个数前缀,被插入的文本就会被插入指定的次数。
后
加一个"
3p"
会把删除行的三个拷贝插入到文本中。
交换两个字符
经常发生这样的情况,当你输入字符的时候,你的手指比你的脑子转得快(或者相反?
这样的结果是你经常把"
the"
敲成"
teh"
Vim让你可以很容易得修正这种错误。
只要把
光标移到"
的"
上,然后执行"
xp"
即可。
这个工作过程是:
x"
删除一个字符,
保存到寄存器。
把这个被保存的字符插入到光标的后面,也就是"
h"
的后面了。
tehththe
xp
由于"
是一个操作符,所以"
yw"
命令就是拷贝一个单词了。
当然了,个数前缀也是
有效的。
要拷贝两个单词,就可以用"
y2w"
letsqr=LongVariable*
-------------->
y2w
letsqr=LongVariable*p
letsqr=LongVariable*LongVariable
命令包括单词后面的空白字符。
如果你不想要这个字符,改用"
ye"
命令。
yy"
命令拷贝一整行,就像"
删除一整行一样。
出乎意料地是,"
D"
删除到行尾而
Y"
却是拷贝一整行。
要注意这个区别!
y$"
拷贝到行尾。
使用剪贴板
Cut"
菜单项会在把文字拷进剪贴板前删除它。
Copy"
,"
Paste"
命令在弹出
菜单中也有(当然了,前提是有弹出式菜单)。
如果你的Vim有工具条,在工具条上
也能找到这些命令。
如果你用的不是GUI,或者你根本不喜欢用菜单,你只能用其它办法了。
你还是可以用普通
的"
(yank)和"
(put)命令,但在前面必须加上"
*(一个双引号加一个星号)。
例如,要拷贝一行到剪贴板中:
*yy
要粘贴回来:
*p
这仅在支持剪贴板的Vim版本中才能工作。
文本对象
如果你在一个单词的中间而又想删掉这个单词,在你用"
前,你必须先移到这个单词的
开始处。
这里还有一个更简单的方法:
daw"
thisissomeexampletext.
daw
thisissometext.
是删除操作