利用 vi 開啟檔案:
( ) .在 UNIX 命令列執行下面的命令,可以以唯讀的模式開啟檔案axmi168.4gl。
view axmi168.4gl
( ) .在 UNIX 命令列執行 vi axmi169.4gl,可以編輯檔案 axmi169.4gl。
( ) .開啟檔案進入 vi 的編輯畫面後,如果畫面上出現了大量的亂碼,表示
該檔案有可能為二進位的可執行檔。
( ) .可以在 UNIX 命令列以 vi -b 編輯所有 UNIX 上的所有二進為可執行檔案,
並將裡面的所有資料以十六進位的方式顯示,以方便編輯該二進位檔案。
( ) .在命令列下 vi +/g_sql axmi168.4gl 和 vi -c /g_sql axmi168.4gl
的意義相同,都是開啟檔案後,搜尋檔案中的g_sql字串,並將游標移動到
找到的第一個 g_sql字串的位置上。
由命令模式(command mode)進入輸入模式(insert mode)的方式及其差異:
( ) .進入 vi 後,可以用下面的字母進入輸入模式(insert mode)
a, A, i, I, s, S, o, O, r, R, c, C
其中,字母 a, A 取自 Append 的字首,意即將資料輸入在某位置之後
字母 i, I 取自 Insert?的字首,意即將資料輸入在某位置之前
字母 o, O 取自 Open 的字首,加入新的一行
字母 s, S 取自 Substitude?的字首,意即將資料作替換
字母 r, R 取自 Replace?的字首,進入輸入模式中的取代模式(REPLACE)
字母 c, C 取自 Change?的字首,的命令,可以輸入所要取代的範圍
( ) .利用 a 進入輸入模式,則游標會自動往後移動一個字元。
( ) .利用 A 進入輸入模式,則游標會自動移動到游標所在英文單字之後的位置上。
( ) .利用 i 進入輸入模式,則游標會停在原位置上。
( ) .利用 I 進入輸入模式,則游標會自動移動到游標所在英文單字之前的位置上。
( ) .利用 s 進入輸入模式,則 vi 會自動幫你刪除游標所在的一個字母。
( ) .利用 S 進入輸入模式,則會自動刪除游標所在英文單字。
( ) .利用 o 進入輸入模式,則 vi 會自動幫你刪除游標所在的那一行裡的所
有資料,並且在該游標所在位置新增一行。
( ) .利用 O 進入輸入模式,則 vi 會自動在游標的上一行新增一行。
( ) .利用 r 進入輸入模式,則可以對已經存在的游標所在行文字作修改。
( ) .利用 R 進入輸入模式,可以對已經存在的所有文字作修改,直到按了 ESC 鍵。
( ) .利用 c$ 或 大寫字母 C,可以將游標所在位置資料到行尾全部刪除,並
進入輸入模式。
( ) .利用 c^( + 數字鍵 6) 或 c1(數字 1)可以將游標所在位置到行首
的所有資料都刪除,並進入輸入模式。
( ) .利用 cc 可以將游標所在行整行刪除,並進入輸入模式。
在命令模式(command mode)裡的基本操作:
游標控制部分
( ) .除了可以利用 h (往左), j (往下), k (往上), l (往右)控制游標移
動外,上可以透過鍵盤上的上下左右的箭頭按鍵,控制游標的移動。
( ) .100j 表示要將游標移動到第一百行的位置上。
( ) .100J 表示要將游標移動到第一百行的行首位置。
( ) .100G 表示要將游標往下移動一百行。
( ) . w 表示要將游標,往前移動一個英文單字。
( ) . b 表示要將游標,往後移動一個英文單字。
( ) . 1 (數字 1)將游標移動到該行的行首,所以和 ^(shift鍵+數字 6) 的功用
完全相同。
( ) . $ 將游標移動到該行的行尾。
( ) . /g_zxx 會尋找現在編輯中檔案裡所有的 g_zxx 字串。
( ) . ?g_zxx 會尋找現在編輯中檔案裡所有的 g_zxx 字串,
所以 /g_zxx 和 ?g_zxx 的作用完全相同。
( ) . mq 表示在該行設定一個書籤(mark)名稱為 q ,可以用於檔案中的快速移動
以及複製或刪除時,定區域之用。
( ) . 'q (單引號+q) 和 `q (反單引號 (esc鍵下面的那個按鍵)+q),都是用來
快速的將游標移動到書籤 q 的位置,功能完全相同,vi 特別提供了兩種
操作方式,好讓使用者選擇適合自己操作習慣的方式操作。
( ) . vi 一共提供了 a-z 這 26 個書籤名稱,以供使用者使用。
對文章內容進行整行刪除,複製,貼上以及移動的處理
( ) . x 會將游標所在的字元刪除。
( ) . dw 會刪除一個英文單字。
( ) . D 和 d0(數字 0) 將游標所在位置到行尾的資料刪除。
( ) . dd 將游標所在行整行刪除。
( ) . yw 會將游標所在的單字存入暫存區中。
( ) . "ayy 會將游標所在行的資料存入暫存區 a 中。
( ) . vi 提供了 a - z 共 26 個暫存區,供使用者儲存資料。
( ) .小寫字母 p 表示 paste 將預設暫存區的資料,貼到游標所在行的下一行
( ) .大寫字母 P 表示 paste 將預設暫存區的資料,貼到游標所在行的上一行
( ) . "zp 和 "zP 的功用完全相同,可以讓使用者將存放在暫存區 z 裡面的資料
貼到所編輯的文章中。
( ) . yy會將游標所在行的該行資料複製到暫存區 " 裡,所以
p 和 ""p的作用完全相同。
取消上一個動作與再次執行
( ) . u 和 U 取自 Undo ,代表取消上一個執行過的動作。
( ) . ctrl + r 則可以將利用 undo 取消的動作,再度重複執行。
複合鍵
( ) . ctrl + d ( d 表示 down ),往畫面下方捲動一整個畫面。
( ) . ctrl + b ( b 表示 backward ),往畫面上方捲動一整個畫面。
( ) . vi 為了方便使用者即使在輸入模式(Insert Mode)也能快速的移動畫面
所以,捲動畫面的複合鍵也可以在輸入模式中使用。
ex 模式(ex Escape Mode)的操作
( ) .:1,$s/g_zxx/g_zxy/ 是一個錯誤的命令,vi 無法執行。
( ) .:10,11m2 可以將第 10 行到第 11 行的資料移到第 2 行的位置。
ex 模式中取消上一個動作與再次執行
( ) .:u 和 :undo 可以用於取消上一個執行過的動作。
( ) .:r 和 :redo 可以用於重複執行,上一個被 undo 取消的動作。
( ) .當您同時編輯一個以上的檔案時,可以用 :buffers,列出所有編輯中的檔案。
( ) .:f (取自files 的字首) 也可以用於列出所有編輯中的檔案。
假設:buffers 裡的資料如下,請回答其後的問題:
:buffers
1 - "axmi168.4gl" line 1
2 % "axmi169.4gl" line 100
3 - "axmi170.4gl" line 0
4 #- "axmi171.4gl" line 20
Press RETURN or enter command to continue
( ) .其中的 % 表示現在正在編輯的檔案, # 表示上一個編輯的檔案。
( ) .可以利用 :e# 進行編輯上一個檔案,在這個例子裡,就是編輯檔名為
"axmi168.4gl" 的檔案內容。
( ) .除了可以透過 :e# 編輯上一個檔案之外,也可以透過 :b# 或 :vi# 達到切換
編輯檔案,回到編輯上一個編輯過的檔案。
( ) .在這個例子中 :e4 , :e# 以及 :e axmi171.4gl 的作用完全相同。
( ) .在這個例子中 :b4 , :b# 以及 :b axmi171.4gl 的作用完全相同。
( ) .在這個例子中 :vi4, :vi# 以及 :vi axmi171.4gl 的作用完全相同。
( ) .:bd4 表示將 buffer 中的編號第四的檔案由 buffers 裡面移除。
其中 bd 取自英文的 buffer delete ,意即從buffers裡移除
在這個操作範例中表示移除 axmi171.4gl 這一個檔案。
( ) .:n 表示要編輯現在檔案的下一個,:N 表示要編輯現在檔案的上一個,
所以,:2n 在這個例子中,表示要編輯第四個檔案。
( ) .:registers 可以列出檔案中所有設定過以及系統自行設定的的暫存區資料。
假設暫存區裡的資料如下,請回答其後的問題:
:registers
--- Registers ---
"" dsc business consulting
"1 vi is a text editor
"2 #Description :本程式的作業目的在於
"a LET g_zxx.zxx01 = g_zxx_t.zxx01
": b#
"% axmi168.4gl
"# axmi171.4gl
Press RETURN or enter command to continue
( ) .其中的 ": 為上一個在 ex mode 執行的命令。
( ) .""為 vi 預設的暫存區,只有透過 yw, y$, 或 yy 這樣沒有指定所要儲存的
暫存區的複製的命令時,才能將資料儲存到這個暫存區裡。
( ) . vi 總共提供了35個暫存區,供使用者任意使用,也就是 1-9, a-z 這
35個暫存區,只是一般常用為 a-z 這 26 暫存區。
( ) .:marks 可以列出所有使用者定義的記號名稱。
Visual Mode
( ) .vi 提供了三種 visual mode,可以用來設定要操作的區域,並以區域反白表示
可以很方便的設定要複製,刪除的區域
1.小寫字母 v -- 利用字元(character)作區域的標示動作(basic visual mode)
應用範例:CONSTRUCT g_wc on table_field 時,欄位位置的移動
2.大寫字母 V -- 利用行的觀念作區域的標示動作(visual line)
應用範例:不需透過ex mode 定義所要複製或刪除的區域,就可以
完成大區域的複製動作
3.複合鍵 ctrl + v -- 可以標示一整個方塊區域(visual block)
應用範例:.per 檔裡的欄位位置調整
( ) .利用visual mode定好區域之後,可以透過命令模式(command mode)
對該區域作刪除(d),複製到暫存區(y or "ay)。
( ) .利用visual mode定的區域,沒有辦法透過 ~ ,改變其中英文字母的大小寫。
( ) .利用visual block定的區域,沒有辦法透過命令模式中的 c (change) 作修改。
輸入控制碼
( ) .在 za 檔,用來作為分隔的 ^A 可以透過複合鍵 ctrl+v+a 輸入控制碼 ^A。
( ) .要刪除 windows 附加於檔尾的 ^M,可以利用複合鍵 ctrl+v+m 輸入 ^M
並利用 :%s/^M//g,將檔案中所有的 ^M 通通刪除。
--
Sincerely C.S.Julius
Think Do, I Will
富翔資訊管理顧問有限公司