2007年12月5日 星期三

vi 編輯器簡介

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

vi 編輯器簡介
 
vi 是 Linux 系統內建的全螢幕編輯器,功能強大,而且所有的 UNIX 系統上都有,操作方法也相同,是編輯器中的「國際語言」。但是對於習慣使用 word、記事本這些圖形介面編輯器的使用者而言,不是十分容易上手,不過熟悉以後,用起來十分順手,對於程式設計者而言,更是最佳幫手。
要深入學習 vi,可參考 O'Reilly 出版的「精通 vi」(中文版)一書。
啟動 vi
在提示號下鍵入「vi」,可以看到以下畫面:

這個時候,你還無法輸入任何內容,先按「:q」退出。
vi 編輯器的三種模式
1. Normal mode (指令模式 command mode,以下簡稱 c-mode):
進入 vi 時處於 c-mode,只能下按鍵指令,不能輸入文字。指令的使用方式將於後面介紹。
2. Insert mode (輸入模式 i-mode):
在 c-mode 下按 a, i 等指令就會進入 i-mode,此時才可以鍵入文字編輯檔案,a是 append,由游標後方開始編輯,i 是 insert,由游標前方開始編輯,按 Esc 又會回到 c-mode。
3. Ed mode (命令列模式 command-line mode,e-mode):
在 c-mode 下按冒號「:」就會進入 e-mode,左下角會有一個冒號:出現可下 ed(linux 下的行編輯器名稱) 指令。下完指令後,或是按 Esc 回 c-mode。
再次啟動 vi
vi test.txt
會打開 test.txt 檔案,若檔案不存在,則會開一空白新檔案。以 vi 編輯的皆為純文字檔,可在螢幕左下角看到:

此時在 c-mode 下,無法輸入文字,按「a」鍵,轉為 i-mode,即可開始輸入,可以看到左下角提示「INSERT」,表示現在正在 i-mode 下。

存檔與退出:按「Esc」鍵,由輸入模式回到指令模式,接著按冒號「:」進入命令列模式,此時左下角會出現冒號與閃爍游標,此時可以在冒號後輸入以下指令:
w: 存檔(write)。注意在編輯過程中所有內容只存在暫存器裡,必須在 c-mode 下了這個「:w」指令才會存檔。
e: 重新編輯(edit)。
q: 退出(quit),如果檔案經過修改而沒有存檔,會出現錯誤訊息:

此時又會回到 c-mode,如果要強制退出,鍵入「:q!」(此次作的修改會流失),要存檔後退出,則鍵入「:wq」。同樣地,如果有修改過而下了「:e」指令,也會出現類似錯誤訊息,此時若按「:e!」強迫重新編輯,則此次做的修改亦會流失,回到上次存檔後的狀況。
示範操作 1. (1.8M) 無壓縮檔(13M)
示範操作 2. (1.8M) 無壓縮檔(13M)
(這是壓縮後的 AVI 檔,如果是用 Microsoft Media Player 的話,請升級至 9.0 版,用 7.0 有時候會有問題)
移動游標:
在編輯檔案的過程中,經常需要在 c-mode 下,將游標移動到要修改現有文字或是插入新文字的地方,在 vi 中有許多移動游標的方式:
h: 向左一個字元
l: 向右一個字元
k: 向上一行
j: 向下一行
數字 0: 移到該行行首
$: 移到該行行尾
w: 移到下一個字(字的定義是以兩個空白字元中間為一個字)
b: 移到前一個字
Ctrl-f: 向後翻一頁
Ctrl-b: 向前翻一頁
Ctrl-d: 向後翻半頁
Ctrl-u: 向前翻半頁
z: 將游標所在的位置移到螢幕中的第一行
H: 將游標移到螢幕頂端那一行
M: 將游標移到螢幕中央那一行
L: 將游標移到螢幕底端
G: 移到檔案底端
G: 移到第 行,例如 5G 即會移到第五行
 
這些移動游標的命令,都可以在前面加上數字,表示「重複這個動作 n 次」。如「5 Ctrl-F」(先按 5,再同時按 Ctrl-F),則會向後翻五頁。
示範操作 3. (1.8M) 無壓縮檔(6.4M)
示範操作 4. (6.2M) 無壓縮檔(67M)
 
基本編輯指令:
 
進入編輯模式,插入新文字:a, A, i, I, o, O
a: 由游標後開始插入文字
A: 由游標所在該行行尾輸入文字
i: 由游標前開始插入文字
I: 由游標所在行頭輸入文字
o: 游標下方出現一行新的空行,開始插入文字
O: 游標上方出現一行新的空行,開始插入文字
 
練習:以 vi 建立一個新檔案,用「i」指令進入輸入模式,輸入一些文字後存檔離開。
 
 
進入編輯模式,更改舊文字:c, C
cw: 修改從游標到所在單字的結尾
c2b: 修改從游標往前的兩個單字
c$: 修改從游標到本行結尾
c0: 修改從行頭到游標位置
cc: 修改游標所在整行
C: 跟 c$ 效果相同
 
保持在命令模式,更改一個字元:r
rK: 將游標所在位置之字元以「K」置換
 
保持在命令模式,刪除舊文字:d, D
dw: 刪除從游標位置到該單字之結尾
dd: 刪掉一整行
5dd: 刪掉五行
d0: 從游標往前刪到該行開頭
d$: 從游標往後刪到該行結尾
D: 效果跟 d$ 相同
 
保持在命令模式,刪除一個字元:x
x: 刪除游標所在的字元
7x: 刪除從游標開始的連續七個字元(含游標所在處)
X: 刪除游標前一個字元
4X: 刪除游標前連續四個字元(不含游標所在處)
 
保持在命令模式,恢復前一個動作:u, U
u: 即 undo,取消前一個動作
U: 將游標所在該行恢復原狀
 
將兩行合併:J
按下大寫「J」,則游標所在的下一行將會接到游標所在的這行後面,合併成為一行。
 
暫存區:p, P, y
p: 被刪除的內容,會被存在暫存區中,按一下「p」,被刪除的部分將會被貼上。如果刪除不到一行的內容,則按「p」被刪除的內容會被貼在游標之後,如果刪除整行或數行,則會被貼在游標所在的下一行。
P: 暫存區內容會被貼在游標前面或前一行。
y: 複製文字至暫存區中,組合鍵使用方法類似「d」:
yw: 複製從游標位置到該單字之結尾
yy: 複製一整行
5yy: 複製五行
y0: 從游標往前複製到該行開頭
y$: 從游標往後複製到該行結尾
Y: 效果跟 y$ 相同
*利用 y、d與 p的組合即可做出剪下、複製、貼上的動作。
 
重複前一個動作:.
按下句點「.」,可重複前一個動作。
 
搜尋與取代:
在 c-mode 中鍵入:
 
/<字串>
 
游標將移至該字串下一次出現之處。如果接著按「n」鍵,則會再找下一個,如果按「N」鍵則會往上尋找上一個。
若開始時鍵入
 
?<字串>
 
則會往前尋找,接著按「n」鍵,則會再找上一個,如果按「N」鍵則會往後尋找下一個。
 
在命令列模式中,搜尋檔案中所有出現的字串「string1」並將之全部取代為「string2」:
:g/string1/s//string2/g
 
 
一個不錯的 vi 使用教學參考網站
 
練習:找到系統中「gpl-license」這個檔案,拷貝到你的資料夾中,並以這個檔案來練習上述的各個編輯功能。
練習:編輯一文字檔內容如下:
 
#include
int main(void)
{ printf("Hello, world!\n");
return 0;
}
 
練習:修改上列檔案,將 "Hello, world!\n" 改成 "This is my first C program!\n"。
練習:將上述檔案傳送到你的 PC 上(提示:使用的軟體為 WINSCP,請上網找到這個軟體,並自行安裝使用)
 

1 則留言:

admin 提到...

可以隨使都來查..方便多了

EasyReadMore