學習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"即可。

只讀模式:可以以只讀模式打開一個文件,這樣就不必擔心不經意間修改文件了:

vi -R filename;

view filename;

view命令也像vi命令,其實view只是vi的鏈接:

如果在只讀模式中想要修改文件並保存修改,則需要使用" :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,``,''。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章