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)