VI的使用.docx

上传人:b****3 文档编号:26861285 上传时间:2023-06-23 格式:DOCX 页数:14 大小:22.92KB
下载 相关 举报
VI的使用.docx_第1页
第1页 / 共14页
VI的使用.docx_第2页
第2页 / 共14页
VI的使用.docx_第3页
第3页 / 共14页
VI的使用.docx_第4页
第4页 / 共14页
VI的使用.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

VI的使用.docx

《VI的使用.docx》由会员分享,可在线阅读,更多相关《VI的使用.docx(14页珍藏版)》请在冰豆网上搜索。

VI的使用.docx

VI的使用

文件操作

 :

q退出!

(更确切的说应该是关闭当前文件)

 :

w文件名存盘。

如果还是保存为当前文件,不必写文件名

 :

wq存盘退出

光标的移动

本节所述皆是在 common-mode(c-mode,在vim又名normal-mode)下的移动,原始的vi只能在c-mode移动光标,在insert-mode只做文字的输入,而不做光标的移动。

当然vim及elvis的方向键是不论在那一种mode皆可移动自如。

 

基本移动

 

h 左,或Backspace或方向键

j 下,或Enter或+(要Shift键),或方向键

k 上,或方向键或-(不必Shift键)

l 右,或Space或方向键

∙使用 hjkl键的移动是为了使手不必离开打字区(键盘中央的部位),以加快打字的速度,如果各位不习惯,那就使用方向键吧!

∙Backspace 及Space的移动方式是到了行首或行尾时会折行,但方向键或 hl键的移动则在行首或行尾时您继续按也不会折行。

转折换行的功能是vim的扩充功能,elvis无此功能。

∙jk 及使用方向键的上下移动光标会尽量保持在同一字段。

使用Enter,+,-的上下移动,光标会移至上(下)一行的第一个非空格符处。

∙好像有点复杂,各位就暂时使用方向键来移动就简单明白了!

等您爱上了vim后再来讲究吧。

 

Ctrl-f   即PageDown翻页。

Crtl-b   即PageUp翻页。

 

高级移动

 

0 是数目字0而不是英文字母o。

或是Hmoe键,移至行首,

  (含空格符)。

^ 移至第一个非空格符,注意,要Shift键。

$ 移至行尾,或End键。

要Shift键。

∙以上两个按键是源自规则表示式(regularexpression),在regexp中^是匹配行首,$是匹配行尾。

 

G 移至档尾(最后一行的第一个非空格符处)

gg移至档首(第一行之第一个非空格符处)

∙gg 是vim的扩充功能,在elvis或原始vi中可用1G来移至文件首(是数字1不是英文字l)。

∙G 之原意是goto,指移至指定数目行之行首,如不指定数目,则预设是最后一行。

 

w 移至次一个字(word)前缀。

当然是指英文单字。

W 同上,但会忽略一些标点符号。

e 移至前一个字字尾。

E 同上,但会忽略一些标点符号。

b 移至前一个字前缀。

B 同上,但会忽略一些标点符号。

H 移至屏幕顶第一个非空格符。

M 移至屏幕中间第一个非空格符。

L 移至屏幕底第一个非空格符。

∙这和 PageDown,PageUp不一样,内文内容并未动,只是光标在动而已。

 

n|移至第n个字符(栏)处。

注意,要用Shift键。

n是从头起

  算的。

:

n移至第n行行首。

或nG。

 

特殊移动

 

) 移至下一个句子(sentence)首。

( 移至上一个句子(sentence)首。

} 移至下一个段落(paragraph)首。

{ 移至上一个段落(paragraph)首。

∙sentence 是以.!

?

为区格。

∙paragraph 是以空白行为区格。

 

% 这是匹配{},[],()用的,例如您的光标现在在{上

  只要按%,就会跑到相匹配的}上。

写程序时满好用的。

 

另还有一些 vim 的特殊按键,但这得留待最后才来讲述,否则各位恐怕会头昏眼花了。

基本编辑指令

 

这个单元就开始进入主题了。

下编辑指令都是在 commond-mode(c-mode),就是您一进入vim时的模式,只能下指令,不能键入文字。

如果印象模糊,请瞄一下第一个单元的内容。

这个单元说的是基本的指令,有些比较特殊的编辑指令,因为太有个性了,所以会独立成一个单元来说明。

 

进入i-mode

 

i 在光标所在字符前开始输入文字(insert)。

a 在光标所在字符后开始输入文字(append)。

o 在光标所在行下开一新行来输入文字(open)。

I 在行首开始输入文字。

∙此之行首指第一个非空格符处,要从真正的第一个字符处开始输人文字,可使用 0i或gI(vim)。

 

A 在行尾开始输入文字。

∙这个好用,您不必管光标在此行的什么地方,只要按A就会在行尾等着您输入文字。

 

O 在光标所在行上开一新行来输入文字。

J 将下一行整行接至本行(Joint)。

∙并无相对的split功能,可在i-mode下按Enter来达成,当然如果您熟macro的话,可自行定义。

∙使用J时,预设会消去本行的EOL,且上下行接缝间会留下一个空格符,这符合英文习惯,却对中文会造成困扰,欲不留空格符,可使用gJ(大写J)指令,但这是vim的扩充功能,elvis不适用。

∙请您随便找一个档案来试看看,光看文字说明太抽象了。

 

删除

 

x 删除光标所在处之字符。

在vim及elvis亦可用Del键。

X 删除光标前之字符。

不可使用Backspace键。

∙vim 可以正确使用以上两个指令于中文,会删去一个中文字。

elvis则不行,一个中文字要删两次,即使用 xx。

 

dd删除一整行(deleteline)。

dw删除一个字(deleteword)。

不能适用于中文。

dG删至档尾。

d1G删至档首。

或dgg(只能用于vim)。

D 删至行尾,或d$(含光标所在处字符)。

d0删至行首,或d^(不含光标所在处字符)。

∙请回忆一下$及^所代表的意义,您就可以理解d$及d^的动作,这就是vi(m)可爱之处。

 

取代和还原

 

r 取代光标所在处之字符。

vi(m)很有个性的,您在c-mode按

  了r她就会停在那里等主人键入所要替代的字符,希望您这

  个当主人的,不要傻呼呼的也楞在那里,赶快键入您的新字符

  吧!

:

-)

∙vim 中可用于中文字,也就是可以替换一个中文字,elvis则不行。

当然您的vim是要设在taiwan的才行。

怎么样!

有没有看过如此有个性的取代方式?

ㄚ!

r就是replace啦!

 

R 取代字符至按Esc为止。

cc取代整行内容。

或大写S亦可。

cw替换一个英文字(word),中文不适用。

(change)

~ 游标所在处之大小写互换。

当然不能用于中文。

别忘了Shift!

C 取代至行尾,即光标所在处以后的字都会被替换。

或c$。

c0取代至行首,或c^。

s 替换一个字符为您所输入的字符串。

和R不同,R是覆盖式的取

  代,s则是插入式的取代,您可亲自实验看看。

ㄟ!

是小写的

  s。

u 这个太重要了,就是undo,传统的vi仅支持一次undo,vim

  及elvis就不只了,vim是没有限制的。

U 在光标没离开本行之前,回复所有编辑动作。

Crtl+r这个也是很重要,就是redo键。

 

加上数字

喔!

骚到 vi(m) 的痒处了,这是vi(m)一个非常骚包的功能,只此一家别无分号(当然同源的ed,sed等不在此限)。

就是您可以在大部份的指令前加上数目字,代表要处理几次的意思。

以下用实例来说明比较清楚。

 

5dd 删除游标所在处(含)起算以下五行内容。

妙吧!

3r  按了3r后,您键入一个英文字,则三个字符皆会被您所键

      入的英文取代。

很抱歉,这不能用于中文。

5J  将五行合并成一行。

3x  删除三个字符。

抱歉,不能用于中文。

5iA然后按Ecs,插入五个A。

中文也可以!

2isystemEsc 插入systemsystem。

中文也可以!

5G光标移至第五行,是从档首开始起算。

5l移至右第五个字符处,当然j是可以用方向键取代的。

  所有移动指令(参考第二单元)都可以加上数目字来控制,中

  文也通喔!

elvis当然是不能用于中文。

其它的指令和数目字结合,就留待各位去发掘吧!

最重要的是请您亲自操作看看,使用vi(m)常常要动动脑筋,会有更妙的操作方式。

 

重排

 

>> 整行向右移一个shiftwidth(预设是8个字符,可重设)。

<< 整行向左移一个shiftwidth(预设是8个字符,可重设)。

∙:

setshiftwidth?

 可得知目前的设定值。

:

setshiftwidth=4可马上重设为4个字符。

shiftwidth可简写成sw。

ㄟ,别忘了Shift键!

 

:

ce(nter) 本行文字置中。

注意是冒号命令!

:

ri(ght)  本行文字靠右。

:

le(ft)   本行文字靠左。

∙所谓置中、靠左右,是参考textwidth(tw)的设定。

如果tw没有设定,预设是 80,就是以 80个字符为总宽度为标准来置放。

当然您也可以如sw一样马上重设。

 

gqip 整段重排。

中文会出槌!

:

-(

gqq  本行重排。

重排的依据也是textwidth。

这里的重排是指您键入文字时没有按Enter键,就一直在keyin,这样会形成一个很长的一行(虽然屏幕上会替您做假性折行),重排后,则会在每一行最后加入EOL。

gq重排功能是vim才有的功能。

复制(yank)

 

yank 是什么意思?

有疑问的请查一下字典吧!

就好像是中医治疗中的「拔罐」的意思啦(是不是叫「拔罐」?

知道的朋友指正一下吧)!

反正在vi(m)中,她就是复制copy的意思。

这在vi(m)的思考逻辑里,就是「拔」yank起来,「放」put上去。

其实复制的指令就是y一个而已,为什么要独立成一个单元来说明呢?

因为vi(m)复制、贴上的功能实在太独特了,再配合第三单元介绍的数目字,及vi(m)内部的缓冲区来使用的话,您会发现,原来vi(m)肚子里还暗藏着秘密武器。

 

 

yy 复制游标所在行整行。

或大写一个Y。

2yy或y2y 复制两行。

ㄟ,请举一反三好不好!

:

-)

y^ 复制至行首,或y0。

不含光标所在处字符。

y$ 复制至行尾。

含光标所在处字符。

yw 复制一个word。

y2w复制两个字。

yG 复制至档尾。

y1G复制至档首。

p  小写p代表贴至光标后(下)。

P  大写P代表贴至光标前(上)。

∙整行的复制,按 p或 P时是插入式的贴在下(上)一行。

非整行的复制则是贴在游标所在处之后(前)。

 

"ayy 将本行文字复制到a缓冲区

∙a 可为26个英文字母中的一个,如果是小写的话,原先的内容会被清掉,如果是大写的话是append的作用,会把内容附加到原先内容之后。

∙" 是Enter键隔壁的那一个同上符号(dittomarks)。

 

"ap 将a缓冲区的内容贴上。

∙缓冲区的术语在vim称为registers,vim扩充了相当多的功能,有兴趣深入的朋友请:

hregisters。

您用d、c、s、x、y等指令改变或删除的内容都是放在registers中的。

例如:

您用dd删除的一行,也是可以使用 p来贴上的。

只要是在缓冲区的内容都可以使用 p来贴上,不是一定要y起来的内容才能用 p。

因此您认为 p是 paste也可以,认为是 put可能较正确。

 

5"ayy 复制五行内容至a缓冲区。

5"Ayy 再复制五行附在a内容之后,现在a中有十行内容了!

∙ㄟ!

不要我一直用a您就认为只有a可以用喔。

26个英文字母都可以的,交叉运用下,您会发觉vi(m)肚量不小。

∙问题来了!

忘记谁是谁的时候怎么办?

:

reg(冒号命令)就会列出所有registers的代号及内容。

您现在就试着按看看。

咦!

怎么还有数目字、特殊符号的缓冲区,原来您刚刚删除(复制)的内容就预设放在"这个缓冲区,然后依序是0,1,2,...9。

也就是说您按p不加什么的话,是取出"缓冲区的内容的。

%指的是目前编辑的档案,#指的是前一次编辑的档案。

还有其它的呀!

因为没什么重要,就请:

hregisters 吧!

registers有个"s"结尾,不要搞错了,而且Tab的补全键vim也支持的,也就是说您键入:

hregi再按Tab键,vim就会帮您补全,按了Tab后发现不是您要的,那就继续按,总会出现您要的。

:

-)

∙Tab 补全的功能,elvis也有,但叫出registers列表的命令则没有,您得自行记忆在您的脑袋瓜子里。

而且elvis的补全能力并没vim强。

 

 

 . 这是什么?

ㄚ,是英文句点啦!

没错,就是英文句点。

什么意

    思?

重复前次的编辑动作。

这个指令太高明了,只要是编辑动

    作(移动光标不算,冒号命令也不算)都可以按英文句点来重

    复,要重复几次都可以。

例如:

您按了yy,然后按 p就会复制、贴上一整行,如果要重复这个动作的话,就可以按.,也可以把光标移到其它地方后再按。

其它dd,dw,r,cw等编辑指令都可以这样来重复。

如果您要重复做某些编辑动作时,千万千万一定要想到有这么一个英文句点重复指令。

ㄚ,拜托啦!

您一定要常用这个指令。

 

1. 那mouse中键的剪贴功能还有吗?

当然还有,不管在console或 Xterminal中都照用不误。

当然在windows下的话就不能用了,可以用Shift-Insert来代替。

Ctrl-v在vim中另有作用,在windows下就不必去麻烦它了。

2. ㄟ,我从netscape用mousecopy东东过来的时候,常常都搞得天下大乱耶!

要设成:

setpaste,预设是map至F9键的,您要copy之前先按一下F9,copy完后再按一次F9来回复。

这是vim的扩充功能,elvis没有。

那在elvis怎么办?

只好:

setnoai了。

在GUI的版本应不会有这种情形。

∙  set的功能先不必去理它,往后会有一个单元专门讨论。

查找、替换

 

搜寻、替换的功能几乎是每个编辑器必备的功能,那在vi(m)中有没有特殊的地方呢?

当然有,您忘了,vi(m)是个性十足的编辑器。

最特殊的地方是和规则表示式(regularexpression,简称regexp)结合在一起。

简单的说她是一种pattern的表示法,在执行动作,如寻找或替换,就会依据这个 pattern去找,所有符合 pattern的地方就会执行您所下的动作。

在这个单元里暂不讨论regexp,会另立一个单元来探讨,以免搞得头昏脑胀。

目前就暂不使用regexp,您要找什么就直接键入什么就对了。

 

查找

 

/ 在c-mode的情形下,按/就会在左下角出现一个/,然后键

  入您要寻找的字符串,按个Enter就会开始找。

?

 和/相同,只是/是向前(下)找,?

则是向后(上)找。

n 继续寻找。

N 继续寻找(反向)。

 

更方便的查找

 

* 寻找游标所在处之word(要完全符合)。

# 同上,但*是向前(下)找,#则是向后(上)找。

g*同*,但部份符合即可。

g#同#,但部份符合即可。

∙n,N 之继续寻找键仍适用。

 

替换

 

:

[range]s/pattern/string/[c,e,g,i]

 

range 指的是范围,1,7指从第一行至第七行,1,$指从第一行

      至最后一行,也就是整篇文章,也可以%代表。

∙还记得吗?

%是目前编辑的文章,#是前一次编辑的文章。

 

pattern 就是要被替换掉的字符串,可以用regexp来表示。

string  将pattern由string所取代。

c confirm,每次替换前会询问。

e 不显示error。

g globe,不询问,整行替换。

i ignore不分大小写。

∙g 大概都是要加的,否则只会替换每一行的第一个符合字符串。

可以合起来用,如cgi,表示不分大小写,整行替换,替换前要询问是否替换。

[实例] :

%s/Edwin/Edward/g

    这样整篇文章的 Edwin 就会替换成 Edward。

更进阶的寻找、替换的例子在说明 regexp 的时候还会再详述。

目前只知道最基本的用法就可以了!

其实光这样就非常好用了。

:

-)

 

书签

这又是 vi(m) 的一个秘密武器,简单的说,您可以在文章中的某处做个记号(marks),然后跑到其它地方去编辑,在呼叫这个mark时又会回到原处。

妙吧!

 

mx x代表26个小写英文字母,这样光标所在处就会被mark。

`x 回到书签原设定位置。

∙` 是backwardquote,就是Tab键上面那一个。

 

'x 回到书签设定行行首。

∙' 是forwardquote,是Enter键隔壁那一个。

 

书签扩展

 

小写字母 只作用于单一档案内。

大写字母 可作用于编辑中之各档案间。

数目字   可作用于前次编辑的十个档案。

∙数目字的用法比较特殊,'0是回到前一次编辑档案中离开前的最后位置,'1则是回到前二次编辑档案的最后位置,依此类推。

您不必使用m来标示,vim会自动记忆。

很玄吧!

其实这是viminfo的功能,您要认真追究的话,请:

hviminfo-file-marks。

viminfo关掉,就没这个功能了!

∙所谓前次指的是前次启动的vim。

 

:

marks 得知目前所有书签的列表。

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

当前位置:首页 > 医药卫生 > 基础医学

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

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