這篇文章為大家帶來了關於vi命令的詳細解析,vi編輯器是所有Unix及Linux系統下標準的編輯器,它的強大不遜色於任何最新的文本編輯器,希望對大家有幫助。
這裡只是簡單地介紹它的用法和一小部分指令。由於對Unix及Linux系統的任何版本,vi編輯器是完全相同的,因此您可以在其他任何介紹vi的地方進一步了解它。 Vi也是Linux中最基本的文字編輯器,學會它後,您將在Linux的世界中暢行無阻。
1、vi的基本概念
基本上vi可以分為三種狀態,分別是指令模式(command mode)、插入模式(Insert mode)與底行模式(last line mode),各模式的功能區分如下:
1) 命令列模式command mode)
控制螢幕遊標的移動,字元、字或行的刪除,移動複製某區段及進入Insert mode下,或到last line mode。
2) #(Insert mode)
只有在Insert mode下,才可以做文字輸入,按下「ESC」鍵可回到命令列模式。
3) 底行模式(last line mode)
將檔案儲存或退出vi,也可以設定編輯環境,如尋找字符串、列出行號…等。
不過一般我們在使用時把vi化為兩個模式,就是將底行模式(last line mode)也算入命令列模式command mode)。
2、vi的基本運算
a) #進入vi
在系統提示符號輸入vi及檔案名稱後,進入vi之後,是處於「命令列模式(command mode)」,您要切換到「插入模式(Insert mode)」才能夠輸入文字。初次使用vi的人都會想先用上下左右鍵移動遊標,結果電腦一直嗶嗶叫,把自己氣個半死,所以進入vi後,先不要亂動,轉換到“插入模式(Insert mode)”再說吧! b)
切換至插入模式(Insert mode)編輯檔案
在「命令列模式(command mode)」下按一下字母「i」就可以進入「插入模式(Insert mode)」,這時候你就可以開始輸入文字了。 c) Insert
的切換
目前處於「插入模式(Insert mode)」,就只能一直輸入文字,如果發現輸錯了字!想用遊標鍵往回移動,將該字刪除,就要先按一下“ESC”鍵轉到“命令列模式(command mode)”再刪除文字。 d)
退出vi及儲存檔案
在「命令列模式(command mode)」下,按一下「:」冒號鍵進入「Last line mode」,例如:: w filename (輸入「w filename」儲存文章以指定的檔案名稱filename): wq (輸入「wq」,並存檔退出vi): q! (輸入q!, 不存碟強制退出vi)#3
、命令列模式(command mode)功能鍵1
).插入模式
依「i」切換進入插入模式「insert mode」,按"i"進入插入模式後面是從遊標目前位置開始輸入檔案; 按「a」進入插入模式後,是從目前遊標所在位置的下一個位置開始輸入文字;按「o」進入插入模式後,是插入新的一行,從行首開始輸入文字。 2
). 從插入模式切換為命令列模式
# 按下「ESC」鍵。 3
). 移動遊標
###### vi可以直接用鍵盤上的遊標來上下左右移動,但正規的vi是用小寫英文字母「h」、「j」、「k」、「l」,分別控制遊標左、下、上、右移一格。 ###按「ctrl」 「b」:螢幕往」後"移動一頁。
按「ctrl」 「f」:畫面往"前」移動一頁。
按「ctrl」 「u」:畫面往"後」移動半頁。
按「ctrl」 「d」:畫面往"前」移動半頁。
按數字「0」:移到文章的開頭。
按「G」:移動到文章的最後。
按「$」:移到遊標所在行的"行尾"。
按「^」:移動到遊標所在行的"行首"
按「w」:遊標跳到下個字的開頭
按「e」:遊標跳到下個字的字尾
按「b」:遊標回到上個字的字尾
按「b」:遊標回到上個字的開頭
按「#l」:遊標移到該行的第#個位置,如:5l,56l。
4# 「x」:每按一次,刪除遊標所在位置的"後面"一個字元。
「#x」:例如,「6x」表示刪除遊標所在位置的"後面"6個字元。
「X」:大寫的X,每按一次,刪除遊標所在位置的"前面"一個字元。
「#X」:例如,「20X」表示刪除遊標所在位置的"前面"20個字元。
「dd」:刪除遊標所在行。
「#dd」:從遊標所在行開始刪除 # 行
5「yw」:將遊標所在之處到字尾的字元複製到緩衝區中。
「#yw」:複製#個字到緩衝區
6
7
).回覆上次動作
# 「u」:如果您誤執行一個指令,可以馬上按下“u”,回到上一個操作。按多次"u"可以執行多次回應。 8
#9
4
、Last line mode下指令簡介
在使用「last line mode」之前,請記住先按「ESC」鍵確定您已經處於「command mode」下後,再按「:」冒號即可進入「last line mode」。 A)
列出行號
「set nu」:輸入「set nu」後,會在檔案中的每一行前面列出行號。 B)
跳到檔案中的某一行
####### 「#」:「#」號表示一個數字,冒號後輸入一個數字,再按回車鍵就會跳到該行了,如輸入數字15,再回車,就會跳到文章的第15行。 ###C) 尋找字元
“/關鍵字”:先按“/”鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往後尋找到您要的關鍵字為止。
“?關鍵字”:先按“?”鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按“n”會往前尋找到您要的關鍵字為止。
D) 儲存檔案
「w」:在冒號輸入字母「w」就可以儲存檔案。
E) 離開vi
「q」:按「q」就是退出,如果無法離開vi,可以在「q」後面接一“!”強制離開vi。
「qw」:一般建議離開時,搭配「w」一起使用,這樣在退出的時候還可以儲存檔案。
5、vi指令清單
#1、下表列出指令模式下的一些鍵的功能:
h左移遊標一個字元
#l右移遊標一個字元
k遊標上移一行
j遊標下移一行
^遊標移到行首
0數字"0",遊標移至文章的開頭
G遊標移至文章的最後
$遊標移到行尾
Ctrl f向前翻頁
#Ctrl b向後翻頁
#p貼上##u取消操作
cw更改遊標所在位置的一個字
##cw更改遊標所在位置的#個字
w filename
儲存正在編輯的檔案為filename
wq filename
儲存正在編輯的檔案為filename,並且退出vi
q!
放棄所有修改,退出vi
/或?
#######查找,/後輸入要尋找的內容## ##########n############與/或?一起使用,如果尋找的內容不是想要找的關鍵字,按n或向後(與/聯用)或向前(與?聯用)繼續查找,直到找到為止。 #########對於第一次用vi,有幾點注意要提醒一下:######1、用vi開啟檔案後,是處於「命令列模式(command mode)」,您要切換到「插入模式(Insert mode)」才能夠輸入文字。切換方法:在「命令列模式(command mode)」下按一下字母「i」就可以進入「插入模式(Insert mode)」,這時候你就可以開始輸入文字了。
2、編輯好後,需從插入模式切換為命令列模式才能對檔案進行儲存,切換方法:按「ESC」鍵。
3、儲存並退出檔案:在指令模式下輸入:wq即可! (別忘了wq前面的:)
在螢幕上移動
Vi提供了三個關於遊標在全螢幕上移動並且檔案本身不發生滾動的命令。它們分別是H、M和L指令。
H指令
該指令將遊標移至螢幕首行的行首(即左上角),也就是目前畫面的第一行,而不是整個文件的第一行。利用此命令可以快速將遊標移至螢幕頂部。若在H指令之前加上數字n,則將遊標移至第n行的行首。
M命令
該指令將遊標移至螢幕顯示檔案的中間行的行首。即如果當前螢幕已經充滿,則移動到整個螢幕的中間行;如果並未充滿,則移動到文字的那些行的中間行。利用此指令可以快速地將遊標從螢幕的任意位置移至螢幕顯示檔案的中間行的行首。例如,在上面畫面顯示的情況下(不論遊標在螢幕的何處),在指令模式下,輸入指令M之後,遊標都會移到add這一行的字母a上。
同樣值得一提的是,使用指令dM將會刪除從遊標目前所在行至螢幕顯示檔案的中間行的全部內容。
L指令
當檔案顯示內容超過一螢幕時,該指令將遊標移至螢幕上的最底行的行首;當文件顯示內容不足一屏時,該指令將遊標移至文件的最後一行的行首。可見,利用此命令可以快速且準確地將遊標移至螢幕底部或檔案的最後一行。若在L指令之前加上數字n,則將遊標移至從螢幕底部算起第n行的行首。例如,在上面螢幕顯示的情況下(不論遊標在螢幕的何處),在指令模式下,輸入指令3L之後,遊標都會移到x 這一行的字母x上。
同樣值得一提的是,使用指令dL將會刪除從遊標目前行至螢幕底行的全部內容。
按字移動遊標
先介紹Vi中「字」的概念。在Vi中「字」有兩種意義。一種是廣義的字,它可以是兩個空格之間的任何內容。另一個字是狹義上的字,在此種意義之下,英文單字、標點符號和非字母字元(如!、@、#、$、%、^、&、*、(、)、-、 、{、}、[、]、~、|、"、<、>、/等)都被當成是一個字。因此,上面那一行中就包括{、int、k、;這4個字.
Vi中使用大寫指令一般就是指將字作為廣義來對待,使用小寫指令就是作為狹義對待。
#搞清楚Vi中字的意思後,我們就可以介紹按字移動遊標的指令了。
Vi 總共提供了三組關於按字移動遊標的指令,分別是:
w#和W指令
將遊標右邊移至下一個字的字首;
e和E指令
##如果遊標起始位置處於字內(即非字尾處),則該指令將把遊標移到本字尾;如果遊標起始位置處於字尾,則該指令將把遊標移到下一個字的字尾。b和B
如果遊標處於所在字內(即非前綴),則該指令將把遊標移至本字首;如果遊標處於所在字首,則該指令將把遊標移到上一個字的字首。按句移動遊標
在Vi中,一個句子被定義為是以逗號(,)、句號(.)、問號(?)和感嘆號(!)結尾,且其後面跟著至少兩個以上(含兩個)空格或一個換行符的字符序列。 Vi提供了兩個關於按句移動遊標的指令,分別為:#1. ( 指令
############################################################################################將遊標移至上一個句子的開頭。
2. ) 指令
該指令將遊標移至下一個句子的開頭。
以段移動遊標
在Vi中,一個段被定義為是以一個空白行開始和結束的片段。 Vi提供了兩個關於按段移動遊標的指令,分別為:
1. { 指令
該指令將遊標向前移至上一個區段的開頭;
2. } 指令
#該指令將遊標往後移至下一個區段的開頭。
螢幕捲動
螢幕指令是以螢幕為單位移動遊標的,常用於檔案的滾輪和分頁。需要注意的是,螢幕命令不是遊標移動命令,不能作為文字限定符用於刪除命令中。
在指令模式下和文字輸入模式下均可使用螢幕捲動指令。
1. 滾屏指令
關於滾輪指令有兩個:
· < Ctrl u > 將螢幕向前(文件頭方向)翻滾半螢幕;
· < Ctrl d > 將螢幕向後(文件尾方向)翻滾半螢幕。
可以在這兩個指令之前加上一個數字n,則螢幕向前或向後翻滾n行。而這個值被系統記住,以後再用< Ctrl u >和< Ctrl d >命令滾屏時,還滾對應的行數。
2. 分頁指令
關於分頁指令也有兩個:
· < Ctrl f > 將螢幕在檔案尾方向翻滾一整螢幕(即一頁);
· < Ctrl b > 將螢幕向檔案首方向翻滾一整螢幕(即一頁)。
同樣也可以在這兩個指令之前加上一個數字n,則螢幕向前或向後移動n頁。
3. 狀態指令< Ctrl G >
指令顯示在vi狀態行上的vi狀態訊息,包括正在編輯的檔案名稱、是否已修改、目前行號、檔案的行數以及遊標之前的行佔整個檔案的百分比。
4. 畫面調零指令
Vi 提供了三個關於螢幕歸零的指令。它們的格式分別為:
· [行號] z [行數] <回車>
· [行號] z [行數] .
· [行號] z [行數] _
若省略了行號和行數,這三個指令分別為將遊標所在的目前行作為螢幕的首行、中間行和最末行重新顯示;若給出行號,那麼該行號所對應的行就作為當前行顯示在屏幕的首行、中間行和最末行;若給出行數,則它規定了在屏幕上顯示的行數。
[範例13]
8z16<回車> :將檔案中的第8行作為螢幕顯示的首行,並總共顯示16行。
15z . :將檔案中的第15行作為螢幕顯示的中間行,顯示行數為整個螢幕。
15z 5_ :將檔案中的第15行當作螢幕顯示的最末行,顯示行數為5行。
文字插入操作
在命令模式下使用者輸入的任何字元都被Vi當作命令加以解釋執行,如果使用者要將輸入的字元當作是文字內容時,則首先應將Vi的工作模式從指令模式切換到文字輸入模式。切換的方式是使用下面的指令。
插入(Insert)指令
Vi提供了兩個插入指令:i和 I。
i命令
插入文字從遊標所在位置前開始,並且插入過程中可以使用鍵刪除錯誤的輸入。此時Vi處於插入狀態,螢幕最下行顯示「--INSERT--」(插入)字樣。
I命令
該指令是將遊標移到目前行的行首,然後在其前插入文字。
附加(append)指令
Vi提供了兩個附加插入指令:a和A。
a指令
#此指令用於在遊標目前所在位置之後追加新文字。新輸入的文字放在遊標之後,在遊標後的原始文字將相應地向後移動。遊標可在一行的任何位置。
A命令
該指令與a指令不同的是,A指令將把遊標移到所在行的行尾,從那裡開始插入新文字。當輸入A指令後,遊標會自動移到該行的行尾。
a和A指令是把文字插入行尾的唯一方法。
開啟(open)指令
不論是Insert指令也好,還是append指令也好,所插入的內容都是從目前行中的某個位置開始的。若我們希望在某行之前或某行之後插入一些新行,則應使用open指令。
Vi提供了兩個開啟指令:o和O。
o指令
該指令將在遊標所在行的下方新開一行,並將遊標置於該行的行首,等待輸入文字。要注意,當使用刪除字符時只能刪除從插入模式開始的位置以後的字符,對於先前的字符不起作用。而且也可以在文字輸入方式下輸入一些控製字符,例如,Ctrl l即是插入分頁符,顯示為^L。
O命令
和o命令相反,O命令是在遊標所在行的上面插入一行,並將遊標置於該行的行首,等待輸入文字。
11.3.4 文本修改
在命令模式下可以使用Vi提供的各種有關命令對文本進行修改,包括對文字內容的刪除、複製、取代和替換等。
文字刪除
在編輯文字時,經常需要刪除一些不需要的文本,我們可以用鍵將輸錯或不需要的文字刪除,但此時有一個限制就是當刪到行頭之後,再想刪上面那行的內容是不可能的。
在指令模式下,Vi提供了許多刪除指令。這些指令大多是以d開頭的。常用的有:
1. 刪除單一字元
x: 刪除遊標處的字元。若在x之前加上一個數字n,則刪除從遊標所在位置開始向右的n個字元。
X:刪除遊標前面的那個字元。若在X之前加上一個數字n,則刪除從遊標前面那個字元開始向左的n個字元。
顯然這兩個指令是刪除少量字元的快速方法。
2. 刪除多個字元
dd:刪除遊標所在的整行。在dd前可加上一個數字n,表示刪除目前行及其後n-1行的內容。
D或d$:兩個指令功能一樣,都是刪除從遊標所在開始到行尾的內容。
d0:刪除從遊標前一個字元開始到行首的內容。
dw:刪除一個單字。若遊標處在某個字的中間,則從遊標所在位置開始刪除詞尾。同dd指令一樣,可在dw之前加一個數字n,表示刪除n個指定的單字。
如果使用者不小心進行了誤刪除操作,也不要緊,Vi提供了恢復誤操作的命令,並且可以將恢復的內容移動,放在文字的任何地方。恢復指令用² np,其中n為暫存器號。這是因為Vi內部有9個用來維護刪除操作的暫存器,分別用數字1,2,¼ ,9表示,它們分別保存以往用dd指令刪除的內容。這些暫存器組成一個佇列,例如最近一次使用dd指令刪除的內容被放到暫存器1中;下次再使用dd指令刪除文字內容時,Vi將把暫存器1的內容轉存到暫存器2中,而暫存器1中又將是最近一次dd指令刪除的內容。以此類推,Vi可以保存有最近九次用dd指令刪除的內容,而前面的用dd指令刪除的內容則被拋棄。
在最末行模式下,也可以對檔案內容進行刪除,但它只能刪除整行,一次可將某個指定範圍內(起始行號,終止行號)的所有行全部刪除。要注意的是,用此種方法進行刪除時,Vi並不把所刪內容放入暫存器中,因而當發生誤刪除操作時,不能用² np指令恢復,只能用u指令進行有限的恢復。
最後提一下,如何在文字輸入方式時將所輸入文字刪除。使用者使用組合鍵即可,此時間標將返回插入開始的位置,並且Vi仍處於文字輸入方式。
取消上一指令(Undo)
取消上一指令(Undo),也稱為復原指令,是非常有用的指令,它可以取消前一次的誤操作或不合適的操作對文件造成的影響,使之回復到這種誤操作或不合適操作被執行之前的狀態。
取消上一指令有兩種形式,在指令模式下鍵入字元u和U。它們的功能都是取消剛才輸入的指令,恢復到原來的狀況。小寫u和大寫U在具體細節上有所不同,二者的區別在於,大寫U命令的功能是恢復到誤操作命令前的情況,即如果插入命令後使用U命令,就刪除剛剛插入的內容;
如果刪除指令後使用U指令,就相當於在遊標處又插入剛剛刪除的內容。這裡把所有修改文字的命令都視為插入命令。也就是說,U指令只能取消前一步操作,如果用U指令撤消了前一步操作,當再按U鍵時,並不是撤消再前一步的操作,而是撤消了剛才U指令執行的操作,也就是又恢復到第一次使用U指令之前的狀態,結果是什麼都沒做。而小寫u指令的功能是把目前行恢復成被編輯前的狀態,而不管此行被編輯了多少次。
注意:對於取消指令仍可以再使用取消指令。這時會產生一種「負負得正」的效果,檔案狀態將恢復到第一次執行取消指令之前的狀態,如同沒做任何操作一般。例如在上例中,再使用一次指令U,螢幕將顯示的內容仍為插入後的內容。
重複指令(Redo)
#重複指令也是一個非常常用的指令。在文字編輯中常常會碰到需要機械地重複一些操作,這時就需要用到重複指令。它可以讓使用者方便地再執行一次前面剛完成的某個複雜的指令。
重複指令只能在指令模式下運作,在該模式下按下「.」鍵既可。執行一個重複命令時,其結果是依賴遊標目前位置的。
文字內容的修改
文字內容的修改是指在編輯過程中,可以對文字中的某些字符,某些行進行修改,即用新輸入的文本代替需要修改的舊文本,它等於先用刪除命令刪除需要修改的內容,然後再利用插入命令插入新的內容。所以在使用修改指令後,vi進入到文字輸入模式下,當輸入完新的內容後,一定要再按回到指令模式,否則Vi會一直認為是在文字輸入模式下,此時輸入的任何內容都被認為是修改的新內容。
Vi提供了三種修改指令,分別是c、C和cc。它們修改文字的範圍是由遊標位置和遊標移動指令二者限定的。以下分別介紹這三種修改命令。
c指令
c後緊跟著遊標移動指令,限定修改內容的範圍是從遊標目前位置開始到指定的位置。命令c中修改文字的範圍是由遊標位置和遊標移動指令二者限定的。
C、c$指令
C 、c$指令可以修改從遊標目前位置開始到該行結尾或從遊標目前位置開始到某行末尾範圍內的內容。
當在指令C之前加上數字n時,表示可以修改指定行數的內容。例如,3C指令就表示把遊標所在位置的字元之後(注意不是整行)直到下面兩個整行的內容刪除,由隨後輸入的內容取代。
cc指令
cc指令的功能和C相同,只是修改的範圍和C不同,它是修改從遊標所在行的起始位元(不管遊標處於該行的何列)到該行末尾或指定某行末尾範圍內的內容。遊標所在行的全部內容都由新輸入的內容所取代。
同指令C一樣,也可以在cc之前加上數字n,表示要從遊標目前行算起一共修改n行的內容。例如,5cc表示先刪除遊標所在行及其下方的4行,然後輸入要修改的內容。
文字的替換
文字的替換即是用新輸入的文字取代原來的文字。它和文字修改一樣,也是先執行刪除操作,再執行插入操作。
Vi提供的替換的命令有取代命令、替換命令和字替換命令。
1. 取代指令 :r和R
r:用隨後輸入的一個字元取代目前遊標處的那個字元。
R:用隨後輸入的文字取代從目前遊標處及其後面的若干字符,每輸入一個字符就取代原有的一個字符,直到按< Esc >鍵結束這次取代。若新輸入的字元數超過原有對應字元數,則多出部分就附加在後面。
若在指令R之前加上一個數字,例如5R,則表示新輸入的文字重複出現5次,但只取代一個被輸入文字所覆蓋的字元序列,目前行中未被覆蓋的內容仍保留下來,只是位置對應右移。
值得一提的是,利用R取代文字內容時,新輸入的文字可以佔多行,取代時也只有遊標所在行的對應字元被覆寫。
可見新輸入的6個字元(包括空格,但不包括< Esc >)取代原行中的6個字元。
2. 取代指令:s和S
s(小寫):此指令表示用隨後輸入的文字取代目前遊標所在的字元。
如果只用一個新字符替換遊標所在字符,s命令與r命令功能類似,如sh與rh的作用都是將遊標所在字符變為h。但二者也有區別,r指令僅完成置換,而s指令在完成置換同時,工作模式從指令方式轉為文字輸入方式。因此,s指令的一般使用方式是:s隨後是要替換的正文,最後一定是, 結束文字輸入模式,回到指令模式。
可以在s前面加一個數字n,則表示用s後輸入的文字取代從遊標所在字元開始及其後的n-1個字元(共n個字元)。
S(大寫):此指令表示以新打入的正文取代遊標目前行(整行)(不管遊標位於何列)。
如果在S之前給出一個數字n,例如3,則表示有3行(包括遊標當前行及其下面2行)要被S命令之後輸入的正文所替換。
3. 字替換 cw
如果我們只希望將某個字的內容用其他文字串替換,則可用cw指令。 cw所替換的是一個狹義的字。輸入這個指令後,Vi將把遊標處的那個字刪除,然後使用者可輸入任何文字內容。輸入完成之後按鍵,Vi即以所輸入的內容取代原遊標位置至對應字結尾的所有內容。
文字行的合併
Vi提供了將文字中的某些行合併的命令。這個指令用J(大寫字母)表示,其功能是把遊標所在行與下面一行合併為一行。
如果在J指令之前給出一個數字n,例如3,則表示把遊標目前行及其後面的2行(共3行)合併為一行。
文字行的移動
在Vi中我們可以方便地將某個範圍內的文字行左右移動或從一個地方移至另一個地方。
文字行的左右移動。
文字行左右移動的指令有 >、<、>> 和 <<四。
(1)> 指令將限定正文行(螢幕的首行)向右移動,通常是8個空格,使用格式為:>遊標移動指令。移動正文行的範圍由遊標所在行和隨後打入的遊標移動指令所限定。
(2)< 指令將限定內文行向左移動。其使用方式與>指令相同,但移動方向相反。例如,<6M,將遊標目前行和螢幕顯示中間行之間的各行都左移8個空格。
(3)>> 指令將遊標所在行右移8個空格。如果在>>指令之前給予一個數字n,例如4,則表示遊標目前行及其下面的3行(共4行)都右移8個空格。
(4)<< 指令將遊標所在行左移8個空格。其使用與>>指令相同,只是移動方向相反。
文字行的異行移動
我們可以利用下面的步驟完成文字行從一個地方移至另一個地方。
將遊標移至待移動文字的首行;
按ndd指令。其中n為待移動的行數。此時Vi將把待移動的文字行從檔案中刪除,並將其放入到1號刪除暫存器中;
將遊標移到目的行處;
按² 1p將待移動的文字行從刪除暫存器中取出。
此時待移動的文字行就出現在目的位置處了。
上述方法雖然可以實現文字行的異行移動,但顯然太煩瑣。 Vi也提供了另一個快速的方法,就是在末行模式下使用指令m(Move指令)。使用方法為n m k,表示將第n行移至第k行的下方。
現在想讓第5行移至第4行位置處,可在末行模式下輸入:
:5 m 3
在指令m之前,還可以指定一個行號範圍(起始行號與終止行號),表示要把指定範圍內的文字行移到指定位置。例如:
:2,5 m 0
表示把檔案中的第二行至第五行的內容移至檔案頭(第零行之下,這個零行使一個虛行)。
Vi中的行號
Vi中的許多指令都要用到行號及行數等數值。若編輯的檔案較大時,自己去數是非常不方便的。為此Vi提供了為文字加行號的功能。這些行號顯示在螢幕的左邊,而對應行的內容則顯示在行號之後。
使用的指令為:在末行方式下輸入指令:
:set number
要說明的是,這裡加的行號只是顯示給使用者看的,它們並不是文件內容的一部分。
在一個較大的檔案中,使用者可能需要了解遊標目前行是哪一行,在檔案中處於什麼位置,可在指令模式下使用組合鍵,此時Vi會在顯示視窗的最後一行顯示出相應資訊。該命令可以在任何時候使用。
在末行方式下,我們可以輸入指令nu(單字number的縮寫)來取得遊標目前行的行號與該行內容。
遊標移動操作
全螢幕文字編輯器中,遊標的移動操作無疑是最常用的操作了。使用者只有熟練地使用移動遊標的這些命令,才能迅速準確地到達所期望的位置處進行編輯。
Vi中的遊標移動既可以在指令模式下,也可以在文字輸入模式下,但操作的方法不盡相同。
在文字輸入模式下,可直接使用鍵盤上的四個方向鍵移動遊標。
在指令模式下,有許多移動遊標的方法。不但可以使用四個方向鍵來移動遊標,還可以用h、j、k、l這四個鍵代替四個方向鍵來移動遊標,這樣可以避免由於不同機器上的不同鍵盤定義所帶來的矛盾,而且使用熟練後可以手不離開字母鍵盤位置就能完成所有操作,從而提高工作效率。另外還可以用、、和四個鍵或組合鍵來移動遊標。且以上這三種鍵在實作功能上是等價的。除此之外,還有一些移動遊標的指令。以下對它們的工作方式介紹如下:
、® (皆稱為右向鍵)
右向鍵的作用是將遊標向右移動一個位置。若在向右鍵前先輸入一個數字n,那麼遊標就向右移動n個位置。例如5l表示遊標向右移動5個位置。需要注意的是,遊標移動不能超過目前行的末尾。若給定的n超過遊標目前位置至行尾的字元數,如果用右向鍵,遊標只能移到行尾;如果用,遊標移到下面一行或幾行的適當位置。
h、、¬ (向左鍵)
#執行一次向左鍵,遊標會向左移動一個位置。同向右鍵一樣,也可以在向左鍵的前面輸入一個數字n,那麼遊標就向左移動n個位置。要注意的是,如果用左向鍵,遊標左移不能超出該行的開頭;如果用,遊標移到上面一行或幾行的適當位置。
j、、¯ (向下鍵)
#執行一次向下鍵遊標向下移動一個位置(即一行),但遊標所在的列不變。當這些指令前面加上數字n,則遊標下移n行。
Vi除了可以用向下鍵將遊標下移外,還可以用鍵和“ ”鍵將遊標下移一行或n行(不包括本行在內),但此時間標下移之後將位於該行的第一個字元處。例如:
3j 遊標下移3行,且遊標所在列的位置不變。
3 或3 遊標下移3行,且遊標位於該行的行首。
k、、(向上鍵)
#執行一次向上鍵遊標向上移動一個位置(即一行),但遊標所在的列不變。同樣在這些指令前面加上數字n,則遊標上移n行。
若希望遊標上移之後,遊標位於該行的行首,則可以使用指令「- 」。
L (移至行首)
L 指令是將遊標移到目前行的開頭,即將遊標移至目前行的第一個非空白處(非製表符或非空格符)。
$(移至行尾)
該指令將遊標移到目前行的行尾,停在最後一個字元上。若在$指令之前加上一個數字n,則遊標下移n-1行並到達行尾。
[行號] G(移至指定行)
#此指令將遊標移至指定行號所指定的行的行首。這種移動稱為絕對定位移動。
遊標移到了第6行的行首。
若省略行號,則遊標移至該文件的最後一行的行首,即無論該文件有多少屏,都跳至最後一行
相關推薦:《 Linux影片教學》
以上是整理分享Linux的vi指令詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!