vi命令是unix下常用而重要命令,可在全屏幕方式下編輯一個(gè)或多個(gè)文件。若在vi執(zhí)行時(shí)?
沒(méi)有指定一個(gè)文件,那么vi命令會(huì)自動(dòng)產(chǎn)生一個(gè)無(wú)名的空的工作文件。若指定的文件不存在,?
那么就按指定的文件名創(chuàng)建一個(gè)新的文件。若對(duì)文件的修改不保存的話(huà),v?i命令并不改變?cè)?
來(lái)文件的內(nèi)容。?
注意:vi命令并不鎖住所編輯的文件,因此多個(gè)用戶(hù)可能在同時(shí)編輯一個(gè)文件,那么最后?
保存的文件版本將被保留。?
下面是vi命令使用的一些選項(xiàng)及含義:??????????
-c?sub-command?在對(duì)指定的文件編輯前,先執(zhí)行指定的命令?sub-command?.?
-r?filename?恢復(fù)指定的文件filename?.??????????
-R?將指定的文件以只讀的方式放入編輯器中,這樣不會(huì)保存對(duì)文件的任何修?改。?
-y?number?將編輯窗口的大小設(shè)為number行。??????????
下面是vi編輯所處的三種模式:??????????
.命令模式?進(jìn)入vi時(shí)所處的模式。在此模式下用戶(hù)可輸入各種子命令對(duì)進(jìn)行*作,如刪除行、?
粘貼行、移向下一個(gè)字、移向不同行等。?
.文本輸入模式?在此模式下可以修改一行的內(nèi)容并增添新行。在命令模式下鍵入a?、i?或?
c鍵可進(jìn)入文本輸入模式,按Escape鍵可返回命令模式。?
.命令項(xiàng)模式?在此模式下,可以通過(guò)子命令輸入更多的參數(shù)。如:w子命令要求輸入一文?
件名,"/"子命令要求輸入一個(gè)查找項(xiàng)。用戶(hù)使用Escape鍵返回命令模式。?
下面是自命令模式下執(zhí)行的,在同一行上移動(dòng)的自命令:??????????
h?將光標(biāo)左移一格。??????????
l?將光標(biāo)右移一格。??????????
j?將光標(biāo)下移一格。??????????
k?將光標(biāo)上移一格。??????????
w?將光標(biāo)移到下一個(gè)小字的前面。??????????
W?將光標(biāo)移到下一個(gè)大字的前面。??????????
b?將光標(biāo)移到前一個(gè)小字的前面。??????????
B?將光標(biāo)移到前一個(gè)大字的前面。??????????
e?將光標(biāo)移到下一個(gè)小字的后面。??????????
E?將光標(biāo)移到前一個(gè)大字的后面。??????????
fc?把光標(biāo)移到同一行的下一個(gè)c字符處。??????????
Fc?把光標(biāo)移到同一行的前一個(gè)c字符處。??????????
tc?把光標(biāo)移到同一行的下一個(gè)字符c的前一格。??????????
Tc?把光標(biāo)移到同一行的前一個(gè)字符c的后一格。??????????
number|?把光標(biāo)移到遞number列上。??????????
下面是命令模式下在行間移動(dòng)的子命令:??????????
+或Enter?把光標(biāo)移至下一行第一個(gè)非空白字符。??????????
-?把光標(biāo)移至上一行第一個(gè)非空白字符。??????????
0?把光標(biāo)移到當(dāng)前行的第一個(gè)字符處。??????????
$?把光標(biāo)移到當(dāng)前行的最后一個(gè)字符處。??????????
H?把光標(biāo)移到屏幕最頂端一行。??????????
L?把光標(biāo)移到屏幕最底端一行。??????????
M?把光標(biāo)移到屏幕中間。??????????
下面是命令模式下改變屏幕顯示的子命令:??????????
z-?把當(dāng)前行作為屏幕的最后一行,并重新顯示屏幕。??????????
z.?把當(dāng)前行作為屏幕的中間一行,并重新顯示屏幕。??????????
Ctrl+l?重新顯示屏幕當(dāng)前內(nèi)容。??????????
/pattern/z-?尋找pattern的下一個(gè)位置,并把所在行設(shè)為屏幕的最后一行。?
下面是在命令模式下用來(lái)顯示頁(yè)面的子命令:??????????
Ctrl?+?f向后滾一頁(yè)。??????????
Ctrl?+?d向后滾半頁(yè)。??????????
Ctrl?+?b向前滾一頁(yè)。??????????
Ctrl?+?u向前滾半頁(yè)。??????????
Ctrl?+?e屏幕向下滾一行。??????????
Ctrl?+?y屏幕項(xiàng)上滾一行。??????????
下面是在命令模式下用來(lái)查找字符串所使用的子命令:??????????
/pattern?向后尋找指定的pattern?,若遇到文件尾,則從頭再開(kāi)始。?
?pattern?向前尋找指定的pattern?,若遇到文件頭,則從尾再開(kāi)始。?
n?在上次指定的方向上,再次執(zhí)行上次定義的查找。??????????
N?在上次指定的方向的相反方向上,再次執(zhí)行上次定義的查找。??????????
/pattern/+number?將光標(biāo)停在包含pattern的行后面第number行上。?
/pattern/-number?將光標(biāo)停在包含pattern的行前面第number行上。?
%?移到匹配的"()"或"{}"上。??????????
下面是在文本輸入模式下用來(lái)輸入文本的子命令(用戶(hù)可在任何時(shí)候按Escape返回到命令模式):?
a?在光標(biāo)之后開(kāi)始輸入文本。??????????
A在行尾開(kāi)始輸入文本。??????????
i在光標(biāo)之前開(kāi)始輸入文本。??????????
I在行首第一個(gè)非空白字符前輸入文本。??????????
o在光標(biāo)所在行后插入一空行。??????????
O在光標(biāo)所在行前插入一空行。??????????
下面是在命令模式下改變文本所使用的子命令(用戶(hù)可在任何的時(shí)候按Escape鍵返回到命令模式):?
cc或S?修改一整行。??????????
C?改變一行光標(biāo)位置以后的部分。??????????
cw?改變光標(biāo)所在單詞。??????????
dd刪除當(dāng)前行。??????????
D?刪除光標(biāo)所在行光標(biāo)后面的內(nèi)容。??????????
dw刪除光標(biāo)所在的單詞。??????????
J?把下一行內(nèi)容加到本行行尾。??????????
rc把光符所在字符替換成c?.??????????
R?覆蓋本行內(nèi)容。??????????
u恢復(fù)上一次的修改。??????????
x刪除光標(biāo)所在的字符。??????????
~?改變光標(biāo)所在出字符的大小寫(xiě)。??????????
.?重復(fù)上一個(gè)*作。??????????
<<把當(dāng)前行移到左邊。??????????
>>把當(dāng)前行移到右邊。??????????
下面是用于文件中拷貝文本的字命令:??????????
p?將緩沖區(qū)內(nèi)容取到光標(biāo)所在行的下面一行。??????????
P?將緩沖區(qū)內(nèi)容取到光標(biāo)所在行的上面一行。??????????
"bd?將文本刪除至有名緩沖區(qū)b?.??????????
"bp?張貼有名緩沖區(qū)b中內(nèi)容。??????????
yy把當(dāng)前行放入緩沖區(qū)。??????????
Y?把當(dāng)前行放入緩沖區(qū)。??????????
Yw把光標(biāo)所在的單詞放入緩沖區(qū)。??????????
下面是用于保存文件的子命令:??????????
:w?回寫(xiě)修改后的文件。??????????
:w?filename?當(dāng)filename不存在時(shí),把修改后的文件存為文件filename?,當(dāng)文件filename?
存在時(shí),報(bào)錯(cuò)。?
!w?filename?如果文件filename存在時(shí),把修改后的文件保存為文件filename?.?
下面列出了在vi編輯的多個(gè)文件之間切換所用的子命令:??????????
:n開(kāi)始編輯vi激活的文件列表中的下一個(gè)文件。??????????
:n?filenames?指定將被編輯的新的文件列表。??????????
下面列出了用于在當(dāng)前文件和另外一個(gè)文件間切換的子命令:??????????
:e?filename?使用filename激活vi?(在vi中裝入另一個(gè)文件filename)。?
e!重新裝入當(dāng)前文件,若當(dāng)前文件有改動(dòng),則丟棄以前的改動(dòng)。??????????
:e+filename?使用filename激活vi?,并從文件尾部開(kāi)始編輯。?
:e+number?filename?使用filename激活vi?,并在第number行開(kāi)始編輯。?
:e#?開(kāi)始編輯另外一個(gè)文件。??????????
下面是在本文件中加入其他文件代碼所使用的子命令:??????????
:r?filename讀取filename文件,并將其內(nèi)容加到當(dāng)前文件后。???
:r?!?command執(zhí)行command文件,并將其輸出加到當(dāng)前文件后。???
下面是vi中其他的子命令:??????????
ctrl+g?取得正在編輯文件的有關(guān)信息。??????????
:sh啟動(dòng)sh?,從sh中返回可用exit或ctrl+d?.??????????
:!?Command?執(zhí)行命令command?.??????????
!!重新執(zhí)行上次的:!?Command子命令。??????????
:q退出vi?,若用戶(hù)對(duì)編輯的文件有所修改,系統(tǒng)不會(huì)讓用戶(hù)使用q命令退出。???
:q!退出vi而不管是否對(duì)文件有改動(dòng)。??????????
ZZ或:wq?保存對(duì)文件的修改并退出vi?.??????????
用戶(hù)可在一個(gè)特殊的文件.exrc中定義特殊的vi命令。在vi中使用這些命令時(shí),必須在該?
命令前加上一個(gè)冒號(hào)(?:)?。