Linux——vi命令詳解

vi編輯器是所有Unix及Linux系統(tǒng)下標(biāo)準(zhǔn)的編輯器,它的強(qiáng)大不遜色于任何最新的文本編輯器,這里只是簡單地介紹一下它的用法和一小部分指令。由于對(duì)Unix及Linux系統(tǒng)的任何版本,vi編輯器是完全相同的,因此您可以在其他任何介紹vi的地方進(jìn)一步了解它亿汞。Vi也是Linux中最基本的文本編輯器,學(xué)會(huì)它后结耀,您將在Linux的世界里暢行無阻留夜。

1、vi的基本概念

基本上vi可以分為三種狀態(tài)图甜,分別是命令模式(command mode)碍粥、插入模式(Insert mode)和底行模式(last line mode),各模式的功能區(qū)分如下:

1) 命令行模式command mode)

控制屏幕光標(biāo)的移動(dòng)黑毅,字符嚼摩、字或行的刪除,移動(dòng)復(fù)制某區(qū)段及進(jìn)入Insert mode下,或者到 last line mode枕面。

2) 插入模式(Insert mode)

只有在Insert mode下愿卒,才可以做文字輸入,按「ESC」鍵可回到命令行模式潮秘。

3) 底行模式(last line mode)

將文件保存或退出vi琼开,也可以設(shè)置編輯環(huán)境,如尋找字符串枕荞、列出行號(hào)……等柜候。

不過一般我們在使用時(shí)把vi簡化成兩個(gè)模式,就是將底行模式(last line mode)也算入命令行模式command mode)躏精。

2渣刷、vi的基本操作

a) 進(jìn)入vi

在系統(tǒng)提示符號(hào)輸入vi及文件名稱后,進(jìn)入vi之后矗烛,是處于「命令行模式(command mode)」辅柴,您要切換到「插入模式(Insert mode)」才能夠輸入文字。初次使用vi的人都會(huì)想先用上下左右鍵移動(dòng)光標(biāo)瞭吃,結(jié)果電腦一直嗶嗶叫碌嘀,把自己氣個(gè)半死,所以進(jìn)入vi后虱而,先不要亂動(dòng)筏餐,轉(zhuǎn)換到「插入模式(Insert mode)」再說吧!

b) 切換至插入模式(Insert mode)編輯文件

在「命令行模式(command mode)」下按一下字母「i」就可以進(jìn)入「插入模式(Insert mode)」牡拇,這時(shí)候你就可以開始輸入文字了。

c) Insert 的切換

目前處于「插入模式(Insert mode)」穆律,就只能一直輸入文字惠呼,如果發(fā)現(xiàn)輸錯(cuò)了字!想用光標(biāo)鍵往回移動(dòng)峦耘,將該字刪除剔蹋,就要先按一下「ESC」鍵轉(zhuǎn)到「命令行模式(command mode)」再刪除文字。

d) 退出vi及保存文件

在「命令行模式(command mode)」下辅髓,按一下「:」冒號(hào)鍵進(jìn)入「Last line mode」泣崩,例如:

: w filename (輸入 「w filename」將文章以指定的文件名filename保存)

: wq (輸入「wq」,存盤并退出vi)

: q! (輸入q!洛口, 不存盤強(qiáng)制退出vi)

3矫付、命令行模式(command mode)功能鍵

1). 插入模式

   按「i」切換進(jìn)入插入模式「insert mode」,按"i"進(jìn)入插入模式后是從光標(biāo)當(dāng)前位置開始輸入文件第焰;

按「a」進(jìn)入插入模式后买优,是從目前光標(biāo)所在位置的下一個(gè)位置開始輸入文字;

按「o」進(jìn)入插入模式后,是插入新的一行杀赢,從行首開始輸入文字烘跺。

2). 從插入模式切換為命令行模式

  按「ESC」鍵。

3). 移動(dòng)光標(biāo)

vi可以直接用鍵盤上的光標(biāo)來上下左右移動(dòng)脂崔,但正規(guī)的vi是用小寫英文字母「h」滤淳、「j」、「k」砌左、「l」脖咐,分別控制光標(biāo)左、下绊困、上文搂、右移一格。

按「ctrl」+「b」:屏幕往"后"移動(dòng)一頁秤朗。

按「ctrl」+「f」:屏幕往"前"移動(dòng)一頁煤蹭。

按「ctrl」+「u」:屏幕往"后"移動(dòng)半頁。

按「ctrl」+「d」:屏幕往"前"移動(dòng)半頁取视。

按數(shù)字「0」:移到文章的開頭硝皂。

按「G」:移動(dòng)到文章的最后。

按「$」:移動(dòng)到光標(biāo)所在行的"行尾"作谭。

按「^」:移動(dòng)到光標(biāo)所在行的"行首"

按「w」:光標(biāo)跳到下個(gè)字的開頭

按「e」:光標(biāo)跳到下個(gè)字的字尾

按「b」:光標(biāo)回到上個(gè)字的開頭

按「#l」:光標(biāo)移到該行的第#個(gè)位置稽物,如:5l,56l。

4). 刪除文字

「x」:每按一次折欠,刪除光標(biāo)所在位置的"后面"一個(gè)字符贝或。

「#x」:例如,「6x」表示刪除光標(biāo)所在位置的"后面"6個(gè)字符锐秦。

「X」:大寫的X咪奖,每按一次,刪除光標(biāo)所在位置的"前面"一個(gè)字符酱床。

「#X」:例如羊赵,「20X」表示刪除光標(biāo)所在位置的"前面"20個(gè)字符。

「dd」:刪除光標(biāo)所在行扇谣。

「#dd」:從光標(biāo)所在行開始刪除#行

5). 復(fù)制

「yw」:將光標(biāo)所在之處到字尾的字符復(fù)制到緩沖區(qū)中昧捷。

「#yw」:復(fù)制#個(gè)字到緩沖區(qū)

「yy」:復(fù)制光標(biāo)所在行到緩沖區(qū)。

「#yy」:例如罐寨,「6yy」表示拷貝從光標(biāo)所在的該行"往下數(shù)"6行文字靡挥。

「p」:將緩沖區(qū)內(nèi)的字符貼到光標(biāo)所在位置。注意:所有與"y"有關(guān)的復(fù)制命令都必須與"p"配合才能完成復(fù)制與粘貼功能衩茸。

6). 替換

「r」:替換光標(biāo)所在處的字符芹血。

「R」:替換光標(biāo)所到之處的字符贮泞,直到按下「ESC」鍵為止。

7). 回復(fù)上一次操作

「u」:如果您誤執(zhí)行一個(gè)命令幔烛,可以馬上按下「u」啃擦,回到上一個(gè)操作。按多次"u"可以執(zhí)行多次回復(fù)饿悬。

8). 更改

「cw」:更改光標(biāo)所在處的字到字尾處

「c#w」:例如令蛉,「c3w」表示更改3個(gè)字

9). 跳至指定的行

「ctrl」+「g」列出光標(biāo)所在行的行號(hào)。

「#G」:例如狡恬,「15G」珠叔,表示移動(dòng)光標(biāo)至文章的第15行行首。

4弟劲、Last line mode下命令簡介

在使用「last line mode」之前祷安,請記住先按「ESC」鍵確定您已經(jīng)處于「command mode」下后,再按「:」冒號(hào)即可進(jìn)入「last line mode」兔乞。

A) 列出行號(hào)

「set nu」:輸入「set nu」后汇鞭,會(huì)在文件中的每一行前面列出行號(hào)。

B) 跳到文件中的某一行

「#」:「#」號(hào)表示一個(gè)數(shù)字庸追,在冒號(hào)后輸入一個(gè)數(shù)字霍骄,再按回車鍵就會(huì)跳到該行了,如輸入數(shù)字15淡溯,再回車读整,就會(huì)跳到文章的第15行。

C) 查找字符

「/關(guān)鍵字」:先按「/」鍵咱娶,再輸入您想尋找的字符米间,如果第一次找的關(guān)鍵字不是您想要的,可以一直按「n」會(huì)往后尋找到您要的關(guān)鍵字為止膘侮。

「?關(guān)鍵字」:先按「?」鍵车伞,再輸入您想尋找的字符,如果第一次找的關(guān)鍵字不是您想要的喻喳,可以一直按「n」會(huì)往前尋找到您要的關(guān)鍵字為止。

D) 保存文件

「w」:在冒號(hào)輸入字母「w」就可以將文件保存起來困曙。

E) 離開vi

「q」:按「q」就是退出表伦,如果無法離開vi,可以在「q」后跟一個(gè)「!」強(qiáng)制離開vi慷丽。

「qw」:一般建議離開時(shí)蹦哼,搭配「w」一起使用,這樣在退出的時(shí)候還可以保存文件要糊。

5纲熏、vi命令列表

1、下表列出命令模式下的一些鍵的功能:

h

左移光標(biāo)一個(gè)字符

l

右移光標(biāo)一個(gè)字符

k

光標(biāo)上移一行

j

光標(biāo)下移一行

^

光標(biāo)移動(dòng)至行首

0

數(shù)字"0",光標(biāo)移至文章的開頭

G

光標(biāo)移至文章的最后

$

光標(biāo)移動(dòng)至行尾

Ctrl+f

向前翻屏

Ctrl+b

向后翻屏

Ctrl+d

向前翻半屏

Ctrl+u

向后翻半屏

i

在光標(biāo)位置前插入字符

a

在光標(biāo)所在位置的后一個(gè)字符開始增加

o

插入新的一行局劲,從行首開始輸入

ESC

從輸入狀態(tài)退至命令狀態(tài)

x

刪除光標(biāo)后面的字符

x

刪除光標(biāo)后的#個(gè)字符

X

(大寫X)勺拣,刪除光標(biāo)前面的字符

X

刪除光標(biāo)前面的#個(gè)字符

dd

刪除光標(biāo)所在的行

dd

刪除從光標(biāo)所在行數(shù)的#行

yw

復(fù)制光標(biāo)所在位置的一個(gè)字

yw

復(fù)制光標(biāo)所在位置的#個(gè)字

yy

復(fù)制光標(biāo)所在位置的一行

yy

復(fù)制從光標(biāo)所在行數(shù)的#行

p

粘貼

u

取消操作

cw

更改光標(biāo)所在位置的一個(gè)字

cw

更改光標(biāo)所在位置的#個(gè)字

2、下表列出行命令模式下的一些指令

w filename

儲(chǔ)存正在編輯的文件為filename

wq filename

儲(chǔ)存正在編輯的文件為filename鱼填,并退出vi

q!

放棄所有修改药有,退出vi

set nu

顯示行號(hào)

/或?

查找,在/后輸入要查找的內(nèi)容

n

與/或?一起使用苹丸,如果查找的內(nèi)容不是想要找的關(guān)鍵字愤惰,按n或向后(與/聯(lián)用)或向前(與?聯(lián)用)繼續(xù)查找,直到找到為止赘理。

對(duì)于第一次用vi宦言,有幾點(diǎn)注意要提醒一下:

1、用vi打開文件后商模,是處于「命令行模式(command mode)」奠旺,您要切換到「插入模式(Insert mode)」才能夠輸入文字。切換方法:在「命令行模式(command mode)」下按一下字母「i」就可以進(jìn)入「插入模式(Insert mode)」阻桅,這時(shí)候你就可以開始輸入文字了凉倚。

2、編輯好后嫂沉,需從插入模式切換為命令行模式才能對(duì)文件進(jìn)行保存稽寒,切換方法:按「ESC」鍵。

3趟章、保存并退出文件:在命令模式下輸入:wq即可P硬凇(別忘了wq前面的:)

在屏幕上移動(dòng)

Vi提供了三個(gè)關(guān)于光標(biāo)在全屏幕上移動(dòng)并且文件本身不發(fā)生滾動(dòng)的命令。它們分別是H蚓土、M和L命令宏侍。

H命令

該命令將光標(biāo)移至屏幕首行的行首(即左上角),也就是當(dāng)前屏幕的第一行蜀漆,而不是整個(gè)文件的第一行谅河。利用此命令可以快速將光標(biāo)移至屏幕頂部。若在H命令之前加上數(shù)字n确丢,則將光標(biāo)移至第n行的行首绷耍。

M命令

該命令將光標(biāo)移至屏幕顯示文件的中間行的行首。即如果當(dāng)前屏幕已經(jīng)充滿,則移動(dòng)到整個(gè)屏幕的中間行鲜侥;如果并未充滿褂始,則移動(dòng)到文本的那些行的中間行。利用此命令可以快速地將光標(biāo)從屏幕的任意位置移至屏幕顯示文件的中間行的行首描函。例如泥畅,在上面屏幕顯示的情況下(不論光標(biāo)在屏幕的何處),在命令模式下讯赏,輸入命令M之后例驹,光標(biāo)都將移到add這一行的字母a上。

同樣值得一提的是,使用命令dM將會(huì)刪除從光標(biāo)當(dāng)前所在行至屏幕顯示文件的中間行的全部內(nèi)容。

L命令

當(dāng)文件顯示內(nèi)容超過一屏?xí)r,該命令將光標(biāo)移至屏幕上的最底行的行首宋欺;當(dāng)文件顯示內(nèi)容不足一屏?xí)r,該命令將光標(biāo)移至文件的最后一行的行首胰伍〕莸可見,利用此命令可以快速準(zhǔn)確地將光標(biāo)移至屏幕底部或文件的最后一行骂租。若在L命令之前加上數(shù)字n祷杈,則將光標(biāo)移至從屏幕底部算起第n行的行首。例如渗饮,在上面屏幕顯示的情況下(不論光標(biāo)在屏幕的何處)但汞,在命令模式下,輸入命令3L之后互站,光標(biāo)都將移到x++這一行的字母x上私蕾。

同樣值得一提的是,使用命令dL將會(huì)刪除從光標(biāo)當(dāng)前行至屏幕底行的全部內(nèi)容胡桃。

按字移動(dòng)光標(biāo)

首先介紹一下Vi中“字”的概念踩叭。在Vi中“字”有兩種含義。一種是廣義的字翠胰,它可以是兩個(gè)空格之間的任何內(nèi)容容贝。另一種字是狹義上的字,在此種意義之下之景,英文單詞斤富、標(biāo)點(diǎn)符號(hào)和非字母字符(如!、@锻狗、#满力、$、%轻纪、^脚囊、&、*桐磁、(、)讲岁、-我擂、+衬以、{、}校摩、[看峻、]、~衙吩、|互妓、"、<坤塞、>冯勉、/等)均被當(dāng)成是一個(gè)字。因此摹芙,上面那一行中就包括{灼狰、int、k浮禾、交胚;這4個(gè)字。

Vi中使用大寫命令一般就是指將字作為廣義來對(duì)待盈电,使用小寫命令就是作為狹義對(duì)待蝴簇。

搞清楚Vi中字的含義后,我們就可以介紹按字移動(dòng)光標(biāo)的命令了匆帚。

Vi 一共提供了三組關(guān)于按字移動(dòng)光標(biāo)的命令熬词,分別是:

w和W命令

將光標(biāo)右移至下一個(gè)字的字首;

e和E命令

如果光標(biāo)起始位置處于字內(nèi)(即非字尾處)卷扮,則該命令將把光標(biāo)移到本字字尾荡澎;如果光標(biāo)起始位置處于字尾,則該命令將把光標(biāo)移動(dòng)到下一個(gè)字的字尾晤锹。

b和B

如果光標(biāo)處于所在字內(nèi)(即非字首)摩幔,則該命令將把光標(biāo)移至本字字首;如果光標(biāo)處于所在字字首鞭铆,則該命令將把光標(biāo)移到上一個(gè)字的字首或衡。

按句移動(dòng)光標(biāo)

在Vi中,一個(gè)句子被定義為是以逗號(hào)(,)车遂、句號(hào)(.)封断、問號(hào)(?)和感嘆號(hào)(!)結(jié)尾舶担,且其后面跟著至少兩個(gè)以上(含兩個(gè))空格或一個(gè)換行符的字符序列坡疼。

Vi提供了關(guān)于按句移動(dòng)光標(biāo)的兩個(gè)命令,分別為:

  1. ( 命令

將光標(biāo)移至上一個(gè)句子的開頭衣陶。

  1. ) 命令

該命令將光標(biāo)移至下一個(gè)句子的開頭柄瑰。

按段移動(dòng)光標(biāo)

在Vi中闸氮,一個(gè)段被定義為是以一個(gè)空白行開始和結(jié)束的片段。Vi提供了關(guān)于按段移動(dòng)光標(biāo)的兩個(gè)命令教沾,分別為:

  1. { 命令

該命令將光標(biāo)向前移至上一個(gè)段的開頭蒲跨;

  1. } 命令

該命令將光標(biāo)向后移至下一個(gè)段的開頭。

屏幕滾動(dòng)

屏幕命令是以屏幕為單位移動(dòng)光標(biāo)的授翻,常用于文件的滾屏和分頁或悲。需要注意的是,屏幕命令不是光標(biāo)移動(dòng)命令堪唐,不能作為文本限定符用于刪除命令中巡语。

在命令模式下和文本輸入模式下均可以使用屏幕滾動(dòng)命令。

  1. 滾屏命令

關(guān)于滾屏命令有兩個(gè):

· < Ctrl+u > 將屏幕向前(文件頭方向)翻滾半屏羔杨;

· < Ctrl+d > 將屏幕向后(文件尾方向)翻滾半屏捌臊。

可以在這兩個(gè)命令之前加上一個(gè)數(shù)字n,則屏幕向前或向后翻滾n行兜材。并且這個(gè)值被系統(tǒng)記住理澎,以后再用< Ctrl+u >和< Ctrl+d >命令滾屏?xí)r,還滾相應(yīng)的行數(shù)曙寡。

  1. 分頁命令

關(guān)于分頁命令也有兩個(gè):

· < Ctrl+f > 將屏幕向文件尾方向翻滾一整屏(即一頁)糠爬;

· < Ctrl+b > 將屏幕向文件首方向翻滾一整屏(即一頁)。

同樣也可以在這兩個(gè)命令之前加上一個(gè)數(shù)字n举庶,則屏幕向前或向后移動(dòng)n頁执隧。

  1. 狀態(tài)命令< Ctrl+G >

命令顯示在vi狀態(tài)行上的vi狀態(tài)信息,包括正在編輯的文件名户侥、是否修改過镀琉、當(dāng)前行號(hào)、文件的行數(shù)以及光標(biāo)之前的行占整個(gè)文件的百分比蕊唐。

  1. 屏幕調(diào)零命令

Vi 提供了三個(gè)有關(guān)屏幕調(diào)零的命令屋摔。它們的格式分別為:

· [行號(hào)] z [行數(shù)] <回車>

· [行號(hào)] z [行數(shù)] .

· [行號(hào)] z [行數(shù)] _

若省略了行號(hào)和行數(shù),這三個(gè)命令分別為將光標(biāo)所在的當(dāng)前行作為屏幕的首行替梨、中間行和最末行重新顯示钓试;若給出行號(hào),那么該行號(hào)所對(duì)應(yīng)的行就作為當(dāng)前行顯示在屏幕的首行副瀑、中間行和最末行弓熏;若給出行數(shù),則它規(guī)定了在屏幕上顯示的行數(shù)糠睡。

[例13]

8z16<回車> :將文件中的第8行作為屏幕顯示的首行挽鞠,并一共顯示16行。

15z . :將文件中的第15行作為屏幕顯示的中間行,顯示行數(shù)為整屏滞谢。

15z 5_ :將文件中的第15行作為屏幕顯示的最末行串稀,顯示行數(shù)為5行。

文本插入操作

在命令模式下用戶輸入的任何字符都被Vi當(dāng)作命令加以解釋執(zhí)行狮杨,如果用戶要將輸入的字符當(dāng)作是文本內(nèi)容時(shí),則首先應(yīng)將Vi的工作模式從命令模式切換到文本輸入模式到忽。切換的方式是使用下面的命令橄教。

插入(Insert)命令

Vi提供了兩個(gè)插入命令:i和 I。

i命令

插入文本從光標(biāo)所在位置前開始,并且插入過程中可以使用鍵刪除錯(cuò)誤的輸入喘漏。此時(shí)Vi處于插入狀態(tài)护蝶,屏幕最下行顯示“--INSERT--”(插入)字樣。

I命令

該命令是將光標(biāo)移到當(dāng)前行的行首翩迈,然后在其前插入文本持灰。

附加(append)命令

Vi提供了兩個(gè)附加插入命令:a和A。

a命令

該命令用于在光標(biāo)當(dāng)前所在位置之后追加新文本负饲。新輸入的文本放在光標(biāo)之后堤魁,在光標(biāo)后的原文本將相應(yīng)地向后移動(dòng)。光標(biāo)可在一行的任何位置返十。

A命令

該命令與a命令不同的是妥泉,A命令將把光標(biāo)挪到所在行的行尾,從那里開始插入新文本洞坑。當(dāng)輸入A命令后盲链,光標(biāo)自動(dòng)移到該行的行尾。

a和A命令是把文本插入到行尾的唯一方法迟杂。

打開(open)命令

不論是Insert命令也好刽沾,還是append命令也好,所插入的內(nèi)容都是從當(dāng)前行中的某個(gè)位置開始的排拷。若我們希望在某行之前或某行之后插入一些新行侧漓,則應(yīng)使用open命令。

Vi提供了兩個(gè)打開命令:o和O攻泼。

o命令

該命令將在光標(biāo)所在行的下面新開一行火架,并將光標(biāo)置于該行的行首,等待輸入文本忙菠。要注意何鸡,當(dāng)使用刪除字符時(shí)只能刪除從插入模式開始的位置以后的字符,對(duì)于以前的字符不起作用牛欢。而且還可以在文本輸入方式下輸入一些控制字符骡男,例如,Ctrl+l即是插入分頁符傍睹,顯示為^L隔盛。

O命令

和o命令相反犹菱,O命令是在光標(biāo)所在行的上面插入一行,并將光標(biāo)置于該行的行首吮炕,等待輸入文本腊脱。

11.3.4 文本修改

在命令模式下可以使用Vi提供的各種有關(guān)命令對(duì)文本進(jìn)行修改,包括對(duì)文本內(nèi)容的刪除龙亲、復(fù)制陕凹、取代和替換等。

文本刪除

在編輯文本時(shí)鳄炉,經(jīng)常需要?jiǎng)h除一些不需要的文本杜耙,我們可以用鍵將輸錯(cuò)或不需要的文本刪除,但此時(shí)有一個(gè)限制就是當(dāng)刪到行頭之后拂盯,再想刪上面那行的內(nèi)容是不可能的佑女。

在命令模式下,Vi提供了許多刪除命令谈竿。這些命令大多是以d開頭的团驱。常用的有:

  1. 刪除單個(gè)字符

x: 刪除光標(biāo)處的字符。若在x之前加上一個(gè)數(shù)字n榕订,則刪除從光標(biāo)所在位置開始向右的n個(gè)字符店茶。

X:刪除光標(biāo)前面的那個(gè)字符。若在X之前加上一個(gè)數(shù)字n劫恒,則刪除從光標(biāo)前面那個(gè)字符開始向左的n個(gè)字符贩幻。

顯然這兩個(gè)命令是刪除少量字符的快捷方法。

  1. 刪除多個(gè)字符

dd:刪除光標(biāo)所在的整行两嘴。在dd前可加上一個(gè)數(shù)字n丛楚,表示刪除當(dāng)前行及其后n-1行的內(nèi)容。

D或d$:兩命令功能一樣憔辫,都是刪除從光標(biāo)所在處開始到行尾的內(nèi)容趣些。

d0:刪除從光標(biāo)前一個(gè)字符開始到行首的內(nèi)容。

dw:刪除一個(gè)單詞贰您。若光標(biāo)處在某個(gè)詞的中間坏平,則從光標(biāo)所在位置開始刪至詞尾。同dd命令一樣锦亦,可在dw之前加一個(gè)數(shù)字n舶替,表示刪除n個(gè)指定的單詞。

如果用戶不小心進(jìn)行了誤刪除操作杠园,也不要緊顾瞪,Vi提供了恢復(fù)誤操作的命令,并且可以將恢復(fù)的內(nèi)容移動(dòng),放在文本的任何地方陈醒√璩龋恢復(fù)命令用2 np,其中n為寄存器號(hào)钉跷。這是因?yàn)閂i內(nèi)部有9個(gè)用于維護(hù)刪除操作的寄存器弥鹦,分別用數(shù)字1,2爷辙,? 惶凝,9表示,它們分別保存以往用dd命令刪除的內(nèi)容犬钢。這些寄存器組成一個(gè)隊(duì)列,例如最近一次使用dd命令刪除的內(nèi)容被放到寄存器1中思灰;當(dāng)下次再使用dd命令刪除文本內(nèi)容時(shí)玷犹,Vi將把寄存器1的內(nèi)容轉(zhuǎn)存到寄存器2中,而寄存器1中又將是最近一次dd命令刪除的內(nèi)容洒疚。以此類推歹颓,Vi可以保存有最近九次用dd命令刪除的內(nèi)容,而前面的用dd命令刪除的內(nèi)容則被拋棄油湖。

在最末行模式下巍扛,也可以對(duì)文件內(nèi)容進(jìn)行刪除,但它只能刪除整行乏德,一次可將某個(gè)指定范圍內(nèi)(起始行號(hào)撤奸,終止行號(hào))的所有行全部刪除。需要注意的是喊括,用此種方法進(jìn)行刪除時(shí)胧瓜,Vi并不把所刪內(nèi)容放入寄存器中,因而當(dāng)發(fā)生誤刪除操作時(shí)郑什,不能用2 np命令恢復(fù)府喳,只能用u命令進(jìn)行有限的恢復(fù)。

最后提一下蘑拯,如何在文本輸入方式時(shí)將所輸入文本刪除钝满。用戶使用組合鍵即可,此時(shí)光標(biāo)將返回插入開始的位置申窘,并且Vi仍處于文本輸入方式弯蚜。

取消上一命令(Undo)

取消上一命令(Undo),也稱復(fù)原命令偶洋,是非常有用的命令熟吏,它可以取消前一次的誤操作或不合適的操作對(duì)文件造成的影響,使之回復(fù)到這種誤操作或不合適操作被執(zhí)行之前的狀態(tài)。

取消上一命令有兩種形式牵寺,在命令模式下鍵入字符u和U悍引。它們的功能都是取消剛才輸入的命令,恢復(fù)到原來的情況帽氓。小寫u和大寫U在具體細(xì)節(jié)上有所不同趣斤,二者的區(qū)別在于,大寫U命令的功能是恢復(fù)到誤操作命令前的情況黎休,即如果插入命令后使用U命令浓领,就刪除剛剛插入的內(nèi)容;如果刪除命令后使用U命令势腮,就相當(dāng)于在光標(biāo)處又插入剛剛刪除的內(nèi)容联贩。這里把所有修改文本的命令都視為插入命令。也就是說捎拯,U命令只能取消前一步操作泪幌,如果用U命令撤消了前一步操作,當(dāng)再按U鍵時(shí)署照,并不是撤消再前一步的操作祸泪,而是撤消了剛才U命令執(zhí)行的操作,也就是又恢復(fù)到第一次使用U命令之前的狀態(tài)建芙,結(jié)果是什么都沒做没隘。而小寫u命令的功能是把當(dāng)前行恢復(fù)成被編輯前的狀態(tài),而不管此行被編輯了多少次禁荸。

注意:對(duì)于取消命令仍可以再使用取消命令右蒲。這時(shí)會(huì)產(chǎn)生一種“負(fù)負(fù)得正”的效果,文件狀態(tài)將恢復(fù)到第一次執(zhí)行取消命令之前的狀態(tài)屡限,如同沒做任何操作一般品嚣。例如在上例中,再使用一次命令U钧大,屏幕將顯示的內(nèi)容仍為插入后的內(nèi)容翰撑。

重復(fù)命令(Redo)

重復(fù)命令也是一個(gè)非常常用的命令。在文本編輯中經(jīng)常會(huì)碰到需要機(jī)械地重復(fù)一些操作啊央,這時(shí)就需要用到重復(fù)命令眶诈。它可以讓用戶方便地再執(zhí)行一次前面剛完成的某個(gè)復(fù)雜的命令。

重復(fù)命令只能在命令模式下工作瓜饥,在該模式下按“.”鍵既可逝撬。執(zhí)行一個(gè)重復(fù)命令時(shí),其結(jié)果是依賴于光標(biāo)當(dāng)前位置的乓土。

文本內(nèi)容的修改

文本內(nèi)容的修改是指在編輯過程中宪潮,可以對(duì)文本中的某些字符溯警,某些行進(jìn)行修改,即用新輸入的文本代替需要修改的老文本狡相,它等于先用刪除命令刪除需要修改的內(nèi)容梯轻,然后再利用插入命令插入新的內(nèi)容。所以在使用修改命令后尽棕,vi進(jìn)入到文本輸入模式下喳挑,當(dāng)輸入完新的內(nèi)容后,一定要再按回到命令模式滔悉,否則Vi會(huì)一直認(rèn)為是在文本輸入模式下伊诵,此時(shí)輸入的任何內(nèi)容都被認(rèn)為是修改的新內(nèi)容。

Vi提供了三種修改命令回官,分別是c曹宴、C和cc。它們修改文本的范圍是由光標(biāo)位置和光標(biāo)移動(dòng)命令二者限定的歉提。下面分別介紹這三種修改命令浙炼。

c命令

c后緊跟光標(biāo)移動(dòng)命令,限定修改內(nèi)容的范圍是從光標(biāo)當(dāng)前位置開始到指定的位置為止唯袄。命令c中修改文本的范圍是由光標(biāo)位置和光標(biāo)移動(dòng)命令二者限定的。

C蜗帜、c$命令

C 恋拷、c$命令可以修改從光標(biāo)當(dāng)前位置開始到該行末尾或從光標(biāo)當(dāng)前位置開始到某行末尾范圍內(nèi)的內(nèi)容。

當(dāng)在命令C之前加上數(shù)字n時(shí)厅缺,表示可以修改指定行數(shù)的內(nèi)容蔬顾。例如,3C命令就表示把光標(biāo)所在位置的字符之后(注意不是整行)直到下面兩個(gè)整行的內(nèi)容刪除湘捎,由隨后輸入的內(nèi)容代替诀豁。

cc命令

cc命令的功能和C相同,只是修改的范圍和C不同窥妇,它是修改從光標(biāo)所在行的起始位(不管光標(biāo)處于該行的何列)到該行末尾或指定某行末尾范圍內(nèi)的內(nèi)容舷胜。光標(biāo)所在行的全部內(nèi)容都由新輸入的內(nèi)容所代替。

同命令C一樣活翩,也可以在cc之前加上數(shù)字n烹骨,表示要從光標(biāo)當(dāng)前行算起一共修改n行的內(nèi)容。例如材泄,5cc表示先刪除光標(biāo)所在行及其下面的4行沮焕,然后輸入要修改的內(nèi)容。

文本的替換

文本的替換即是用新輸入的文本代替原已有的文本拉宗。它同文本修改一樣峦树,也是先執(zhí)行刪除操作辣辫,再執(zhí)行插入操作。

Vi提供的替換的命令有取代命令魁巩、替換命令和字替換命令急灭。

  1. 取代命令 :r和R

r:用隨后輸入的一個(gè)字符代替當(dāng)前光標(biāo)處的那個(gè)字符。

R:用隨后輸入的文本取代從當(dāng)前光標(biāo)處及其后面的若干字符歪赢,每輸入一個(gè)字符就取代原有的一個(gè)字符化戳,直到按< Esc >鍵結(jié)束這次取代。若新輸入的字符數(shù)超過原有對(duì)應(yīng)字符數(shù)埋凯,則多出部分就附加在后面点楼。

若在命令R之前加上一個(gè)數(shù)字,例如5R白对,則表示新輸入的文本重復(fù)出現(xiàn)5次掠廓,但只取代一個(gè)被輸入文本所覆蓋的字符序列,當(dāng)前行中未被覆蓋的內(nèi)容仍保留下來甩恼,只是位置相應(yīng)右移蟀瞧。

值得一提的是,利用R取代文本內(nèi)容時(shí)条摸,新輸入的文本可以占多行悦污,取代時(shí)也只有光標(biāo)所在行的對(duì)應(yīng)字符被覆蓋。

可見新輸入的6個(gè)字符(包括空格钉蒲,但不包括< Esc >)取代原行中的6個(gè)字符切端。

  1. 替換命令:s和S

s(小寫):該命令表示用隨后輸入的文本替換當(dāng)前光標(biāo)所在的字符。

如果只用一個(gè)新字符替換光標(biāo)所在字符顷啼,則s命令與r命令功能類似踏枣,如sh與rh的作用都是將光標(biāo)所在字符變?yōu)閔。但二者也有區(qū)別钙蒙,r命令僅完成置換茵瀑,而s命令在完成置換同時(shí),工作模式從命令方式轉(zhuǎn)為文本輸入方式躬厌。因此马昨,s命令的一般使用方式是:s隨后是要替換的正文,最后一定是, 結(jié)束文本輸入模式扛施,返回到命令模式偏陪。

可以在s前面加一個(gè)數(shù)字n,則表示用s后輸入的文本替換從光標(biāo)所在字符開始及其后的n-1個(gè)字符(共n個(gè)字符)煮嫌。

S(大寫):該命令表示用新打入的正文替換光標(biāo)當(dāng)前行(整行)(不管光標(biāo)位于何列)笛谦。

如果在S之前給出一個(gè)數(shù)字n,例如3昌阿,則表示有3行(包括光標(biāo)當(dāng)前行及其下面2行)要被S命令之后輸入的正文所替換饥脑。

  1. 字替換 cw

如果我們只希望將某個(gè)字的內(nèi)容用其他文本串替換恳邀,則可用cw命令。cw所替換的是一個(gè)狹義的字灶轰。輸入這個(gè)命令后谣沸,Vi將把光標(biāo)處的那個(gè)字刪除,然后用戶可輸入任何文本內(nèi)容笋颤。輸入完成之后按鍵乳附,Vi即用所輸入的內(nèi)容替換原光標(biāo)位置至相應(yīng)字結(jié)尾的所有內(nèi)容。

文本行的合并

Vi提供了將文本中的某些行進(jìn)行合并的命令伴澄。該命令用J(大寫字母)表示赋除,其功能是把光標(biāo)所在行與下面一行合并為一行。

如果在J命令之前給出一個(gè)數(shù)字n非凌,例如3举农,則表示把光標(biāo)當(dāng)前行及其后面的2行(共3行)合并為一行。

文本行的移動(dòng)

在Vi中我們可以方便地將某個(gè)范圍內(nèi)的文本行左右移動(dòng)或從一個(gè)地方移至另外一個(gè)地方敞嗡。

文本行的左右移動(dòng)颁糟。

文本行左右移動(dòng)的命令有 >、<喉悴、>> 和 <<四個(gè)棱貌。

(1)> 命令將限定正文行(屏幕的首行)向右移動(dòng),通常是8個(gè)空格箕肃,使用格式為:>光標(biāo)移動(dòng)命令键畴。移動(dòng)正文行的范圍由光標(biāo)所在行和隨后打入的光標(biāo)移動(dòng)命令所限定。

(2)< 命令將限定正文行向左移動(dòng)突雪。其使用方式與>命令相同,只是移動(dòng)方向相反涡贱。例如咏删,<6M,將光標(biāo)當(dāng)前行和屏幕顯示中間行之間的各行都左移8個(gè)空格问词。

(3)>> 命令將光標(biāo)所在行右移8個(gè)空格督函。如果在>>命令之前給出一個(gè)數(shù)字n,例如4激挪,則表示光標(biāo)當(dāng)前行及其下面的3行(共4行)都右移8個(gè)空格辰狡。

(4)<< 命令將光標(biāo)所在行左移8個(gè)空格。其使用與>>命令相同垄分,只是移動(dòng)方向相反宛篇。

文本行的異行移動(dòng)

我們可以利用下面的步驟完成文本行從一個(gè)地方移至另外一個(gè)地方。

將光標(biāo)移至待移動(dòng)文本的首行薄湿;

按ndd命令叫倍。其中n為待移動(dòng)的行數(shù)偷卧。此時(shí)Vi將把待移動(dòng)的文本行從文件中刪除,并將其放入到1號(hào)刪除寄存器中吆倦;

將光標(biāo)移動(dòng)到目的行處听诸;

按2 1p將待移動(dòng)的文本行從刪除寄存器中取出。

此時(shí)待移動(dòng)的文本行就出現(xiàn)在目的位置處了蚕泽。

上述方法雖然可以實(shí)現(xiàn)文本行的異行移動(dòng)晌梨,但顯然太煩瑣。Vi還提供了另一種快捷的方法须妻,就是在末行模式下使用命令m(Move命令)仔蝌。使用方法為n m k,表示把第n行移至第k行的下方璧南。

現(xiàn)在想使第5行移至第4行位置處掌逛,可在末行模式下輸入:

:5 m 3

在命令m之前,還可以指定一個(gè)行號(hào)范圍(起始行號(hào)與終止行號(hào))司倚,表示要把指定范圍內(nèi)的文本行移到指定位置豆混。例如:

:2,5 m 0

表示把文件中的第二行至第五行的內(nèi)容移至文件頭(第零行之下动知,這個(gè)零行使一個(gè)虛行)皿伺。

Vi中的行號(hào)

Vi中的許多命令都要用到行號(hào)及行數(shù)等數(shù)值。若編輯的文件較大時(shí)盒粮,自己去數(shù)是非常不方便的鸵鸥。為此Vi提供了給文本加行號(hào)的功能。這些行號(hào)顯示在屏幕的左邊丹皱,而相應(yīng)行的內(nèi)容則顯示在行號(hào)之后妒穴。

使用的命令為:在末行方式下輸入命令:

:set number

需要說明的是,這里加的行號(hào)只是顯示給用戶看的摊崭,它們并不是文件內(nèi)容的一部分讼油。

在一個(gè)較大的文件中,用戶可能需要了解光標(biāo)當(dāng)前行是哪一行呢簸,在文件中處于什么位置矮台,可在命令模式下用組合鍵,此時(shí)Vi會(huì)在顯示窗口的最后一行顯示出相應(yīng)信息根时。該命令可以在任何時(shí)候使用瘦赫。

在末行方式下,我們可以輸入命令nu(單詞number的縮寫)來獲得光標(biāo)當(dāng)前行的行號(hào)與該行內(nèi)容蛤迎。

光標(biāo)移動(dòng)操作

全屏幕文本編輯器中确虱,光標(biāo)的移動(dòng)操作無疑是最經(jīng)常使用的操作了。用戶只有熟練地使用移動(dòng)光標(biāo)的這些命令替裆,才能迅速準(zhǔn)確地到達(dá)所期望的位置處進(jìn)行編輯蝉娜。

Vi中的光標(biāo)移動(dòng)既可以在命令模式下唱较,也可以在文本輸入模式下,但操作的方法不盡相同召川。

在文本輸入模式下南缓,可直接使用鍵盤上的四個(gè)方向鍵移動(dòng)光標(biāo)。

在命令模式下荧呐,有很多移動(dòng)光標(biāo)的方法汉形。不但可以使用四個(gè)方向鍵來移動(dòng)光標(biāo),還可以用h倍阐、j概疆、k、l這四個(gè)鍵代替四個(gè)方向鍵來移動(dòng)光標(biāo)峰搪,這樣可以避免由于不同機(jī)器上的不同鍵盤定義所帶來的矛盾岔冀,而且使用熟練后可以手不離開字母鍵盤位置就能完成所有操作,從而提高工作效率概耻。另外還可以用使套、、和四個(gè)鍵或組合鍵移動(dòng)光標(biāo)鞠柄。且以上這三種鍵在實(shí)現(xiàn)功能上是等價(jià)的侦高。除此之外,還有一些移動(dòng)光標(biāo)的命令厌杜。下面對(duì)它們的工作方式介紹如下:

奉呛、? (均稱為右向鍵)

右向鍵的作用是將光標(biāo)向右移動(dòng)一個(gè)位置。若在向右鍵前先輸入一個(gè)數(shù)字n夯尽,那么光標(biāo)就向右移動(dòng)n個(gè)位置瞧壮。例如5l表示光標(biāo)向右移動(dòng)5個(gè)位置。需要注意的是匙握,光標(biāo)移動(dòng)不能超過當(dāng)前行的末尾咆槽。若給定的n超過光標(biāo)當(dāng)前位置至行尾的字符個(gè)數(shù),如果用右向鍵肺孤,光標(biāo)只能移到行尾;如果用济欢,光標(biāo)移到下面一行或幾行的適當(dāng)位置赠堵。

h、法褥、? (向左鍵)

執(zhí)行一次向左鍵茫叭,光標(biāo)向左移動(dòng)一個(gè)位置。同向右鍵一樣半等,也可以在向左鍵的前面輸入一個(gè)數(shù)字n揍愁,那么光標(biāo)就向左移動(dòng)n個(gè)位置呐萨。需要注意的是,如果用左向鍵莽囤,光標(biāo)左移不能超出該行的開頭谬擦;如果用,光標(biāo)移到上面一行或幾行的適當(dāng)位置朽缎。

j惨远、、ˉ (向下鍵)

執(zhí)行一次向下鍵光標(biāo)向下移動(dòng)一個(gè)位置(即一行)话肖,但光標(biāo)所在的列不變北秽。當(dāng)這些命令前面加上數(shù)字n,則光標(biāo)下移n行最筒。

Vi除了可以用向下鍵將光標(biāo)下移外贺氓,還可以用鍵和“+”鍵將光標(biāo)下移一行或n行(不包括本行在內(nèi)),但此時(shí)光標(biāo)下移之后將位于該行的第一個(gè)字符處床蜘。例如:

3j 光標(biāo)下移3行辙培,且光標(biāo)所在列的位置不變。

3+或3 光標(biāo)下移3行悄泥,且光標(biāo)位于該行的行首虏冻。

k、弹囚、- (向上鍵)

執(zhí)行一次向上鍵光標(biāo)向上移動(dòng)一個(gè)位置(即一行)厨相,但光標(biāo)所在的列不變。同樣在這些命令前面加上數(shù)字n鸥鹉,則光標(biāo)上移n行蛮穿。

若希望光標(biāo)上移之后,光標(biāo)位于該行的行首毁渗,則可以使用命令“- ”践磅。

L (移至行首)

L 命令是將光標(biāo)移到當(dāng)前行的開頭,即將光標(biāo)移至當(dāng)前行的第一個(gè)非空白處(非制表符或非空格符)灸异。

$(移至行尾)

該命令將光標(biāo)移到當(dāng)前行的行尾府适,停在最后一個(gè)字符上。若在$命令之前加上一個(gè)數(shù)字n肺樟,則光標(biāo)下移n-1行并到達(dá)行尾檐春。

[行號(hào)] G(移至指定行)

該命令將光標(biāo)移至指定行號(hào)所指定的行的行首。這種移動(dòng)稱為絕對(duì)定位移動(dòng)么伯。

光標(biāo)移到了第6行的行首疟暖。

若省略行號(hào),則光標(biāo)移至該文件的最后一行的行首,即無論該文件有多少屏俐巴,都跳至最后一行

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末骨望,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子欣舵,更是在濱河造成了極大的恐慌擎鸠,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邻遏,死亡現(xiàn)場離奇詭異糠亩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)准验,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門赎线,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糊饱,你說我怎么就攤上這事垂寥。” “怎么了另锋?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵滞项,是天一觀的道長。 經(jīng)常有香客問我夭坪,道長文判,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任室梅,我火速辦了婚禮戏仓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亡鼠。我一直安慰自己赏殃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布间涵。 她就那樣靜靜地躺著仁热,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勾哩。 梳的紋絲不亂的頭發(fā)上抗蠢,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音思劳,去河邊找鬼迅矛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛敢艰,可吹牛的內(nèi)容都是我干的诬乞。 我是一名探鬼主播册赛,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼钠导,長吁一口氣:“原來是場噩夢啊……” “哼震嫉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牡属,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤票堵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后逮栅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悴势,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年措伐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了特纤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侥加,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捉貌,我是刑警寧澤霹菊,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站提前,受9級(jí)特大地震影響吗货,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狈网,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一宙搬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孙援,春花似錦害淤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至础淤,卻和暖如春崭放,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸽凶。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工币砂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玻侥。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓决摧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掌桩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容