Unix/Linux - vi 編輯器教程



本章我們將瞭解 vi 編輯器在 Unix 中的工作方式。在 Unix 中有很多方法可以編輯檔案。使用螢幕導向文字編輯器vi編輯檔案是最佳方法之一。此編輯器允許您在檔案中與其他行一起編輯上下文中的行。

vi 編輯器的改進版本,稱為VIM,現已推出。這裡,VIM 代表Vi IMproved(vi 改進版)。

vi 通常被認為是 Unix 編輯器的實際標準,因為:

  • 它通常在所有 Unix 系統版本中都可用。

  • 它的實現跨平臺非常相似。

  • 它需要的資源很少。

  • 它比其他編輯器(如edex)更友好。

您可以使用vi編輯器編輯現有檔案或從頭建立一個新檔案。您也可以使用此編輯器僅讀取文字檔案。

啟動 vi 編輯器

下表列出了使用 vi 編輯器的基本命令:

序號 命令及說明
1

vi filename

如果檔案不存在,則建立一個新檔案;否則開啟現有檔案。

2

vi -R filename

以只讀模式開啟現有檔案。

3

view filename

以只讀模式開啟現有檔案。

以下是如何在當前工作目錄中建立新檔案testfile(如果該檔案不存在)的示例:

$vi testfile

上述命令將生成以下輸出:

|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]    

您會在游標後面的每一行上注意到一個波浪號 (~)。波浪號表示未使用的行。如果一行不以波浪號開頭且看起來是空的,則表示存在空格、製表符、換行符或其他不可見的字元。

您現在有一個開啟的檔案可以開始工作了。在繼續之前,讓我們瞭解一些重要的概念。

操作模式

在使用 vi 編輯器時,我們通常會遇到以下兩種模式:

  • 命令模式 - 此模式允許您執行管理任務,例如儲存檔案、執行命令、移動游標、剪下(複製)和貼上行或單詞,以及查詢和替換。在此模式下,您鍵入的內容將被解釋為命令。

  • 插入模式 - 此模式允許您將文字插入檔案。在此模式下鍵入的所有內容都將被解釋為輸入並放置在檔案中。

vi 始終以命令模式啟動。要輸入文字,您必須處於插入模式,只需鍵入i即可。要退出插入模式,請按Esc鍵,這將使您返回命令模式。

提示 - 如果您不確定自己處於哪種模式,請按兩次 Esc 鍵;這將使您進入命令模式。您可以使用 vi 編輯器開啟檔案。嘗試鍵入一些字元,然後進入命令模式以瞭解其中的區別。

退出 vi

退出 vi 的命令是:q。進入命令模式後,鍵入冒號和“q”,然後按回車鍵。如果您的檔案已以任何方式修改,編輯器會警告您這一點,並且不會讓您退出。要忽略此訊息,退出 vi 而不儲存的命令是:q!。這允許您退出 vi 而不儲存任何更改。

儲存編輯器內容的命令是:w。您可以將上述命令與退出命令組合使用,或使用:wq並按回車鍵。

儲存更改並退出 vi 的最簡單方法是使用 ZZ 命令。當您處於命令模式時,鍵入ZZZZ命令的工作方式與:wq命令相同。

如果要為檔案指定/宣告任何特定名稱,可以透過在:w之後指定它來實現。例如,如果您想將正在處理的檔案另存為名為filename2的其他檔名,則應鍵入:w filename2並按回車鍵。

在檔案中移動

要在不影響文字的情況下在檔案中移動,您必須處於命令模式(按兩次 Esc)。下表列出了一些您可以用來一次移動一個字元的命令:

序號 命令及說明
1

k

將游標向上移動一行

2

j

將游標向下移動一行

3

h

將游標向左移動一個字元位置

4

l

將游標向右移動一個字元位置

需要考慮以下幾點才能在檔案中移動:

  • vi 區分大小寫。使用命令時需要注意大小寫。

  • vi 中的大多數命令都可以加上您希望操作執行的次數作為字首。例如,2j 將游標向下移動兩個游標位置。

在 vi 中還有許多其他方法可以在檔案中移動。請記住,您必須處於命令模式(**按兩次 Esc**)。下表列出了一些在檔案中移動的命令:

序號 命令及說明
1

0 或 |

將游標定位在行首

2

$

將游標定位在行尾

3

w

將游標定位到下一個單詞

4

b

將游標定位到上一個單詞

5

(

將游標定位到當前句子的開頭

6

)

將游標定位到下一句的開頭

7

E

移動到空格分隔單詞的末尾

8

{

向後移動一個段落

9

}

向前移動一個段落

10

[[

向後移動一個節

11

]]

向前移動一個節

12

n|

移動到當前行中的第n

13

1G

移動到檔案的首行

14

G

移動到檔案的最後一行

15

nG

移動到檔案的第nth

16

:n

移動到檔案的第nth

17

fc

向前移動到c

18

Fc

向後移動到c

19

H

移動到螢幕頂部

20

nH

移動到螢幕頂部第nth

21

M

移動到螢幕中間

22

L

移動到螢幕底部

23

nL

移動到螢幕底部第nth

24

:x

冒號後跟一個數字會將游標定位在由x表示的行號上

控制命令

以下命令可以與 Control 鍵一起使用,以執行下表中給出的功能:

序號 命令及說明
1

CTRL+d

向前移動 1/2 螢幕

2

CTRL+f

向前移動一整屏

3

CTRL+u

向後移動 1/2 螢幕

4

CTRL+b

向後移動一整屏

5

CTRL+e

將螢幕向上移動一行

6

CTRL+y

將螢幕向下移動一行

7

CTRL+u

將螢幕向上移動 1/2 頁

8

CTRL+d

將螢幕向下移動 1/2 頁

9

CTRL+b

將螢幕向上移動一頁

10

CTRL+f

將螢幕向下移動一頁

11

CTRL+I

重新繪製螢幕

編輯檔案

要編輯檔案,您需要處於插入模式。從命令模式進入插入模式有很多方法:

序號 命令及說明
1

i

在當前游標位置之前插入文字

2

I

在當前行的開頭插入文字

3

a

在當前游標位置之後插入文字

4

A

在當前行的末尾插入文字

5

o

建立一個新行以在游標位置下方輸入文字

6

O

建立一個新行以在游標位置上方輸入文字

刪除字元

以下是一些重要的命令列表,這些命令可用於刪除開啟檔案中的字元和行:

序號 命令及說明
1

x

刪除游標位置下的字元

2

X

刪除游標位置之前的字元

3

dw

從當前游標位置刪除到下一個單詞

4

d^

從當前游標位置刪除到行首

5

d$

從當前游標位置刪除到行尾

6

D

從游標位置刪除到當前行尾

7

dd

刪除游標所在的行

如上所述,vi 中的大多數命令都可以加上您希望操作執行的次數作為字首。例如,2x 刪除游標位置下的兩個字元,而2dd 刪除游標所在的兩個行。

建議在繼續操作之前練習這些命令。

更改命令

您還可以更改 vi 中的字元、單詞或行,而無需刪除它們。以下是相關的命令:

序號 命令及說明
1

cc

刪除該行的內容,並將您置於插入模式。

2

cw

更改游標所在的單詞,從游標到單詞結尾的小寫w

3

r

替換游標下的字元。輸入替換內容後,vi 返回命令模式。

4

R

覆蓋從當前游標下字元開始的多個字元。您必須使用Esc鍵停止覆蓋。

5

s

將當前字元替換為您鍵入的字元。之後,您將處於插入模式。

6

S

刪除游標所在的行,並將其替換為新文字。輸入新文字後,vi 保持在插入模式。

複製和貼上命令

您可以使用以下命令將行或單詞從一個位置複製到另一個位置:

序號 命令及說明
1

yy

複製當前行。

2

yw

複製當前單詞,從游標所在的小寫字母 w 開始,直到單詞結尾。

3

p

將複製的文字放在游標之後。

4

P

將複製的文字放在游標之前。

高階命令

有一些高階命令可以簡化日常編輯,並允許更有效地使用 vi:

序號 命令及說明
1

J

將當前行與下一行連線。多個 j 命令可以連線多行。

2

<<

將當前行向左移動一個縮排寬度。

3

>>

將當前行向右移動一個縮排寬度。

4

~

切換游標下字元的大小寫。

5

^G

同時按下 Ctrl 和 G 鍵以顯示當前檔名和狀態。

6

U

將當前行恢復到游標進入該行之前的狀態。

7

u

這有助於撤消在檔案中進行的最後一次更改。再次鍵入“u”將重做更改。

8

J

將當前行與下一行連線。一個計數連線那麼多行。

9

:f

顯示檔案中當前位置的百分比和檔名,以及檔案的總行數。

10

:f filename

將當前檔案重新命名為 filename。

11

:w filename

寫入檔案 filename。

12

:e filename

開啟另一個名為 filename 的檔案。

13

:cd dirname

將當前工作目錄更改為 dirname。

14

:e #

在兩個開啟的檔案之間切換。

15

:n

如果您使用 vi 開啟多個檔案,請使用:n轉到系列中的下一個檔案。

16

:p

如果您使用 vi 開啟多個檔案,請使用:p轉到系列中的上一個檔案。

17

:N

如果您使用 vi 開啟多個檔案,請使用:N轉到系列中的上一個檔案。

18

:r file

讀取檔案並將其插入到當前行之後。

19

:nr file

讀取檔案並將其插入到第 n 行之後。

單詞和字元搜尋

vi 編輯器有兩種搜尋:字串字元。對於字串搜尋,使用/?命令。當您啟動這些命令時,剛剛鍵入的命令將顯示在螢幕的最後一行,您可以在其中鍵入要查詢的特定字串。

這兩個命令的區別僅在於搜尋發生的方向:

  • /命令向前(向下)搜尋檔案。

  • ?命令向後(向上)搜尋檔案。

nN命令分別重複上一個搜尋命令,方向相同或相反。某些字元具有特殊含義。這些字元必須以反斜槓 (\) 開頭才能作為搜尋表示式的一部分。

序號 字元 & 描述
1

^

在行首搜尋(在搜尋表示式的開頭使用)。

2

.

匹配單個字元。

3

*

匹配零個或多個前面的字元。

4

$

行尾(在搜尋表示式的結尾使用)。

5

[

開始一組匹配或不匹配的表示式。

6

<

這是用反斜槓轉義的表示式中用來查詢單詞結尾或開頭的字元。

7

>

這有助於檢視上面“<”字元的描述。

字元搜尋在一個行內搜尋以查詢命令後輸入的字元。fF命令僅搜尋當前行中的字元。f向前搜尋,F向後搜尋,游標移動到找到的字元的位置。

tT命令僅搜尋當前行中的字元,但對於t,游標移動到字元之前的位 置,而T向後搜尋該行到字元之後的位置。

設定命令

您可以使用以下:set命令更改 vi 螢幕的外觀和感覺。進入命令模式後,鍵入:set,然後鍵入以下任何命令。

序號 命令及說明
1

:set ic

搜尋時忽略大小寫

2

:set ai

設定自動縮排

3

:set noai

取消設定自動縮排

4

:set nu

在左側顯示帶有行號的行

5

:set sw

設定軟體製表符寬度。例如,您可以使用此命令將縮排寬度設定為 4 — :set sw = 4

6

:set ws

如果設定了wrapscan,並且在檔案底部找不到該詞,它將嘗試在開頭搜尋該詞

7

:set wm

如果此選項的值大於零,編輯器將自動“自動換行”。例如,要將換行邊距設定為兩個字元,您可以鍵入::set wm = 2

8

:set ro

將檔案型別更改為“只讀”

9

:set term

列印終端型別

10

:set bf

丟棄輸入中的控制字元

執行命令

vi 能夠在編輯器內執行命令。要執行命令,您只需要進入命令模式並鍵入:! command。

例如,如果您想在嘗試使用該檔名儲存檔案之前檢查檔案是否存在,您可以鍵入:! ls,您將在螢幕上看到ls的輸出。

您可以按任意鍵(或命令的轉義序列)返回您的 vi 會話。

替換文字

替換命令 (:s/) 使您可以快速替換檔案中的單詞或單片語。以下是替換文字的語法:

:s/search/replace/g

g代表全域性。此命令的結果是更改游標所在行上的所有出現。

重要說明

以下幾點將有助於您成功使用 vi:

  • 您必須處於命令模式才能使用這些命令。(隨時按兩次 Esc 鍵以確保您處於命令模式。)

  • 您必須小心使用這些命令。這些命令區分大小寫。

  • 您必須處於插入模式才能輸入文字。

廣告