學習vi和vim編輯器(5):越過基礎的藩籬
本章將對之前學習的編輯命令如" c "," d ",“ y ”等命令進行總結,並學習一些新的知識:其他進入vi的方法,利用緩衝區來儲存拖曳或刪除的文本以及如何在檔案中做標記。
更多命令的組合:
之前已經不止一次講過,對於" c ", " d "," y "等命令具有"command""TextObject"的使用形式,即這些編輯命令可以與游標移動命令進行組合使用,通過游標移動命令來表示編輯命令將會影響的文本範圍。現在將這些組合命令進行簡單的總結,也是對之前學習知識的回顧:
更改 刪除 複製 從游標位置到......
cH dH yH 當前螢幕頂端
cM dM yM 當前螢幕中間
cL dL yL 當前螢幕底端
c+ d+ y+ 下一行
c5| d5| y5| 本行第五列
c2) d2) y2) 往下第二個句子(檔案結束方向)
c{ d{ y{ 往前一個段落(檔案開始方向)
c/pattern d/pattern y/pattern 往下pattern第一次出現的地方
cn dn yn 下一個模式
cG dG yG 到檔案結尾
c9G d9G y9G 到檔案第九行
開啟vi的選項:
之前已經講過 "vi filename"這種簡單的方法來使用vi編輯器開啟檔案,還有很多好用的vi命令開啟選項。前進到特定位置:可以在命令列中指定開啟檔案後游標第一次移動的方式,例如根據行號或搜尋結果移動。
vi +n file:在第n行開啟檔案;
vi + file:在最後一行開啟file;
vi +/pattern file:在第一個出現pattern的地方開啟file;
這些命令中可以使用" + ",也可以使用" - ",一般來說,兩種方法都能接受,但實際測試時,發現用" - "會出現錯誤,如所示,是不是書上又講錯了?暫時先記錄下來吧。
這些vi編輯器的開啟選項對程式員來說非常有用。例如當編譯一個源檔案時出錯時,編譯器都會把編譯出錯的相關行號資訊顯示出來。因此我們可以直接在開啟檔案時就定位當相應的行上,如所示:
而且,當我們在編輯檔案的時候,如果正好編輯到一半而不得不暫時離開時,可以在當前位置用某個模式標記起來,如"HERE",當我們回來時,只需要"vi +/HERE file"即可。<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+1ru2wcSjyr2jur/J0tTS1Na7tsHEo8q9tPK/qtK7uPbOxLz+o6zV4tH5vs2yu7HYtaPQxLK7vq3S4rzk0N64xM7EvP7By6O6PGJyPgo8L3A+CjxibG9ja3F1b3RlPgo8cD52aSAtUiBmaWxlbmFtZaO7PC9wPgo8cD52aWV3IGZpbGVuYW1lo7s8L3A+CjwvYmxvY2txdW90ZT4KPHA+dmlld8P8we7Sss/xdmnD/MHuo6zG5Mq1dmlld9a7ysd2abXEwbS906O6PC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20141117/2014111709271748.png" alt="\">
如果在唯讀模式中想要修改檔案並儲存修改,則需要使用" :w! "。驚嘆號就代表覆蓋掉唯讀模式。
恢複緩衝區:當編輯檔案時,如果系統發生了錯誤,此時自從上一次存檔以來所做的檔案改動都會消失,可以使用-r選項恢複系統死機時的編輯緩衝區。
vi -r 或者 ex -r:得到系統儲存下來的所有檔案清單;
vi -r filename:可以恢複檔案名稱對應的編輯緩衝區;
:pre:強制系統即使在沒有死機時也儲存緩衝區;
善加利用緩衝區:
之前已經提過,對於最後一次刪除或拖曳的內容(刪除和拖曳操作共用相同的緩衝區)會被儲存到緩衝區中,可以使用放置命令將這些文本放回到檔案中。
同時,vi編輯器會將最後九次刪除操作儲存到有編號的緩衝區中,可以恢複這些緩衝區中的任何一個。但是只有以行為單位的刪除本文才會被儲存到編號緩衝區中,對於刪除一行中的一部分,或者單詞的一部分等,都不會被儲存到編號緩衝區中,此時只能在刪除操作發生之後立即用p命令進行恢複。
在這些編號緩衝區中,最後一次刪除的內容儲存在緩衝區1,倒數第二次刪除的內容儲存到緩衝區2,依此類推。如果要恢複某個編號緩衝區內容,首先輸入 "(雙引號),再指定緩衝區編號,再使用放置命令,例如 "1p。
如果不確定哪個緩衝區中存放了要恢複的內容,不需要不停的輸入 "np進行嘗試。相反,因為在p命令之後使用重複命令" . "時,會自動增加緩衝區的編號,再結合撤銷命令(u),即可按編號逐步查看每個緩衝區的內容,從而進行正確的恢複,命令形式如下:"1pu.u.u.u. 依此類推。
同時,vi可以將拖曳或刪除的文本放在以字母為標號的命名緩衝區中,這些文本可以儲存到26個緩衝區(a-z)中,並且可以在編輯會話的任何時候使用放置命令來恢複這些文本。如果某個命名緩衝區中已經存放了文本,此時繼續向該緩衝區中放置文本,則新的文本會覆蓋該緩衝區中已經存在的文本,即之前的文本會消失。
要將文本儲存到命名緩衝區中,需要在拖曳或刪除命令之前加上雙引號(")以及緩衝區的名字(a-z),例如:"add即將刪除的該行內容儲存到命名為a的緩衝區中。恢複時,只需要輸入雙引號,加上緩衝區的名字(a-z),以及放置命令p,即可恢複某個命名緩衝區的內容,如"ap。當使用大寫字母指定緩衝區時,拖曳或刪除的文本會附加到相應的緩衝區中。
對一處做標記:
可以在文本的某處做一個看不見的書籤,然後在別處編輯時,可以根據相關的命令回到相應的書籤位置。需要注意的是,標記只在當前編輯會話中有效,並不會儲存在檔案中。
mx:將當前位置標記為x(x可以是任何字元);
"x:(單引號)將游標移動到標記x所在行的第一個字元;
`x:(反引號)將游標移動到以x標記的字元處;
``:(兩個反引號)在移動位置之後,回到上一個標記;
'':(兩個單引號)回到上一個標記所在行的開頭;
本章vi編輯器命令總結:
vi +n,vi +,vi +/pattern,vi -R,view, vi -r,:pre,"1p,"ayy,"ap,mx,'x,`x,``,''。