vi 為 UNIX 系統上很普遍之Text Editor。茲整理其常用之編輯命令於下,若資料有誤或任何問題請與王秀英小姐連絡。在編輯檔案時若遭中斷,可用vi -r filename 進入vi 救回未儲之編輯資料。
參考資料:
任湘俠,陳文賢譯,UNIX System V 實用指南,儒林圖書公司,第 6 章。

一.vi 之狀態(Mode)

Commond Mode	可下達命令狀態。剛進入vi 時即為此狀態。
Input Mode	可打字狀態
Last line Mode	

狀態之轉換
[ESC]	由Input mode 換成Command mode
:	由Command mode 換成last line mode


二.Command mode command

(1) Command mode →Input mode
i	由游標位置前插入文字
I	由本列最前面(column 0) 插入文字
a	由游標位置後插入文字
A	由本列最後面插入文字
o	在本列下面插入新列
O	在本列上面插入新列

(2) Replace Command
r	以一個字元取代一個字元
	例如ra 表將游標所在位置字元取代為a
R	取代字元直到按[ESC] 止
s	以多個字元取代一個字元
	例如sabcdef[ESC] 表將游標所在位置字元取代為abcdef
cw	取代一個word

(3) Delete Command
(註:以下之n 代表次數,若n =1 則可省略。例如dd 表刪除本列。)
nx	刪除含游標所在位置以下n 個characters
d[Enter]	刪除游標列及下一列
ndd	刪除含游標列以下n 列
d0	由游標處往前刪除直到本列最前面(第0 column)
d$	由游標處往後刪除直到本列最後面
dnb	由游標處往前刪除n 個words
dnw	由游標處往後刪除n 個words
dn}	由游標處往前刪除n 個段落
dn{	由游標處往後刪除n 個段落
dL	向後刪除至螢幕上最後一列
dH	向前刪除至螢幕上最上一列
dG	刪除至檔案結尾
d1G	刪除至檔案開頭

以上delete 均會將刪除資料存在buffer 中

(4) Undo Command
u	前一次修改無效
U	回到本列被修改前狀態

(5) Search Command
/字串	向後尋找字串
?字串	向前尋找字串
/\?	尋找問號(?)
/^字串	尋找以"字串" 開頭之列
/字串$	尋找以"字串" 結尾之列
/\<字串	尋找以"字串" 開頭之word
/字串\>	尋找以"字串" 結尾之word
/\[abc]	尋找含a  或b  或c 的字
/\[0-9]	尋找含0 到9 的字
n	重複上一次搜尋
N	重複上一次搜尋,方向相反
%	尋找對稱括弧

(6) Cursor Command

n	往右移 n 個Character
nl		往右移 n 個Character
n→		往右移 n 個Character

n←		往左移 n 個Character
nh 		往左移 n 個Character

nW 		往右移 n 個Word,跟在字後面的標點視為同一個字
nw		往右移 n 個Word,標點視為另一個word

nB		往左移 n 個Word,跟在字後面的標點視為同一個字
nb		往左移 n 個Word,標點視為另一個word

n↓	
n+		往下移 n 行
nj		往下移 n 行
n[Enter]	往下移 n 行

n↑		往上移 n 行
n-		往上移 n 行
nk		往上移 n 行

n}  		往下移 n 個段落(以空白行隔開)
n) 		往下移 n 個語句
n{ 		往上移 n 個段落(以空白行隔開)
n(		往上移 n 個語句

H		游標移至左上角
L		游標移至左下角
M		游標移至螢幕中間
Ctrl-D		資料上移半頁
Ctrl-U		資料下移半頁
Ctrl-F		資料上移一頁
Ctrl-B		資料下移一頁
G		游標移至最後一行
:$		游標移至最後一行
gnj		游標往下移n行
gnk		游標往上移n行

(7) Other Command
J	將下一列文字連接至本列未(joint line)
[Ctrl]g	顯示目前編輯狀況(總共 ? 行,目前在第 ? 行)
.	重複上一次命令
P	將 buffer 中資料貼至游標前面
p	將 buffer 中資料貼至游標後面
nyy	copy 目前這一列始往下 n 列內容至 buffer 中
nyw	copy 游標所在位置始往下 n 個 word 至 buffer 中
ZZ	存檔


三.Last line mode Command

:n	將游標移至第n行
:e!	放棄前面所有編輯動作,重新自disk 中load 目前所編輯的檔案
:f	顯示目前編輯狀況(總共 ? 行,目前在第 ? 行)
:q	離開目前編輯環境。若檔案曾修改,系統會提示User 存檔或用q! 離開。
:q!	強制離開vi 環境
:r filename	自disk 中讀取檔案filename 加入目前游標所在列之後
:set nu	在每一行前顯示行號
:set nonu	不顯示行號
:[scope]s/search-string/replace-string/
	取代字串,在[scope] 範圍中將search-string 取代為replace-string 。
	只取代每一列的第一個search-string。
	有關[scope] 說明如下:
		不指明,表在目前這一列
	n1, n2 	自n1 列至n2 列
	1,.	自第1 列至目前這一列
	.,$	自目前這一列至最後一列
	1,$	自第1 列至最後一列
	.,.+n	自目前列至往下n 列
:[scope]s/search-string/replace-string/g
	同上。取代每一列中所有search-string 。
:w filename	將目前編輯資料存至disk 中檔案filename,若filename 不給,則存回原叫修檔名。
:wq filename	同上。存檔後離開vi 環境。
:w! filename	強制寫檔。
:x	寫檔並離開vi 環境(同Command mode 中之ZZ)