vi是一種文字模式全螢幕文字編輯軟體(Text Editor)。對初學者來說,vi是個很難用的工具,一般需要2個星期的時間才能得心應手。之所以介紹vi,其理由如下:
- vi是Unix上的標準文字編輯軟體,不管哪個版本的Unix系統都會提供。想靠開發Unix的軟體混飯吃,必須熟練vi。
- vi難用的原因之一,是只有文字模式,不能使用滑鼠。但也正因為如此,熟練者不用移動手去操作滑鼠,寫起程式來特別快.
- vi難用的原因之二,是同一個畫面分成三種操作模式,每種模式又可下達複雜指令,初學者常會搞混。但vi所提供的複雜指令,對寫程式特別好用,一經試用便覺威力無窮。
另一個跟vi很像的軟體叫vim,算是vi的加強版,vi有的功能vim都有,還可以使用游標鍵。此處只介紹vi。
vi在操作上分成下面三種模式,你若搞不清楚現在在哪種模式,只用按鍵盤左上角的ESC鍵,就可以跳到Command Mode - Command mode( c-mode):
您一進入 VI 就是處於 c-mode,只能下按鍵指令,不能輸入文字。
這些指令可能是游標移動的指令,也可能是編輯指令或尋找替換指令。 - Input mode(i-mode):
按 i 就會進入 i-mode,此時才可以鍵入文字,寫您的文章,按 Esc 又會回到 c-mode。 - Ed mode(command-line mode,e-mode):
按冒號:(別忘了 Shift 鍵)就會進入 e-mode,左下角會有一個冒號:出現,可下 ed 指令。ed是Unix裡另一種非常古老的行模式Text Editor。所謂行模式,是一次只能觀看編輯一行文字,之所以會有這種模式,是因為遠古時代終端機的游標只能往下走(就像DOS視窗!),所以編輯軟體就只好這樣設計了。vi是由ed改良來的,因此保有ed的指令。
也是按 Esc 回 c-mode。反正正常狀態都是處於 c-mode,這樣才不會把您辛苦打字的文章給隨便搞亂掉。 - 開檔:
vi test.txt
或進入 vi 後,使用冒號命令 :e test.txt,就可以編輯 test.txt 這個檔。
如果 test.txt 不存在的話,就會開一個以 test.txt 為名的新檔案。
5.游標移動:
c-mode之下:h向左,j向下,k向上,l向右,Ctrl-F下一頁,Ctrl-B上一頁,Ctrl-G顯示檔案的狀態,$到行尾,^到行頭
e-mode之下:輸入數字n就會移到第n行
6. 編寫文件:
在c-mode底下可用的命令:
u: undo上一個命令
o: 在此行的後面新增一行
O: 在此行的前面新增一行
i: 在游標的前一個位置插入字元
I: 在此行的開頭插入字元
a: 在游標的後一個位置插入字元
A: 在此行的最後面加入字元
r: 更改游標所在的字元
R: 覆蓋游標後的字元(一直打字就一直蓋掉,直到按ESC)
cl: 改掉一個字元
cw: 把游標所在的一整個字改掉(此字最後一個字母會變成$, 直到按ESC前的所有輸入都會用來改掉這一個字)
cc: 改掉游標所在的一整行
x: 刪除一個字元
dw: 刪除一整個字
dd: 刪除一整行
D: 刪除到行尾
yy: 複製一整行
yw: 複製一整個字
Y: 複製一整行
p: 貼在游標後(下)
P: 貼在游標前(上)
.: 重複上一個編輯命令
/: 向下搜尋(會在螢幕左下角出現/符號,只要輸入要找的字然後Enter即可)
?: 向上搜尋
n: 搜尋下一個
N: 搜尋上一個
以上命令除uoOD以外,前面都可以加上數字,表示此命令執行的次數,如5dd表示刪除五行,5yw複製五個字
7.e-mode下面的命令:
如果您寫好您的文件,就可以按Esc回到 c-mode,然後按:到e-mode,在e-mode底下的命令為
w: 存檔
w 檔名: 另存到檔名
q: 離開vi
wq: 存檔然後離開
q!: 強迫離開vi
w!: 強迫存檔
x: 存檔後離開, 但若檔案沒有修改,則不會存檔
!gcc test.c: !可用來呼叫shell執行命令, 此例中呼叫gcc編譯test.c
shell: 呼叫shell(回到命令列), 在shell中打exit則回到vi
r 檔名: 將檔名的內容讀到游標所在的行後
1,$s/abc/def/g: 由第一行到最後一行將所有的abc取代成def,若最一個/g不打, 則只取代每行的第一個
1,10s/abc/def/g:由第一行到第十行將所有的abc取代成def
基本Unix操作指令df 顯示系統可使用空間
ls 顯示資料檔案, ls -l可顯示更多的資訊
cp 複製檔案 cp file1 file2
mv 更改檔案名稱 mv file1 file2
rm 刪除檔案名稱 rm file1
passwd 更改password
mkdir 建立目錄 mkdir 目錄名稱
rmdir 刪除目錄 rmdir 目錄名稱
man 找出相關指令的說明,類似help的功能 man finger