
- Unix / Linux 初學者指南
- Unix / Linux - 首頁
- Unix / Linux - 什麼是 Linux?
- Unix / Linux - 開始使用
- Unix / Linux - 檔案管理
- Unix / Linux - 目錄
- Unix / Linux - 檔案許可權
- Unix / Linux - 環境
- Unix / Linux - 基本實用程式
- Unix / Linux - 管道與過濾器
- Unix / Linux - 程序
- Unix / Linux - 通訊
- Unix / Linux - vi 編輯器
- Unix / Linux Shell 程式設計
- Unix / Linux - Shell 指令碼
- Unix / Linux - 什麼是 Shell?
- Unix / Linux - 使用變數
- Unix / Linux - 特殊變數
- Unix / Linux - 使用陣列
- Unix / Linux - 基本運算子
- Unix / Linux - 決策
- Unix / Linux - Shell 迴圈
- Unix / Linux - 迴圈控制
- Unix / Linux - Shell 替換
- Unix / Linux - 引號機制
- Unix / Linux - I/O 重定向
- Unix / Linux - Shell 函式
- Unix / Linux - 手冊頁幫助
- 高階 Unix / Linux
- Unix / Linux - 標準 I/O 流
- Unix / Linux - 檔案連結
- Unix / Linux - 正則表示式
- Unix / Linux - 檔案系統基礎
- Unix / Linux - 使用者管理
- Unix / Linux - 系統性能
- Unix / Linux - 系統日誌
- Unix / Linux - 訊號和陷阱
Unix/Linux - vi 編輯器教程
本章我們將瞭解 vi 編輯器在 Unix 中的工作方式。在 Unix 中有很多方法可以編輯檔案。使用螢幕導向文字編輯器vi編輯檔案是最佳方法之一。此編輯器允許您在檔案中與其他行一起編輯上下文中的行。
vi 編輯器的改進版本,稱為VIM,現已推出。這裡,VIM 代表Vi IMproved(vi 改進版)。
vi 通常被認為是 Unix 編輯器的實際標準,因為:
它通常在所有 Unix 系統版本中都可用。
它的實現跨平臺非常相似。
它需要的資源很少。
它比其他編輯器(如ed或ex)更友好。
您可以使用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 命令。當您處於命令模式時,鍵入ZZ。ZZ命令的工作方式與: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 編輯器有兩種搜尋:字串和字元。對於字串搜尋,使用/和?命令。當您啟動這些命令時,剛剛鍵入的命令將顯示在螢幕的最後一行,您可以在其中鍵入要查詢的特定字串。
這兩個命令的區別僅在於搜尋發生的方向:
/命令向前(向下)搜尋檔案。
?命令向後(向上)搜尋檔案。
n和N命令分別重複上一個搜尋命令,方向相同或相反。某些字元具有特殊含義。這些字元必須以反斜槓 (\) 開頭才能作為搜尋表示式的一部分。
序號 | 字元 & 描述 |
---|---|
1 |
^ 在行首搜尋(在搜尋表示式的開頭使用)。 |
2 |
. 匹配單個字元。 |
3 |
* 匹配零個或多個前面的字元。 |
4 |
$ 行尾(在搜尋表示式的結尾使用)。 |
5 |
[ 開始一組匹配或不匹配的表示式。 |
6 |
< 這是用反斜槓轉義的表示式中用來查詢單詞結尾或開頭的字元。 |
7 |
> 這有助於檢視上面“<”字元的描述。 |
字元搜尋在一個行內搜尋以查詢命令後輸入的字元。f和F命令僅搜尋當前行中的字元。f向前搜尋,F向後搜尋,游標移動到找到的字元的位置。
t和T命令僅搜尋當前行中的字元,但對於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 鍵以確保您處於命令模式。)
您必須小心使用這些命令。這些命令區分大小寫。
您必須處於插入模式才能輸入文字。