編輯與修改

在前面有介紹過一些用來修改文章的指令, 如【 x 】、【 s 】、【 p 】和 ddyy 等。 在這上一篇文章也有示範過把【 d 】和巡弋指令結合的用法, 接下來要說的是關於這部分。

基本

最簡單的指令就是【 x 】和【 X 】。 【 x 】是刪除游標上面的字元,相當於 Delete;【 X 】則是刪除左邊的字元, 相當於 Backspace。 如果前面加上一個正整數 n,則相當於同一個指令按 n 次。

【 s 】會刪除游標所在的字元,然後在被刪除的位置進入 input mode; 【 S 】則是刪除游標所在的列,然後則那一列的開頭進入 input mode。 如果前面加上一個正整數 n 則代表刪除的動作做 n 次, 然後再進入 input mode。

dd 會刪除一整列; yy 則會複製一整列。 如果再前面加上一個正整數 n, 則代表刪除或複製 n 列。

當你刪除或複製文字以後,文字都會複製一份放在暫存區中。 如果你按【 p 】或【 P 】,資料便會放入文章中。

如果你之前輸入 2dd 刪除了兩列文字, 那你按【 p 】這兩列文字便會再放入文章中, 但是你如果是連按兩次 dd, 那你只有第二次被刪除的那一列會回到文章中。 所以在指令前面加上正整數 n 並不完全等於同一個指令按 n 遍。

如果你的刪除或複製動作不是以列為單位, 那當你按【 p 】或【 P 】時便會在游標的右邊或左邊插入文字。 如果是以列為單位,那 vi 便會自動換列, 在游標的下一列或上一列插入文字。

【 d 】、【 y 】、【 c 】

【 d 】、【 y 】、和【 c 】都是編輯文章的指令, 但是這些指令後面都要再跟一些其他的指令。 【 d 】是刪除,【 y 】是複製,【 c 】是修改。

前面也有提到 dd 會刪除一列,yy 複製一列, 由此可推想,cc 會刪除一列文字,進入 input mode。

這三個指令後面都可以加上巡弋指令, 代表從游標目前的位置動作到巡弋指令移動到的位置。

除了巡弋指令以外,還可以加上移動指令。 例如 d3l 表示向右邊刪除三個字元, d8G 表示由目前的位置刪除到第八列, 向上刪除或向下刪除則要看你游標的位置決定﹝這可不會發生 wrap ﹞。

暫存區

當你刪除文字的時候,vi 會自動把文字儲存到暫存區中, 這些暫存區分別以 1~9 來編號。 當你刪除文字時,被刪除的文字便會放到暫存區 1 中, 而原來放在暫存區的文字便會存放到下一個暫存區, 而 9 號暫存區的文字便會徹底消失。

除了上述的九個暫存區,還有一個暫存區 0。 這個暫存區是用來放你最近一次的複製, 當你按【 p 】時,vi 會自動在暫存區 0 和暫存區 1 之間選一個放到你的文章中。 當然 vi 選的永遠是你最近一次刪除或複製的文字。

要使用暫存區,先按雙引號【 " 】然後再按暫存區的編號, 再下指令【 p 】,這樣被指定的暫存區的文字便會印出來。

之前的暫存區是用來儲存被刪除的文字, 當你複製一段文字時,並不會被放到這些暫存區中。 但是 vi 另外提供了從 a-z 的二十六個暫存區讓我們使用, 這些暫存區只要使用者沒有去動它們,裡面的文字就不會被變更。 例如下指令 "ay8G 則暫存區 a 便會放入從目前的位置到第八列的文字。

至於 A-Z 所指的暫存區和小寫字母是相同的, 當你下指令【 p 】時,大小寫效果完全一樣。 當你要把文字放入暫存區時,大寫字母表示把新的文字接到暫存區原有的文字的尾巴。 例如先下指令 "a3yy 會複製三列文字到暫存區 a 中, 再下指令 "A2dd 會刪除兩列文字,並把被刪除的文字接到暫存區 a 的後面。 所以暫存區 a 裡面就應該要有五列文字。

編輯多個檔案

有的時候,你會希望將一個檔案的文字複製到另外一個檔案之中。 在 command mode 中,下指令 :vi file:e file, vi 將會開啟檔案 file

在開啟一個新的檔案之前,vi 會先將舊的檔案關閉。 只要你修改過檔案內容而尚未紀錄,vi 會拒絕為你開啟另一個檔案。 如果你想要放棄自己所做過的修改, 你可以下指令 :vi! file:e! file, 這樣 vi 就會放棄你之前的修改,進入另一個檔案。

只要你不離開 vi,不管你在幾個檔案之中切換, 暫存區中的資料都不會消失。因此你可以將檔案的文字放到暫存區中, 然後切換到另一個檔案,再複製上去。

[ 前一節 ]‧[ 後一節 ]‧[ 回目錄 ]


製作人、
修改記錄
李易霖 (02/7/29) ---