標籤:vi編輯器 編程工具
接著上一篇文章,繼續講解vi編輯器中一些簡單的文本編輯命令。這一篇文章主要是文本的刪除,複製,移動等命令。
刪除文本:
正如上一篇文章中講過的,對於刪除命令("d")也具有“(command)(TextObject)”的使用形式,其中command代表的是如刪除("d"),替換("c")等命令,而TextObject指的是游標移動命令,代表command影響的文字物件範圍。只要記住了這一點,接下來的刪除命令的組合就不需要記了:
dw:刪除游標所在的位置到該單詞的結尾(w就是游標移動命令中的向後移動一個單詞),注意該命令會將這個單詞之後的空白也刪除;
de: 和dw命令一樣,但是不會刪除單詞之後的空白;
dE: 刪除到包括標點符號在內的單詞結尾;
d$: 刪除游標所在位置到該行結尾處,和D命令效果一樣;
d0: 刪除游標所在位置到該行開始處;
dd: 無論當前游標處於該行的哪個位置,都直接刪除一整行;
d命令和游標移動命令的組合不只這麼多,這裡就不一一舉例了,只要理解這種組合的使用形式,就根本不需要記。這裡補充兩個游標移動命令:" e "和" E " ,這兩個命令都將游標移動到單詞結尾,但是" e "命令移動到單詞本身結尾,而" E "命令移動到該單詞的標點符號之後。
如果需要刪除字元,有更簡單的命令,當然這些命令也可以加上數值參數:
x:刪除游標所在的字元;
X: 刪除游標之前的一個字元;
刪除檔案時發生的問題:如果誤刪了文本,該如何補救呢?可以使用u命令撤銷上一個命令。但是由於u只會撤銷最近的一個命令,因此u命令恢複只能用在還沒有下達其他編輯命令時。個人覺得書上這裡講的有問題,因為我連續刪除十行的的時候,然後接著連續按下10個u,依然能恢複到原來的樣子,如所示,是需要刪除的十行:
在連續按下十個" dd "命令時,再接著連續按十個" u "命令進行恢複,依然能恢複到最原始的樣子,所以覺得書上講的有問題,暫時先記錄下來吧。
移動文本:
vi編輯器中移動文本是通過“刪除後再放置文本實現的”,每次需要移動文字區塊時,先刪除該文字區塊,這樣文字區塊的內容就會儲存在特殊的緩衝區中,然後將游標移動到正確的位置,使用放置命令(p)將剛剛刪除的文本放在新的位置,從而實現文本的移動。
p:將緩衝區的文本放在游標之後,如果移動了一行及一行以上的文本,則是放置在游標之後的新的一行,如果移動不到一行,則將移動的文本放置在游標之後的同一行;
P:與p命令類似,只不過是將緩衝區中的文本放置到游標之前;
需要說明的是," p "命令是將剛剛刪除的文本放置到新的位置,所以一定要在做下一個刪除動作前,將目前刪除的本文恢複過來,否則如果做了一個影響緩衝區的編輯動作(刪除,拖曳等),那麼當前被刪除的文本就會消失。
類似的,可以通過" xp "命令完成兩個字母的對調。
複製文本:
複製文本是通過兩個命令" y "(拖曳)和" p "(放置)來實現的。" y "命令也具有(command)(TextObject)的使用形式,因此可以將拖曳命令和游標移動命令進行組合使用,從而指定需要拖曳的文本範圍。這裡就不再列出拖曳命令和游標移動命令的組合了,但是有個特殊情況," Y "命令等同於" yy "命令,都表示拖曳一整行(而在刪除,替換命令中,D等同於d$,C等同於c$)。
拖曳命令和刪除命令共用一個緩衝區,所以每一個新的刪除或拖曳命令都會覆蓋緩衝區中的內容。
重複:
重複命令為“.”,直接重複上一個命令。
撤銷命令:
前面提過,當出現錯誤操作時,可以使用" u "命令撤銷上一個操作。" U "命令可以撤銷所有對同一行的編輯動作,但是需要游標還在這一行,一旦游標離開了這一行,就無法使用U命令對原先的這一行進行恢複了。
更多插入文本的方法:
上一篇文章已經講了" i "和" a "兩個命令來插入文本,其實還有多個插入文本的命令:
A: 在一行的結尾處添加文本;
I:在一行的開頭處添加文本;
o:在游標所在位置的下一行添加新的一行;
O:在游標所在位置的上一行添加新的一行;
而且之前講過的所有插入命令中,除了o與O命令,都可以接受數值參數。例如" 50i*ESC "就可以直接插入50個" * "字元," 10a*-ESC "就可以直接添加10個" *- "字元對," 2r* "可以直接將當前游標之後的兩個字元替換為兩個" * "。如所示:按鍵順序為" 50,i,*,ESC ",則出現了50個" * ",感覺並不是馬上就出來了,要等將近1秒鐘:
用J命令合并兩行,如果在J命令前面加上數值參數,則可以指定需要合并的行數。
本章vi編輯器命令總結:
d,D,dd,e,E,p,y,Y,yy,.,u,U,A,I,o,O,J。
學習vi和vim編輯器(3):簡單的文本編輯(2)