===============================================================================
= 歡 迎 閱 讀 《 V I M 教 程 》 —— 版本 1.7 =
===============================================================================
Vim 是一個(gè)具有很多命令的功能非常強(qiáng)大的編輯器。限于篇幅,在本教程當(dāng)中
就不詳細(xì)介紹了。本教程的設(shè)計(jì)目標(biāo)是講述一些必要的基本命令,而掌握好這
些命令,您就能夠很容易地將 Vim 當(dāng)作一個(gè)通用編輯器來(lái)使用了。
完成本教程的內(nèi)容大約需要25-30分鐘,取決于您訓(xùn)練的時(shí)間。
注意:
每一節(jié)的命令操作將會(huì)更改本文。推薦您復(fù)制本文的一個(gè)副本,然后在副本上
進(jìn)行訓(xùn)練(如果您是通過(guò)"vimtutor"來(lái)啟動(dòng)教程的,那么本文就已經(jīng)是副本了)。
切記一點(diǎn):本教程的設(shè)計(jì)思路是在使用中進(jìn)行學(xué)習(xí)的。也就是說(shuō),您需要通過(guò)
執(zhí)行命令來(lái)學(xué)習(xí)它們本身的正確用法。如果您只是閱讀而不操作,那么您可能
會(huì)很快遺忘這些命令的!
好了,現(xiàn)在請(qǐng)確定您的Shift-Lock(大小寫(xiě)鎖定鍵)還沒(méi)有按下,然后按鍵盤(pán)上
的字母鍵 j 足夠多次來(lái)移動(dòng)光標(biāo),直到第一節(jié)的內(nèi)容能夠完全充滿(mǎn)屏幕。
第一講第一節(jié):移動(dòng)光標(biāo)
** 要移動(dòng)光標(biāo),請(qǐng)依照說(shuō)明分別按下 h、j、k、l 鍵。 **
^
k 提示: h 的鍵位于左邊,每次按下就會(huì)向左移動(dòng)。
< h l > l 的鍵位于右邊,每次按下就會(huì)向右移動(dòng)。
j j 鍵看起來(lái)很象一支尖端方向朝下的箭頭。
v
1. 請(qǐng)隨意在屏幕內(nèi)移動(dòng)光標(biāo),直至您覺(jué)得舒服為止。
2. 按下下行鍵(j),直到出現(xiàn)光標(biāo)重復(fù)下行。
---> 現(xiàn)在您應(yīng)該已經(jīng)學(xué)會(huì)如何移動(dòng)到下一講吧。
3. 現(xiàn)在請(qǐng)使用下行鍵,將光標(biāo)移動(dòng)到第一講第二節(jié)。
提示:如果您不敢確定您所按下的字母,請(qǐng)按下<ESC>鍵回到正常(Normal)模式。
然后再次從鍵盤(pán)輸入您想要的命令。
提示:光標(biāo)鍵應(yīng)當(dāng)也能正常工作的。但是使用hjkl鍵,在習(xí)慣之后您就能夠更快
地在屏幕內(nèi)四處移動(dòng)光標(biāo)。真的是這樣!
第一講第二節(jié):VIM的進(jìn)入和退出
!! 特別提示:敬請(qǐng)閱讀本一節(jié)的完整內(nèi)容,然后再執(zhí)行以下所講解的命令。
按<ESC>鍵(這是為了確保您處在正常模式)。
然后輸入: :q! <回車(chē)>
這種方式的退出編輯器會(huì)丟棄您進(jìn)入編輯器以來(lái)所做的改動(dòng)。如果您看到了命令行提示符,請(qǐng)輸入能夠帶您回到本教程的命令,那就是:
vimtutor <回車(chē)>如果您自信已經(jīng)牢牢記住了這些步驟的話(huà),請(qǐng)從步驟1執(zhí)行到步驟3退出,然
后再次進(jìn)入編輯器。
提示: :q! <回車(chē)> 會(huì)丟棄您所做的任何改動(dòng)。幾講之后您將學(xué)會(huì)如何保存改動(dòng)到文件。
- 將光標(biāo)下移到第一講第三節(jié)。
第一講第三節(jié):文本編輯之刪除
** 在正常(Normal)模式下,可以按下 x 鍵來(lái)刪除光標(biāo)所在位置的字符。**
1. 請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的那一行。
2. 為了修正輸入錯(cuò)誤,請(qǐng)將光標(biāo)移至準(zhǔn)備刪除的字符的位置處。
3. 然后按下 x 鍵將錯(cuò)誤字符刪除掉。
4. 重復(fù)步驟2到步驟4,直到句子修正為止。
---> The ccow jumpedd ovverr thhe mooon.
5. 好了,該行已經(jīng)修正了,下面是第一講第四節(jié)。
特別提示:在瀏覽本教程時(shí),不要強(qiáng)行記憶。記住一點(diǎn):在使用中學(xué)習(xí)。
第一講第四節(jié):文本編輯之插入
** 在正常模式下,可以按下 i 鍵來(lái)插入文本。**
請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的第一行。
為了使得第一行內(nèi)容雷同于第二行,請(qǐng)將光標(biāo)移至文本第一個(gè)準(zhǔn)備插入字符
的位置。然后按下 i 鍵,接著輸入必要的文本字符。
每個(gè)錯(cuò)誤修正完畢后,請(qǐng)按下 <ESC> 鍵返回正常模式。
重復(fù)步驟2至步驟4以便修正句子。
---> There is text misng this .
---> There is some text missing from this line.
- 如果您對(duì)文本插入操作已經(jīng)很滿(mǎn)意,請(qǐng)接著閱讀下面的第一講第五節(jié)。
第一講第五節(jié):文本編輯之添加
** 按 A 鍵以添加文本。 **
1. 移動(dòng)光標(biāo)到下面第一個(gè)標(biāo)記有 ---> 的一行。
光標(biāo)放在那一行的哪個(gè)字符上并不重要。
2. 按 A 鍵輸入必要的添加內(nèi)容。
3. 文本添加完畢后,按 <ESC> 鍵回到正常模式。
4. 移動(dòng)光標(biāo)到下面第二個(gè)標(biāo)記有 ---> 的一行。重復(fù)步驟2和步驟3以改正這個(gè)句子。
---> There is some text missing from th
There is some text missing from this line.
---> There is also some text miss
There is also some text missing here.
5. 當(dāng)您對(duì)添加文本操作感到滿(mǎn)意時(shí),請(qǐng)繼續(xù)學(xué)習(xí)第一講第六節(jié)。
第一講第六節(jié):編輯文件
** 使用 :wq 以保存文件并退出。 **
特別提示:在執(zhí)行以下步驟之前,請(qǐng)先讀完整個(gè)小節(jié)!
如您在第一講第二節(jié)中所做的那樣退出本教程: :q!
或者,如果您可以訪(fǎng)問(wèn)另一個(gè)終端,請(qǐng)?jiān)谀抢飯?zhí)行以下操作。在 shell 的提示符下輸入命令: vim tutor <回車(chē)>
'vim'是啟動(dòng) Vim 編輯器的命令,'tutor'是您希望編輯的文件的名字。
請(qǐng)使用一個(gè)可以改動(dòng)的文件。使用您在前面的教程中學(xué)到的命令插入刪除文本。
保存改動(dòng)過(guò)的文件并退出 Vim,按這些鍵: :wq <回車(chē)>
如果您在步驟1中已經(jīng)退出 vimtutor,請(qǐng)重啟 vimtutor 移動(dòng)到下面的小結(jié)一節(jié)。
閱讀完以上步驟,弄懂它們的意義,然后在實(shí)踐中進(jìn)行練習(xí)。
第一講小結(jié)
1. 光標(biāo)在屏幕文本中的移動(dòng)既可以用箭頭鍵,也可以使用 hjkl 字母鍵。
h (左移) j (下行) k (上行) l (右移)
2. 欲進(jìn)入 Vim 編輯器(從命令行提示符),請(qǐng)輸入:vim 文件名 <回車(chē)>
3. 欲退出 Vim 編輯器,請(qǐng)輸入 <ESC> :q! <回車(chē)> 放棄所有改動(dòng)。
或者輸入 <ESC> :wq <回車(chē)> 保存改動(dòng)。
4. 在正常模式下刪除光標(biāo)所在位置的字符,請(qǐng)按: x
5. 欲插入或添加文本,請(qǐng)輸入:
i 輸入欲插入文本 <ESC> 在光標(biāo)前插入文本
A 輸入欲添加文本 <ESC> 在一行后添加文本
特別提示:按下 <ESC> 鍵會(huì)帶您回到正常模式或者撤消一個(gè)不想輸入或部分完整
的命令。
好了,第一講到此結(jié)束。下面接下來(lái)繼續(xù)第二講的內(nèi)容。
第二講第一節(jié):刪除類(lèi)命令
** 輸入 dw 可以從光標(biāo)處刪除至一個(gè)單詞的末尾。**
請(qǐng)按下 <ESC> 鍵確保您處于正常模式。
請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的那一行。
請(qǐng)將光標(biāo)移至準(zhǔn)備要?jiǎng)h除的單詞的起始處。
接著輸入 dw 刪除掉該單詞。
特別提示:當(dāng)您輸入時(shí),字母 d 會(huì)同時(shí)出現(xiàn)在屏幕的最后一行。Vim 在等待您輸入
字母 w。如果您看到的是除 d 外的其他字符,那表明您按錯(cuò)了;請(qǐng)按下 <ESC> 鍵,
然后重新再來(lái)。
---> There are a some words fun that don't belong paper in this sentence.
- 重復(fù)步驟3和步驟4,直至句子修正完畢。接著繼續(xù)第二講第二節(jié)內(nèi)容。
第二講第二節(jié):更多刪除類(lèi)命令
** 輸入 d$ 從當(dāng)前光標(biāo)刪除到行末。**
1. 請(qǐng)按下 <ESC> 鍵確保您處于正常模式。
2. 請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的那一行。
3. 請(qǐng)將光標(biāo)移動(dòng)到該行的尾部(也就是在第一個(gè)點(diǎn)號(hào)‘.’后面)。
4. 然后輸入 d$ 從光標(biāo)處刪至當(dāng)前行尾部。
---> Somebody typed the end of this line twice. end of this line twice.
5. 請(qǐng)繼續(xù)學(xué)習(xí)第二講第三節(jié)就知道是怎么回事了。
第二講第三節(jié):關(guān)于命令和對(duì)象
許多改變文本的命令都由一個(gè)操作符和一個(gè)動(dòng)作構(gòu)成。
使用刪除操作符 d 的刪除命令的格式如下:
d motion
其中:
d - 刪除操作符。
motion - 操作符的操作對(duì)象(在下面列出)。
一個(gè)簡(jiǎn)短的動(dòng)作列表:
w - 從當(dāng)前光標(biāo)當(dāng)前位置直到下一個(gè)單詞起始處,不包括它的第一個(gè)字符。
e - 從當(dāng)前光標(biāo)當(dāng)前位置直到單詞末尾,包括最后一個(gè)字符。
$ - 從當(dāng)前光標(biāo)當(dāng)前位置直到當(dāng)前行末。
因此輸入 de 會(huì)從當(dāng)前光標(biāo)位置刪除到單詞末尾。
特別提示:
對(duì)于勇于探索者,請(qǐng)?jiān)谡DJ较旅鎯H按代表相應(yīng)動(dòng)作的鍵而不使用操作符,您
將看到光標(biāo)的移動(dòng)正如上面的對(duì)象列表所代表的一樣。
第二講第四節(jié):使用計(jì)數(shù)指定動(dòng)作
** 在動(dòng)作前輸入數(shù)字會(huì)使它重復(fù)那么多次。 **
1. 移動(dòng)光標(biāo)到下面標(biāo)記有 ---> 的一行的開(kāi)始。
2. 輸入 2w 使光標(biāo)向前移動(dòng)兩個(gè)單詞。
3. 輸入 3e 使光標(biāo)向前移動(dòng)到第三個(gè)單詞的末尾。
4. 輸入 0 (數(shù)字零) 移動(dòng)光標(biāo)到行首。
5. 重復(fù)步驟2和步驟3,嘗試不同的數(shù)字。
---> This is just a line with words you can move around in.
6. 請(qǐng)繼續(xù)學(xué)習(xí)第二講第五節(jié)。
第二講第五節(jié):使用計(jì)數(shù)以刪除更多
** 使用操作符時(shí)輸入數(shù)字可以使它重復(fù)那么多次。 **
上面已經(jīng)提到過(guò)刪除操作符和動(dòng)作的組合,您可以在組合中動(dòng)作之前插入一個(gè)數(shù)字以
刪除更多:
d number(數(shù)字) motion
移動(dòng)光標(biāo)到下面標(biāo)記有 ---> 的一行中第一個(gè)大寫(xiě)字母單詞上。
輸入 d2w 以刪除兩個(gè)大寫(xiě)字母單詞。
重復(fù)步驟1和步驟2,使用不同的數(shù)字使得用一個(gè)命令就能刪除全部相鄰的大寫(xiě)字母
單詞
---> this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
第二講第六節(jié):操作整行
** 輸入 dd 可以刪除整一個(gè)當(dāng)前行。 **
鑒于整行刪除的高頻度,Vi 的設(shè)計(jì)者決定要簡(jiǎn)化整行刪除操作,您僅需要在同一行上
擊打兩次 d 就可以刪除掉光標(biāo)所在的整行了。
1. 請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面的短句段落中的第二行。
2. 輸入 dd 刪除該行。
3. 然后移動(dòng)到第四行。
4. 接著輸入 2dd 刪除兩行。
---> 1) Roses are red,
---> 2) Mud is fun,
---> 3) Violets are blue,
---> 4) I have a car,
---> 5) Clocks tell time,
---> 6) Sugar is sweet
---> 7) And so are you.
第二講第七節(jié):撤消類(lèi)命令
** 輸入 u 來(lái)撤消最后執(zhí)行的命令,輸入 U 來(lái)撤消對(duì)整行的修改。 **
- 請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的那一行,并將其置于第一個(gè)錯(cuò)誤
處。 - 輸入 x 刪除第一個(gè)不想保留的字母。
- 然后輸入 u 撤消最后執(zhí)行的(一次)命令。
- 這次要使用 x 修正本行的所有錯(cuò)誤。
- 現(xiàn)在輸入一個(gè)大寫(xiě)的 U ,恢復(fù)到該行的原始狀態(tài)。
- 接著多次輸入 u 以撤消 U 以及更前的命令。
- 然后多次輸入 CTRL-R (先按下 CTRL 鍵不放開(kāi),接著按 R 鍵),這樣就
可以重做被撤消的命令,也就是撤消掉撤消命令。
---> Fiix the errors oon thhis line and reeplace them witth undo.
- 這些都是非常有用的命令。下面是第二講的小結(jié)了。
第二講小結(jié)
1. 欲從當(dāng)前光標(biāo)刪除至下一個(gè)單詞,請(qǐng)輸入:dw
2. 欲從當(dāng)前光標(biāo)刪除至當(dāng)前行末尾,請(qǐng)輸入:d$
3. 欲刪除整行,請(qǐng)輸入:dd
4. 欲重復(fù)一個(gè)動(dòng)作,請(qǐng)?jiān)谒懊婕由弦粋€(gè)數(shù)字:2w
5. 在正常模式下修改命令的格式是:
operator [number] motion
其中:
operator - 操作符,代表要做的事情,比如 d 代表刪除
[number] - 可以附加的數(shù)字,代表動(dòng)作重復(fù)的次數(shù)
motion - 動(dòng)作,代表在所操作的文本上的移動(dòng),例如 w 代表單詞(word),
$ 代表行末等等。
6. 欲移動(dòng)光標(biāo)到行首,請(qǐng)按數(shù)字0鍵:0
7. 欲撤消以前的操作,請(qǐng)輸入:u (小寫(xiě)的u)
欲撤消在一行中所做的改動(dòng),請(qǐng)輸入:U (大寫(xiě)的U)
欲撤消以前的撤消命令,恢復(fù)以前的操作結(jié)果,請(qǐng)輸入:CTRL-R
第三講第一節(jié):置入類(lèi)命令
** 輸入 p 將最后一次刪除的內(nèi)容置入光標(biāo)之后。 **
請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面第一個(gè)標(biāo)記有 ---> 的一行。
輸入 dd 將該行刪除,這樣會(huì)將該行保存到 Vim 的一個(gè)寄存器中。
接著將光標(biāo)移動(dòng)到 c) 一行,即準(zhǔn)備置入的位置的上方。記住:是上方哦。
然后在正常模式下(<ESC>鍵進(jìn)入)輸入 p 將該行粘貼置入。
重復(fù)步驟2至步驟4,將所有的行依序放置到正確的位置上。
---> d) Can you learn too?
---> b) Violets are blue,
---> c) Intelligence is learned,
---> a) Roses are red,
第三講第二節(jié):替換類(lèi)命令
** 輸入 r 和一個(gè)字符替換光標(biāo)所在位置的字符。**
1. 請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的第一行。
2. 請(qǐng)移動(dòng)光標(biāo)到第一個(gè)出錯(cuò)的位置。
3. 接著輸入 r 和要替換成的字符,這樣就能將錯(cuò)誤替換掉了。
4. 重復(fù)步驟2和步驟3,直到第一行已經(jīng)修改完畢。
---> Whan this lime was tuoed in, someone presswd some wrojg keys!
---> When this line was typed in, someone pressed some wrong keys!
5. 然后我們繼續(xù)學(xué)習(xí)第三講第三節(jié)。
特別提示:切記您要在使用中學(xué)習(xí),而不是在記憶中學(xué)習(xí)。
第三講第三節(jié):更改類(lèi)命令
** 要改變文本直到一個(gè)單詞的末尾,請(qǐng)輸入 ce **
請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的第一行。
接著把光標(biāo)放在單詞 lubw 的字母 u 的位置那里。
然后輸入 cw 以及正確的單詞(在本例中是輸入 ine )。
最后按 <ESC> 鍵,然后光標(biāo)定位到下一個(gè)錯(cuò)誤第一個(gè)準(zhǔn)備更改的字母處。
重復(fù)步驟3和步驟4,直到第一個(gè)句子完全雷同第二個(gè)句子。
---> This lubw has a few wptfd that mrrf changing usf the change operator.
---> This line has a few words that need changing using the change operator.
提示:請(qǐng)注意 ce 命令不僅僅是刪除了一個(gè)單詞,它也讓您進(jìn)入插入模式了。
第三講第四節(jié):使用c更改更多
** 更改類(lèi)操作符可以與刪除中使用的同樣的動(dòng)作配合使用。 **
1. 更改類(lèi)操作符的工作方式跟刪除類(lèi)是一致的。操作格式是:
c [number] motion
2. 動(dòng)作參數(shù)(motion)也是一樣的,比如 w 代表單詞,$代表行末等等。
3. 請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的第一行。
4. 接著將光標(biāo)移動(dòng)到第一個(gè)錯(cuò)誤處。
5. 然后輸入 c$ 使得該行剩下的部分更正得同第二行一樣。最后按 <ESC> 鍵。
---> The end of this line needs some help to make it like the second.
---> The end of this line needs to be corrected using the c$ command.
第三講小結(jié)
要重新置入已經(jīng)刪除的文本內(nèi)容,請(qǐng)按小寫(xiě)字母 p 鍵。該操作可以將已刪除
的文本內(nèi)容置于光標(biāo)之后。如果最后一次刪除的是一個(gè)整行,那么該行將置
于當(dāng)前光標(biāo)所在行的下一行。要替換光標(biāo)所在位置的字符,請(qǐng)輸入小寫(xiě)的 r 和要替換掉原位置字符的新字
符即可。更改類(lèi)命令允許您改變從當(dāng)前光標(biāo)所在位置直到動(dòng)作指示的位置中間的文本。
比如輸入 ce 可以替換當(dāng)前光標(biāo)到單詞的末尾的內(nèi)容;輸入 c$ 可以替換當(dāng)
前光標(biāo)到行末的內(nèi)容。-
更改類(lèi)命令的格式是:
c [number] motion
現(xiàn)在我們繼續(xù)學(xué)習(xí)下一講。
第四講第一節(jié):定位及文件狀態(tài)
** 輸入 CTRL-G 顯示當(dāng)前編輯文件中當(dāng)前光標(biāo)所在行位置以及文件狀態(tài)信息。
輸入大寫(xiě) G 則直接跳轉(zhuǎn)到文件中的某一指定行。**
提示:切記要先通讀本節(jié)內(nèi)容,之后才可以執(zhí)行以下步驟!!!
1. 按下 CTRL 鍵不放開(kāi)然后按 g 鍵。我們稱(chēng)這個(gè)鍵組合為 CTRL-G。
您會(huì)看到頁(yè)面最底部出現(xiàn)一個(gè)狀態(tài)信息行,顯示的內(nèi)容是當(dāng)前編輯的文件名
和文件中光標(biāo)位置。請(qǐng)記住行號(hào),它會(huì)在步驟3中用到。
提示:您也許會(huì)在屏幕的右下角看到光標(biāo)位置,這會(huì)在 'ruler' 選項(xiàng)設(shè)置時(shí)發(fā)生
(參見(jiàn) :help 'ruler')
2. 輸入大寫(xiě) G 可以使得當(dāng)前光標(biāo)直接跳轉(zhuǎn)到文件最后一行。
輸入 gg 可以使得當(dāng)前光標(biāo)直接跳轉(zhuǎn)到文件第一行。
3. 輸入您曾停留的行號(hào),然后輸入大寫(xiě) G。這樣就可以返回到您第一次按下
CTRL-G 時(shí)所在的行了。
4. 如果您覺(jué)得沒(méi)問(wèn)題的話(huà),請(qǐng)執(zhí)行步驟1至步驟3的操作進(jìn)行練習(xí)。
第四講第二節(jié):搜索類(lèi)命令
** 輸入 / 加上一個(gè)字符串可以用以在當(dāng)前文件中查找該字符串。**
在正常模式下輸入 / 字符。您此時(shí)會(huì)注意到該字符和光標(biāo)都會(huì)出現(xiàn)在屏幕底
部,這跟 : 命令是一樣的。接著輸入 errroor <回車(chē)>。那個(gè)errroor就是您要查找的字符串。
要查找同上一次的字符串,只需要按 n 鍵。要向相反方向查找同上一次的字
符串,請(qǐng)輸入大寫(xiě) N 即可。如果您想逆向查找字符串,請(qǐng)使用 ? 代替 / 進(jìn)行。
要回到您之前的位置按 CTRL-O (按住 Ctrl 鍵不放同時(shí)按下字母 o)。重復(fù)按可以
回退更多步。CTRL-I 會(huì)跳轉(zhuǎn)到較新的位置。
---> "errroor" is not the way to spell error; errroor is an error.
提示:如果查找已經(jīng)到達(dá)文件末尾,查找會(huì)自動(dòng)從文件頭部繼續(xù)查找,除非
'wrapscan' 選項(xiàng)被復(fù)位。
第四講第三節(jié):配對(duì)括號(hào)的查找
** 輸入 % 可以查找配對(duì)的括號(hào) )、]、}。**
1. 把光標(biāo)放在本節(jié)下面標(biāo)記有 --> 那一行中的任何一個(gè) (、[ 或 { 處。
2. 接著按 % 字符。
3. 此時(shí)光標(biāo)的位置應(yīng)當(dāng)是在配對(duì)的括號(hào)處。
4. 再次按 % 就可以跳回配對(duì)的第一個(gè)括號(hào)處。
5. 移動(dòng)光標(biāo)到另一個(gè) (、)、[、]、{ 或 } 處,按 % 查看其所作所為。
---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
提示:在程序調(diào)試時(shí),這個(gè)功能用來(lái)查找不配對(duì)的括號(hào)是很有用的。
第四講第四節(jié):替換命令
** 輸入 :s/old/new/g 可以替換 old 為 new。**
請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的那一行。
輸入 :s/thee/the <回車(chē)> 。請(qǐng)注意該命令只改變光標(biāo)所在行的第一個(gè)匹配
串。輸入 :s/thee/the/g 則是替換全行的匹配串,該行中所有的 "thee" 都會(huì)被
改變。
---> thee best time to see thee flowers is in thee spring.
- 要替換兩行之間出現(xiàn)的每個(gè)匹配串,請(qǐng)
輸入 :#,#s/old/new/g 其中 #,# 代表的是替換操作的若干行中
首尾兩行的行號(hào)。
輸入 :%s/old/new/g 則是替換整個(gè)文件中的每個(gè)匹配串。
輸入 :%s/old/new/gc 會(huì)找到整個(gè)文件中的每個(gè)匹配串,并且對(duì)每個(gè)匹配串
提示是否進(jìn)行替換。
第四講小結(jié)
1. CTRL-G 用于顯示當(dāng)前光標(biāo)所在位置和文件狀態(tài)信息。
G 用于將光標(biāo)跳轉(zhuǎn)至文件最后一行。
先敲入一個(gè)行號(hào)然后輸入大寫(xiě) G 則是將光標(biāo)移動(dòng)至該行號(hào)代表的行。
gg 用于將光標(biāo)跳轉(zhuǎn)至文件第一行。
2. 輸入 / 然后緊隨一個(gè)字符串是在當(dāng)前所編輯的文檔中正向查找該字符串。
輸入 ? 然后緊隨一個(gè)字符串則是在當(dāng)前所編輯的文檔中反向查找該字符串。
完成一次查找之后按 n 鍵是重復(fù)上一次的命令,可在同一方向上查
找下一個(gè)匹配字符串所在;或者按大寫(xiě) N 向相反方向查找下一匹配字符串所在。
CTRL-O 帶您跳轉(zhuǎn)回較舊的位置,CTRL-I 則帶您到較新的位置。
3. 如果光標(biāo)當(dāng)前位置是括號(hào)(、)、[、]、{、},按 % 會(huì)將光標(biāo)移動(dòng)到配對(duì)的括號(hào)上。
4. 在一行內(nèi)替換頭一個(gè)字符串 old 為新的字符串 new,請(qǐng)輸入 :s/old/new
在一行內(nèi)替換所有的字符串 old 為新的字符串 new,請(qǐng)輸入 :s/old/new/g
在兩行內(nèi)替換所有的字符串 old 為新的字符串 new,請(qǐng)輸入 :#,#s/old/new/g
在文件內(nèi)替換所有的字符串 old 為新的字符串 new,請(qǐng)輸入 :%s/old/new/g
進(jìn)行全文替換時(shí)詢(xún)問(wèn)用戶(hù)確認(rèn)每個(gè)替換需添加 c 標(biāo)志 :%s/old/new/gc
第五講第一節(jié):在 VIM 內(nèi)執(zhí)行外部命令的方法
** 輸入 :! 然后緊接著輸入一個(gè)外部命令可以執(zhí)行該外部命令。**
按下我們所熟悉的 : 命令使光標(biāo)移動(dòng)到屏幕底部。這樣您就可以輸入一行命令了。
接著輸入感嘆號(hào) ! 這個(gè)字符,這樣就允許您執(zhí)行外部的 shell 命令了。
我們以 ls 命令為例。輸入 !ls <回車(chē)> 。該命令就會(huì)列舉出您當(dāng)前目錄的
內(nèi)容,就如同您在命令行提示符下輸入 ls 命令的結(jié)果一樣。如果 !ls 沒(méi)起
作用,您可以試試 :!dir 看看。
提示:所有的外部命令都可以以這種方式執(zhí)行,包括帶命令行參數(shù)的那些。
提示:所有的 : 命令都必須以敲 <回車(chē)> 鍵結(jié)束。從今以后我們就不會(huì)總是提到這一點(diǎn)
了。
第五講第二節(jié):關(guān)于保存文件的更多信息
** 要將對(duì)文件的改動(dòng)保存到文件中,請(qǐng)輸入 :w FILENAME 。**
1. 輸入 :!dir 或者 :!ls 獲知當(dāng)前目錄的內(nèi)容。您應(yīng)當(dāng)已知道最后還得敲
<回車(chē)> 吧。
2. 選擇一個(gè)未被用到的文件名,比如 TEST。
3. 接著輸入 :w TEST (此處 TEST 是您所選擇的文件名。)
4. 該命令會(huì)以 TEST 為文件名保存整個(gè)文件 (Vim 教程)。為了驗(yàn)證這一點(diǎn),
請(qǐng)?jiān)俅屋斎?:!dir 或 :!ls 查看您的目錄列表內(nèi)容。
請(qǐng)注意:如果您退出 Vim 然后在以命令 vim TEST 再次啟動(dòng) Vim,那么該文件內(nèi)
容應(yīng)該同您保存時(shí)的文件內(nèi)容是完全一樣的。
5. 現(xiàn)在您可以刪除 TEST 文件了。在 MS-DOS 下,請(qǐng)輸入: :!del TEST
在 Unix 下,請(qǐng)輸入: :!rm TEST
第五講第三節(jié):一個(gè)具有選擇性的保存命令
** 要保存文件的部分內(nèi)容,請(qǐng)輸入 v motion :w FILENAME **
移動(dòng)光標(biāo)到本行。
接著按 v 鍵,將光標(biāo)移動(dòng)至下面第五個(gè)條目上。您會(huì)注意到之間的文本被高亮了。
然后按 : 字符。您將看到屏幕底部會(huì)出現(xiàn) :'<,'> 。
現(xiàn)在請(qǐng)輸入 w TEST,其中 TEST 是一個(gè)未被使用的文件名。確認(rèn)您看到了
:'<,'>w TEST 之后按 <回車(chē)> 鍵。這時(shí) Vim 會(huì)把選中的行寫(xiě)入到以 TEST 命名的文件中去。使用 :!dir 或 :!ls
確認(rèn)文件被正確保存。這次先別刪除它!我們?cè)谙乱恢v中會(huì)用到它。
提示:按 v 鍵使 Vim 進(jìn)入可視模式進(jìn)行選取。您可以四處移動(dòng)光標(biāo)使選取區(qū)域變大或
變小。接著您可以使用一個(gè)操作符對(duì)選中文本進(jìn)行操作。例如,按 d 鍵會(huì)刪除
選中的文本內(nèi)容。
第五講第四節(jié):提取和合并文件
** 要向當(dāng)前文件中插入另外的文件的內(nèi)容,請(qǐng)輸入 :r FILENAME **
1. 請(qǐng)把光標(biāo)移動(dòng)到本行上面一行。
特別提示:執(zhí)行步驟2之后您將看到第五講第三節(jié)的文字,請(qǐng)屆時(shí)往下移動(dòng)
以再次看到本講內(nèi)容。
2. 接著通過(guò)命令 :r TEST 將前面創(chuàng)建的名為 TEST 的文件提取進(jìn)來(lái)。
您所提取進(jìn)來(lái)的文件將從光標(biāo)所在位置處開(kāi)始置入。
3. 為了確認(rèn)文件已經(jīng)提取成功,移動(dòng)光標(biāo)回到原來(lái)的位置就可以注意有兩份第
五講第三節(jié)的內(nèi)容,一份是原始內(nèi)容,另外一份是來(lái)自文件的副本。
提示:您還可以讀取外部命令的輸出。例如, :r !ls 可以讀取 ls 命令的輸出,并
把它放置在光標(biāo)下面。
第五講小結(jié)
-
:!command 用于執(zhí)行一個(gè)外部命令 command。
請(qǐng)看一些實(shí)際例子:
(MS-DOS) (Unix)
:!dir :!ls - 用于顯示當(dāng)前目錄的內(nèi)容。
:!del FILENAME :!rm FILENAME - 用于刪除名為 FILENAME 的文件。 :w FILENAME 可將當(dāng)前 VIM 中正在編輯的文件保存到名為 FILENAME 的文
件中。v motion :w FILENAME 可將當(dāng)前編輯文件中可視模式下選中的內(nèi)容保存到文件
FILENAME 中。:r FILENAME 可提取磁盤(pán)文件 FILENAME 并將其插入到當(dāng)前文件的光標(biāo)位置
后面。:r !dir 可以讀取 dir 命令的輸出并將其放置到當(dāng)前文件的光標(biāo)位置后面。
第六講第一節(jié):打開(kāi)類(lèi)命令
** 輸入 o 將在光標(biāo)的下方打開(kāi)新的一行并進(jìn)入插入模式。**
1. 請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的那一行。
2. 接著輸入小寫(xiě)的 o 在光標(biāo) *下方* 打開(kāi)新的一行,這個(gè)命令會(huì)使您
進(jìn)入插入模式。
3. 然后輸入一些文字,之后按 <ESC> 鍵退出插入模式而進(jìn)入正常模式。
---> After typing o the cursor is placed on the open line in Insert mode.
4. 為了在光標(biāo) *上方* 打開(kāi)新的一行,只需要輸入大寫(xiě)的 O 而不是小寫(xiě)的 o
就可以了。請(qǐng)?jiān)谙滦袦y(cè)試一下吧。
---> Open up a line above this by typing O while the cursor is on this line.
第六講第二節(jié):附加類(lèi)命令
** 輸入 a 將可在光標(biāo)之后插入文本。 **
請(qǐng)?jiān)谡DJ较聦⒐鈽?biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的第一行的行首。
接著輸入 e 直到光標(biāo)位于 li 的末尾。
輸入小寫(xiě)的 a 則可在光標(biāo)之后插入文本了。
將單詞補(bǔ)充完整,就像下一行中的那樣。之后按 <ESC> 鍵退出插入模式回到
正常模式。使用 e 移動(dòng)光標(biāo)到下一步不完整的單詞,重復(fù)步驟3和步驟4。
---> This li will allow you to pract appendi text to a line.
---> This line will allow you to practice appending text to a line.
提示:a、i 和 A 都會(huì)帶您進(jìn)入插入模式,惟一的區(qū)別在于字符插入的位置。
第六講第三節(jié):另外一個(gè)置換類(lèi)命令的版本
** 輸入大寫(xiě)的 R 可連續(xù)替換多個(gè)字符。**
1. 請(qǐng)將光標(biāo)移動(dòng)到本節(jié)中下面標(biāo)記有 ---> 的第一行。移動(dòng)光標(biāo)到第一個(gè) xxx 的
起始位置。
2. 然后輸入大寫(xiě)的 R 開(kāi)始把第一行中的不同于第二行的剩余字符逐一輸入,就
可以全部替換掉原有的字符而使得第一行完全雷同第二行了。
3. 接著按 <ESC> 鍵退出替換模式回到正常模式。您可以注意到尚未替換的文本
仍然保持原狀。
4. 重復(fù)以上步驟,將剩余的 xxx 也替換掉。
---> Adding 123 to xxx gives you xxx.
---> Adding 123 to 456 gives you 579.
提示:替換模式與插入模式相似,不過(guò)每個(gè)輸入的字符都會(huì)刪除一個(gè)已有的字符。
第六講第四節(jié):復(fù)制粘貼文本
** 使用操作符 y 復(fù)制文本,使用 p 粘貼文本 **
定位到下面標(biāo)記有 ---> 的一行,將光標(biāo)移動(dòng)到 "a)" 之后。
接著使用 v 進(jìn)入可視模式,移動(dòng)光標(biāo)到 "first" 的前面。
現(xiàn)在輸入 y 以抽出(復(fù)制)高亮的文本。
然后移動(dòng)光標(biāo)到下一行的末尾:j$
接著輸入 p 以放置(粘貼)復(fù)制了的文本。然后輸入:a second <ESC>。
使用可視模式選中 " item.",用 y 復(fù)制,再用 j$ 將光標(biāo)移動(dòng)到下一行末尾,
用 p 將文本粘貼到那里。
---> a) this is the first item.
b)
提示:您還可以把 y 當(dāng)作操作符來(lái)使用;例如 yw 可以用來(lái)復(fù)制一個(gè)單詞。
第六講第五節(jié):設(shè)置類(lèi)命令的選項(xiàng)
** 設(shè)置可使查找或者替換可忽略大小寫(xiě)的選項(xiàng) **
1. 要查找單詞 ignore 可在正常模式下輸入 /ignore <回車(chē)>。
要重復(fù)查找該詞,可以重復(fù)按 n 鍵。
2. 然后設(shè)置 ic 選項(xiàng)(Ignore Case,忽略大小寫(xiě)),請(qǐng)輸入: :set ic
3. 現(xiàn)在可以通過(guò)鍵入 n 鍵再次查找單詞 ignore。注意到 Ignore 和 IGNORE 現(xiàn)在
也被找到了。
4. 然后設(shè)置 hlsearch 和 incsearch 這兩個(gè)選項(xiàng),請(qǐng)輸入: :set hls is
5. 現(xiàn)在可以再次輸入查找命令,看看會(huì)有什么效果: /ignore <回車(chē)>
6. 要禁用忽略大小寫(xiě),請(qǐng)輸入: :set noic
提示:要移除匹配項(xiàng)的高亮顯示,請(qǐng)輸入: :nohlsearch
提示:如果您想要僅在一次查找時(shí)忽略字母大小寫(xiě),您可以使用 \c:
/ignore\c <回車(chē)>
第六講小結(jié)
輸入小寫(xiě)的 o 可以在光標(biāo)下方打開(kāi)新的一行并進(jìn)入插入模式。
輸入大寫(xiě)的 O 可以在光標(biāo)上方打開(kāi)新的一行。輸入小寫(xiě)的 a 可以在光標(biāo)所在位置之后插入文本。
輸入大寫(xiě)的 A 可以在光標(biāo)所在行的行末之后插入文本。e 命令可以使光標(biāo)移動(dòng)到單詞末尾。
操作符 y 復(fù)制文本,p 粘貼先前復(fù)制的文本。
輸入大寫(xiě)的 R 將進(jìn)入替換模式,直至按 <ESC> 鍵回到正常模式。
輸入 :set xxx 可以設(shè)置 xxx 選項(xiàng)。一些有用的選項(xiàng)如下:
'ic' 'ignorecase' 查找時(shí)忽略字母大小寫(xiě)
'is' 'incsearch' 查找短語(yǔ)時(shí)顯示部分匹配
'hls' 'hlsearch' 高亮顯示所有的匹配短語(yǔ)
選項(xiàng)名可以用完整版本,也可以用縮略版本。在選項(xiàng)前加上 no 可以關(guān)閉選項(xiàng): :set noic
第七講第一節(jié):獲取幫助信息
** 使用在線(xiàn)幫助系統(tǒng) **
Vim 擁有一個(gè)細(xì)致全面的在線(xiàn)幫助系統(tǒng)。要啟動(dòng)該幫助系統(tǒng),請(qǐng)選擇如下三種方
法之一:
- 按下 <HELP> 鍵 (如果鍵盤(pán)上有的話(huà))
- 按下 <F1> 鍵 (如果鍵盤(pán)上有的話(huà))
- 輸入 :help <回車(chē)>
請(qǐng)閱讀幫助窗口中的文字以了解幫助是如何工作的。
輸入 CTRL-W CTRL-W 可以使您在窗口之間跳轉(zhuǎn)。
輸入 :q <回車(chē)> 可以關(guān)閉幫助窗口。
提供一個(gè)正確的參數(shù)給":help"命令,您可以找到關(guān)于該主題的幫助。請(qǐng)?jiān)囼?yàn)以
下參數(shù)(可別忘了按回車(chē)鍵哦):
:help w
:help c_CTRL-D
:help insert-index
:help user-manual
第七講第二節(jié):創(chuàng)建啟動(dòng)腳本
** 啟用 Vim 的特性 **
Vim 的功能特性要比 Vi 多得多,但其中大部分都沒(méi)有缺省啟用。為了使用更多的
特性,您得創(chuàng)建一個(gè) vimrc 文件。
開(kāi)始編輯 vimrc 文件,具體命令取決于您所使用的操作系統(tǒng):
:edit ~/.vimrc 這是 Unix 系統(tǒng)所使用的命令
:edit $VIM/_vimrc 這是 MS-Windows 系統(tǒng)所使用的命令接著讀取 vimrc 示例文件的內(nèi)容:
:r $VIMRUNTIME/vimrc_example.vim保存文件,命令為:
:write
下次您啟動(dòng) Vim 時(shí),編輯器就會(huì)有了語(yǔ)法高亮的功能。
您可以把您喜歡的各種設(shè)置添加到這個(gè) vimrc 文件中。
要了解更多信息請(qǐng)輸入 :help vimrc-intro
第七講第三節(jié):補(bǔ)全功能
** 使用 CTRL-D 和 <TAB> 可以進(jìn)行命令行補(bǔ)全 **
1. 請(qǐng)確保 Vim 不是在以兼容模式運(yùn)行: :set nocp
2. 查看一下當(dāng)前目錄下已經(jīng)存在哪些文件,輸入: :!ls 或者 :!dir
3. 現(xiàn)在輸入一個(gè)目錄的起始部分,例如輸入: :e
4. 接著按 CTRL-D 鍵,Vim 會(huì)顯示以 e 開(kāi)始的命令的列表。
5. 然后按 <TAB> 鍵,Vim 會(huì)補(bǔ)全命令為 :edit 。
6. 現(xiàn)在添加一個(gè)空格,以及一個(gè)已有文件的文件名的起始部分,例如: :edit FIL
7. 接著按 <TAB> 鍵,Vim 會(huì)補(bǔ)全文件名(如果它是惟一匹配的)。
提示:補(bǔ)全對(duì)于許多命令都有效。您只需嘗試按 CTRL-D 和 <TAB>。
它對(duì)于 :help 命令非常有用。
第七講小結(jié)
輸入 :help 或者按 <F1> 鍵或 <Help> 鍵可以打開(kāi)幫助窗口。
輸入 :help cmd 可以找到關(guān)于 cmd 命令的幫助。
輸入 CTRL-W CTRL-W 可以使您在窗口之間跳轉(zhuǎn)。
輸入 :q 以關(guān)閉幫助窗口
您可以創(chuàng)建一個(gè) vimrc 啟動(dòng)腳本文件用來(lái)保存您偏好的設(shè)置。
當(dāng)輸入 : 命令時(shí),按 CTRL-D 可以查看可能的補(bǔ)全結(jié)果。
按 <TAB> 可以使用一個(gè)補(bǔ)全。
vim 教程到此就結(jié)束了。本教程只是為了簡(jiǎn)明地介紹一下 Vim 編輯器,但已足以讓您
很容易使用這個(gè)編輯器了。毋庸質(zhì)疑,vim還有很多很多的命令,本教程所介
紹的距離完整的差得很遠(yuǎn)。所以您要精通的話(huà),還望繼續(xù)努力哦。下一步您可以閱讀
Vim 的用戶(hù)手冊(cè),使用的命令是: :help user-manual
下面這本書(shū)值得推薦用于更進(jìn)一步的閱讀和學(xué)習(xí):
Vim - Vi Improved - 作者:Steve Oualline
出版社:New Riders
這是第一本完全講解 Vim 的書(shū)籍。它對(duì)于初學(xué)者特別有用。其中包含有大量實(shí)例
和圖示。
欲知詳情,請(qǐng)?jiān)L問(wèn) http://iccf-holland.org/click5.html
以下這本書(shū)比較老了而且內(nèi)容更多是關(guān)于 Vi 而非 Vim,但是也值得推薦:
Learning the Vi Editor - 作者:Linda Lamb
出版社:O'Reilly & Associates Inc.
這是一本不錯(cuò)的書(shū),通過(guò)它您幾乎能夠了解到任何您想要使用 Vi 做的事情。
此書(shū)的第六個(gè)版本也包含了一些關(guān)于 Vim 的信息。
本教程是由來(lái)自 Calorado School of Mines 的 Michael C. Pierce 和
Robert K. Ware 所編寫(xiě)的,其中很多創(chuàng)意由來(lái)自 Colorado State University 的
Charles Smith 提供。編者的電子郵箱是:bware@mines.colorado.edu