vi編輯器學習——簡單編輯操做

文章及圖片原載於 bibodeng think beyond, 歡迎訪問 :)css

第二章 簡單編輯操做

本章將會向你介紹使用vi來進行編輯,本章被當作是初級教程。在本章你將會學習怎樣移動光標,還有怎樣作簡單的編輯工做。若是你歷來沒有使用過vi編輯器,那麼你應該閱讀整章內容。程序員

後續的章節將會帶領你拓展你的技能,來更加快速更加高效地完成你的編輯工做。其中最大的優勢就是對熟手來講,那就是你能夠有不少選項可用。(其中對菜鳥來講最大的好處就是vi真的太TMD多命令了。)web

你不能單純靠記憶單個vi命令來學習vi編輯器,能夠考慮從本章介紹的基本命令開始學起。記住一點,這些命令的使用模式都是同樣的。編程

當你學習vi的時候,將你能作的工做更多地代理給編輯器來作,而後找到可以完成該任務的命令。在後面的章節,你將會學習更多高級的特性,可是在你掌握高級技巧以前,先把簡單的掌握好!行嗎?vim

本章將會覆蓋:緩存

 

vi命令

vi有兩種模式:命令模式和插入模式。當你用vi進入一個文件的時候,你所處的是命令模式,此時編輯器正在等待着你輸入命令。一些命令可讓你移動到文件的任何位置,能夠進行編輯,能夠進入編輯模式來添加新文本。也可使用退出編輯文件回到unix的命令(保存或者丟棄修改均可以)。app

你能夠假設這兩種不一樣的模式表明着不一樣的鍵盤,在插入模式,你的鍵盤的功能就像一個打字機,打出你想要的內容,而在命令模式,每一個鍵都是有命令的含義,能夠指示編輯器作什麼。編輯器

你有許多的方法告訴vi編輯器你想進入插入模式,其中一種最多見的就是按下 i 這個鍵.i不會出如今屏幕上,可是你按下了以後,接下來按下的任何按鍵將會出如今屏幕中,而且會被存儲到內存緩衝區內。光標表示當前的所在位置。當你想退出插入模式的時候,按下ESC鍵,回到命令模式。按下ESC鍵光標會退後一格,因此你將看到光標在你輸入的最後一個字符上面。ide

例如,假設你新建了一個文件,而且想要輸入"introduction",若是你按下的按鍵順序是這樣的iintroduction,那麼你的屏幕中將會看到這樣的結果:學習

introduction

當你新建了一個文件,vi處在命令模式下,第一個i是進入到插入模式的命令,然後續的全部按鍵都是要輸入文件的內容,由於你進入了插入模式,直到你按下ESC鍵離開插入模式。當你輸入錯誤的時候,退格刪除,而後從新輸入。退格的做用要取決於你使用的終端類型,有的是直接刪除你的輸入內容,有的是直接退格而不刪除內容。記住,你不能用 backspace鍵來退格到你進入插入模式以前的位置,可是若是你取消了vi的配置,Vim容許你退格到進入插入模式前的位置。

 

vi有一個選項能夠設置一個右邊距離,而後一行到達必定長度會自動換行,可是如今,你可使用ENTER鍵來換到下一行。

有時候你不知道是在插入模式仍是在命令模式,當vi的反應不像你所預期的那樣,那麼按下ESC鍵一次或者兩次來檢查你所處的模式。當你聽到beep聲,那麼已經在命令模式下了。

移動光標

你可能只須要一丁點的時間來在插入模式插入新文本,可是將會花多一點時間在修改已有文本上。

在命令模式下,你能夠將光標移動到任何你想要的位置,當你開始編輯時,你老是想把光標放到相應的位置,不管你進行的是什麼操做(修改、刪除、仍是複製),你都想要儘量飛快地到達你想要操做的位置。

下面是一些移動光標的命令:

  • 上下左右,一次一個字符距離
  • 字符塊爲單位向前或者向後,例如單詞,句子,或者段落
  • 在文件前移或後移,一次一個屏幕空間
在圖表2-1中,一個下劃線表示光標當前所在的位置,圓圈告訴你各類命令所達到的目標位置。

點擊查看原圖

圖表2-1 簡單移動命令

 

簡單移動

按鍵h,j,k和l,這些剛恰好在你手指下面的按鍵,能夠移動光標:

h 左移一格
j 下移一行
k 上移一行
l 右移一格
你可使用方向鍵(←↓↑→)控制上下左右,還有+和-來上移下移。或者使用ENTER和BACKSPACE鍵,可是它們是有特殊做用的。剛開始,你會以爲它們看起來很笨拙,用字母按鍵來代替鼠標光標移動。可是以後你會發現這將是你最喜歡的vi的特性之一,那是由於你能夠不用離開鍵盤中心就能夠隨意移動(省力)。
在你移動光標以前,先按下ESC鍵以確保你在命令模式下,用h,j,k,l按鍵來向前向後移動當前光標所在的位置。當你能夠在一個方向上快速飛奔的時候,你將會聽到一個beep聲,由於你到了文本的邊界,此時光標也不動了。當你在一行的頭部或者尾部的時候,你不能再用h或者l來先後移動到前一行或者下一行,你必需要用j和k按鍵。你不能將光標移到沒有文檔字符的地方,好比有"~"標號的行(表示沒有任何字符),固然也不能移動光標到第一行更頂的位置。

 

帶數字參數的移動

你能夠優化移動命令,方法是使用數字。圖表2-2展現了命令4l怎樣移動光標到右邊第四個空格處的,就像你按下了4次的l命令(llll)。

 

點擊查看原圖

屢次命令可讓你有更多的選擇以及效率來發揮你學習到的命令的做用。記住它,當你學到更多命令的時候,你將受益無窮。

行內移動

當你保存了practice文件,vi將會告訴你該文件有多少行。一行未必和屏幕上顯示的行同樣長(一般限制爲80個字符),一行結束是以ENTER鍵換行來結束的。若是你在按下ENTER鍵以前輸入了200個字符的內容,vi將視這200個字符爲一行(雖然可能會被分做不少行來顯示在屏幕上)。也就是說,一行是以行結束標誌來決定其長度的。

咱們前面第一章的時候提到過,咱們能夠設置右邊距離,vi將會自動在距離右邊界必定距離的地方插入一個換行,這個距離(right margin)是能夠設置的。選項wrapmargin(簡寫是wm),你能夠用下面的命令來設置wrapmargin:

:set wm=10
本命令不會影響你早已經輸入的行,而只會影響你未來要輸入的行。咱們將會在第七章選項設置深刻討論。
若是你不用vi的自動wrapmargin換行的話,你應該用換行來控制一行文本的長短。

這裏有兩個很是有用的命令,讓你在行內移動遊刃有餘:
0 (零) 移動到所在行的開頭
$ (美刀符號) 移動到所在行的尾部
在下面的例子中,行號是已經顯示出來了(行號顯示能夠用vi的number選項來控制,輸入「:set nu」命令就能夠了,這個也將在第七章講解)。

點擊查看原圖

 
邏輯行的第3行,便可見行第5行沒有和上面的對齊。若是光標在單純delete的d位置,當你按下$命令的時候,你的光標將會移動到邏輯行尾部,也就是下面的them單詞。若是你按下0命令,那麼你將回到第二行的開頭,也就是字母move的m字母。

字符塊間移動

你能夠一整塊一整塊字符地跳躍,單詞,句子,段落等。w命令能夠一次前移一個單詞的位置,計數器能夠計入標點符號或者不計入,下面的行演示光標是怎樣移動的:
 

點擊查看原圖

你能夠一個單詞一個單詞地移動,不計入標點符號和間隔,只須要將命令改成大寫的W。那麼光標使用W來移動就和上圖的第二行同樣。

點擊查看原圖


要往回整個單詞間隔地移動,那麼就使用 b命令,每次後移一個單詞距離。大寫的 B命令可讓你不計標點和間隔地移動一個單詞的間隔。
咱們前面提到,移動命令是能夠接受數字參數的,因此,不管是w命令仍是b命令,均可以讓你的移動間隔加倍。2w讓你向前移動2個單詞,5B讓你後移動5個單詞,且標點符號不計入內(標點符號不計作單詞)。

要移動到一個特定的行,你可使用G命令,G命令將會移到文件的末尾,1G將移動到文件的第一行,42G將會到達第42行。咱們將會在後面一節「G命令」裏面詳細討論。

點擊查看原圖


 
咱們將會在第三章討論以句子爲間隔的移動,但如今,用你知道的命令來移動光標,把他們和數字參數結合起來,加倍移動。

 

簡單編輯

當咱們輸入文本到你的文件中,一切都是那麼完美。可是你會發現當你打印錯誤或者想要優化你的短語,或者當你的程序有一個bug的時候。當你輸入字符的時候,你頗有可能要修改它們,刪除,或者移動,甚至複製。圖2-3就向你展現了一些對文本的修改。修改是用文本糾錯標記的。

在vi中你能夠完成上圖所示的編輯任務,僅僅須要一些簡單的按鍵命令:i 插入,a能夠在光標後面追加文本,c 能夠更改文本,d刪除。要移動或者拷貝文本,你可能須要一些組合命令,你能夠用d 刪除來移除文本,而後用p命令來放到須要的地方(粘貼)。你能夠單純地拷貝文本,用y命令(yank),而後用p來(put)。每一個編輯都將會在本章進行描述。圖表2-4將會展現完成圖表2-3所示修改的vi命令。

插入文本

你早就在前面看到過插入命令了,用來插入文本到新文件中。你也能夠在編輯現存的文本時添加忘掉的字符、單詞、句子時使用插入命令。在practice文件中,假設你有下面的句子:
you can scroll
the page, move the cursor, delete
lines, and insert characters.

點擊查看原圖

由當前光標所示的位置,來編輯句子。輸入下面的命令:

點擊查看原圖

追加文本

a, 你能夠在任何地方的後面追加文本,只須要一個簡單的a命令,這個命令的作的工做和i差很少,可是a和i不一樣的是,它在光標所在的後面插入,而不是在光標所在位置的前面插入。你也許已經發現了當你按下i命令進入插入模式的時候,光標不會移動,直到你輸入文本爲止。當你按下a命令進入插入模式時,光標將會移動到右邊一格。當你輸入文本時,將追加文本到原始光標所在位置的後面。

修改文本

c,你能夠經過使用c命令替換任何的文本。要告訴c命令有多少文本要被修改,你須要將c和移動命令w或b結合在一塊兒使用。使用此種方法,移動命令就充當了文本對象。例如,c能夠像下面同樣使用,將修改從光標處開始到特定位置:

cw 修改從光標到當前單詞結束位置之間的文本
c2b 修改從光標到後退兩個單詞的位置之間的文本
c$ 修改從光標到行尾之間的文本
c0 修改從光標到行首之間的文本

當組織好一個修改命令後,你能夠用任意長度的文原本替代上面所說的文本,沒有字符,一個字符,或者幾百個字符均可以。c 命令,就像 i 和 a 同樣,帶你進入插入模式,按下ESC鍵退出插入模式就行了。

影響只會限制在當前行,vi 將會標記將被修改的尾部,以一個$來標識。因此你能夠看到哪部分被修改了。(vim和vi稍微有不一樣,vim會刪除掉單詞,而後讓你輸入,不會用$標記出修改部分的尾部)

單詞

要修改一個單詞,將c命令(change)和w命令(word)結合使用,你就能夠用待會輸入的文本(或長或短)替代一個單詞的長度,cw能夠被看做是「刪除指定的單詞,並插入新文本直到按下ESC鍵以前。假設在你的practice文件中有以下的行:

with an editor you can scroll the page.

而後你想要修改「an「爲a,你只須要修改一個單詞:

點擊查看原圖

cw也能夠只修改單詞的一部分,例如將spelling修改成spelled,則能夠將光標移動到i處,而後按下cw命令,則能夠輸入ed以替換ing,按下ESC鍵退出編輯模式,則完成編輯。

vi命令的通常格式

在剛纔的修改命令中,你可能發現vi命令有以下的模式:
(命令)(文本對象)
命令就是修改命令c,文本對象就是移動命令所描述的從光標到目標位置之間的預期的字符串(如w,$,0)。c命令不是惟一的須要接文本對象的命令,d(刪除)命令以及y(yank 複製)命令也遵循這一的模式。

記住移動命令是能夠帶參數的,因此數字能夠添加到c,d,y命令中(例如 d2w或2dw均可以刪除連續的兩個單詞),記住了這點,你就會發現其實不少命令都有下面的模式:
(命令)(數字參數)(文本對象)
或者將數字參數提早(等效的):
(數字)(命令)(文本對象)
它們的原理是:數字和命令是可選參數,沒有了它們剩下的就是一個移動命令了,當你加上一個數字參數時,那麼命令就變成了一個加倍移動(表示尾部和首部的$/0除外)。另一方面,與c,d,y結合,則能夠變成一個編輯命令,當你意識到能夠有多少種組合的方法時,你就會知道vi有多麼強大的威力了!

cc命令能夠替換掉整個當前行,cc修改整個行,後來輸入的文本將會替代該行,直到按下ESC鍵退出插入模式爲止。光標在行內什麼位置不重要,cc都會替換掉整行。像cw這樣的命令和cc命令的工做模式是不同的,使用cw時,原先的文本依舊存在,直到你覆蓋了它,而後全部的原先的內容在你按下ESC以後消失,而使用cc命令時,原先的文本將會被擦除,留下一個空行來插入文本。覆蓋方法發生在影響小於一行的修改命令中,而「空行」方法發生在影響整行或更多行的命令中。 C(大寫C)替換從當前光標所在位置到該行行尾的全部字符,它具備和c$同樣的功效。命令cc和C是其餘命令的快捷方式,因此它們不遵循通常的vi命令規則,你將會看到相似的其餘快捷鍵,這將會在後面的刪除和複製命令中講到。

字符

r另外一個替換編輯命令r,r替換掉光標所在位置的單個字符爲你輸入的另外一個字符,你無需按下ESC鍵來返回命令模式,這裏有一個拼寫錯誤:

Pith a screen editor you can scroll the page

只有P字符須要修改,你不想用cw命令替換掉整個單詞,由於你將糾正整個單詞爲」with「。這個時候r命令就很方便了,用來替換掉單個字符:

按下rW 替換當前光標所在字母爲W

 

 

點擊查看原圖

部分文本

s,假設你想修改幾個字符,而不是一個單詞,部分替換命令s,它自己只替換單個字符,而後插入若干個字符(以多個字符替換單個字符),就像修改命令(c)同樣,文本最後一個字符將會用一個$符號來標記(貌似個人機子上的vim沒有這個),而後你就能夠清楚地看到你有多少字符被修改。

S(大寫S),讓你修改整行,與命令C相比,C只刪除從光標到行尾的文本,而S命令刪除整行,無需關心光標在行的何處。而後vi將你帶入插入模式,加上數字前綴可讓你替換多行。s和S命令都會將你帶入插入模式,當你完成了編輯時,按下ESC鍵退出插入模式。(老調重彈了不少次了)

R 命令,就像他的小兄弟r同樣,是用來替換文本的,只不過R簡單地進入疊印(覆蓋)模式,而後一一地修改,而r只修改一個字符。

修改大小寫

修改一個字符的大小寫是一種特別的替換,波浪號 ~ 命令,能夠將一個小寫字母改寫成大寫字母,或者將一個大寫字母改寫成小寫字母。將光標移動到你想要修改的字符所在的位置,而後輸入 ~ 命令,字符的大小寫將會改變,光標將會移動到下一個字符。

在早期版本的vi中,你不能使用數字前綴來修飾此命令,可是在如今的vi中,容許使用數字前綴做爲參數,而後能夠一次修改若干字符的大小寫。若是你想一次修改若干行的大小寫的話,你必須用unix的tr等命令過濾文本,將會在第七章討論。

刪除文本

d命令,你能夠刪除文件中的任何文本,毫無疑問使用刪除命令d就能夠了。就像修改命令同樣,刪除命令須要一個文本對象(須要修改的文本的數量或者範圍)。你能夠刪除一個單詞,使用的是dw命令,刪除行使用dd(或者D)命令,或者其餘種種移動命令。在這些刪除命令中,你須要把光標移動到要作修改的地方,而後用d命令結合文本對象(例如w)來工做。

單詞

dw 假如你有以下的文本:

Screen editors are are very popular,
since they allow you to make
changes as you read through a file.

光標位置爲紅色字體所示,你想要刪除第一行的are

 

點擊查看原圖

dw 刪除一個單詞,且是從光標處到所在單詞的尾部。記住,跟隨單詞的空格也會被刪除。dw也能夠完成單詞內的部分刪除,以下面的例子:

since they allow ed you to make

你想要刪除掉ed(allowed的末尾)。能夠用下面的鍵:

點擊查看原圖

dw會刪除下一個字母以前的空格,可是在本例中咱們並不想這麼作,要保留單詞間的空格,則使用de命令,這樣就只刪除到文件的末尾了。使用dE命令能夠刪除到單詞的末尾,包括標點符號。

你也能夠向後刪除(db,聰明的你能夠想象一下它的效果)或者刪除到一行的末尾或者開頭(d$ 和 d0).

dd 命令刪除光標所在的整行,dd不會刪除行的一部分,要麼全刪,要麼不動。就和其餘徹底命令 (如cc)同樣, dd是一個很特殊的命令。用和上個例子徹底相同的文本,光標在第一行。

點擊查看原圖

大D命令刪除從當前位置到行末尾的文本,D是 d$的快捷方式。(其實不少方法都是和其餘命令如C類似),例如:

你能夠刪除刪除從光標起的右邊部分的文本:

點擊查看原圖

 

字符

x命令,有時候你只是想刪除一兩個字符,不想弄得太大動靜,那麼使用r命令來作替換也不太適用,那麼使用x命令,能夠刪除一個字符,且只刪除當前光標所在處的一個字符。假若有下面的行:

zYou can move text by deleting text and then

你能夠用x命令刪除字母‘z’,另一個特別的命令X(大寫x),能夠刪除光標之前的那個字符。而在命令前假如數字前綴,則等價於運行命令屢次,如5x,能夠向右刪除5個字符。

你可能會碰到的問題

  • 你刪錯了東西,想要恢復回來
  • 若是你用刪除命令,刪掉了你不想刪的東西,那麼你能夠輸入u命令來撤銷你的修改,由於u命令就是undo,你能夠恢復到之前的修改。若是你作的是最後一次修改,想要恢復過來,嘗試一下p命令,由於你刪除的東西會保存到p所維護的空間,而後按下p就能夠將那些誤刪的粘貼回去。vi緩存最近9個刪除的內容,能夠用如3p的命令恢復前刪除的三行。

移動文本

在vi中,經過刪除文本而後在別處粘貼來移動文本,每次你刪除了一個文本塊,被刪除的文本將會臨時存儲在一個特別的緩衝區中,而後移動光標到你想要放置文本的地方,而後用p ( put)命令來將文本放置到該處。你能夠移動任何一塊文本,儘管移動行比移動單詞要有用的多。

p,p命令將緩存區中的內容粘貼到光標後面區域,若是你刪除了一或多行,p將會把你所刪除的文本粘貼到光標所在行的下一行。假設你有以下的文本:

You can move text by deleting it and then,
like a "cut and paste,"
placing the deleted text elsewhere in the file.
each time you delete a text block.

而後你想把第二行移動到第三行的後面,先使用d命令刪除,而後用p命令放置。以下所示:

點擊查看原圖

一旦你刪除了文本,你須要在下面的修改或者刪除以前保存一下,若是你同時在編輯其餘文件,會影響緩衝區的話,你刪除的文本可能會丟失。你能夠重複屢次p命令,只要你沒有進行進行新的編輯。在第四章,你將會學習怎樣保存一個命名了的緩衝區中被你刪除的文本,因此你能夠恢復你的數據。

一個有用的小技巧——轉置文本

你可使用xp命令(想象一下,刪除一個字符,而後插在下一個字符的後面,不就將相鄰的兩個字符換位了嗎?)來交換兩個字符的位置。例如,在單詞mvoe中,vo兩個單詞位置反了,因此要修改回來,只須要將vo的位置調轉過來便可,因此先x,刪除掉字符‘v’,而後將‘v’放到(p)字符‘o’的後面,這樣就調整了vo的位置爲ov。

拷貝文本

y命令,不少時候你可使用拷貝命令來節省編輯的時間,使同一段文本在多處重複。使用兩個組合使用的命令:一個y命令,一個p命令就能夠實現了。你能夠拷貝任意長度的文本,而後放置在其餘的任何位置。一個(急抽)拷貝命令能夠複製所選的文本到一個特殊的緩衝區中(能夠一直保持直到下一個y命令覆蓋),而後就能夠講所複製的內容用p命令粘貼了。

就像修改和刪除命令,拷貝命令能夠和任何移動命令結合(如yw,y$,4yy)。y命令常用在拷貝一行內容的狀況,由於拷貝命令每每要在距離更遠的其餘行粘貼文本,而更少修改行內文本。假設practice有下面的文本:

With a screen editor you can
scroll the page.
move the cursor.
delete lines.

你想要造出三個完整的句子,每句都用「With a screen editor you can」開頭,你可使用拷貝命令y,來完成這項簡單的工做。

點擊查看原圖

點擊查看原圖

y命令和刪除命令使用的是同一個緩衝區,每次最近的刪除或者拷貝都會取代以前的緩衝內容,咱們將會在第四章看到,大概有9個拷貝或者刪除內容塊被放在buffer裏面,他們均可以用p命令來粘貼。你也能夠將它們刪除或者粘貼到26個不一樣的緩衝區中(複製粘貼緩衝區),這容許你像玩雜耍同樣擺弄文本塊。

重複或者撤銷你的最後一條命令

每一個編輯命令都緩存在一個臨時緩衝區裏面,直到你的下一個命令輸入時才消失。例如你在一個單詞後插入了一個"the",插入文本的命令以及你作的操做,都被保存起來了以用於撤銷。

重複命令

.命令,每次你想重複上次使用過的命令,你能夠重複屢次該命令,點符號(.)可讓你重複命令。看下面的例子:

With a screen editor you can
scroll the page.
With a screen editor you can
move the cursor.

你能夠刪除一個行,而後刪除另一行,只須要輸入一個點命令便可。

點擊查看原圖

老版本的vi在重複命令的時候有問題,例如,在插入一個很長的文本時,若是設置了wrapmargin(換行對齊),則會有困難。若是你有這樣的老版本,這個bug將早晚會折騰到你。你能作的很少,只是提早警告一下。(現代版本的vi不見得有這樣的問題)你有兩種方法來解決這樣的問題,當重複屢次長文本插入時,你能夠在重複下一次命令以前保存一次文檔( : w),也能夠講wrapmargin設置爲0.即以下所示:

: set wm=0

在後面的章節「更多映射鍵的例子」 中,我將會向你展現一種使用wrapmargin的簡單解決方案。在一些vi版本中,命令 CTRL+@ 能夠重複最近的插入操做(我在vim上試了一下,聽到的倒是嘟嘟聲,原來是沒有進入到插入模式)。進入插入模式,能夠執行CTRL+@命令來重複插入,插入後將帶你回到命令模式。

回退-撤銷

u命令,早以前已經提到過了undo命令,在你操做錯誤的時候能夠撤銷你的命令。只需簡單地按下u鍵。這時候光標在哪都無所謂。繼續以前的例子,下圖展現了刪除後的practice文件:

點擊查看原圖

U,大寫u,能夠撤銷在一個行的全部修改。只要光標保持在該行,當你從該行移走後,你就不能繼續使用U命令了。注意你不能撤銷你最近作的撤銷(撤銷動做),在兩個文本修改版本之間切換。(設想一下,若是能夠撤銷你的撤銷動做,那麼撤銷一個編輯,而後撤銷你的撤銷,就是恢復,因此是在裏兩個版本里切換,這作沒有多大意義)可是u命令能夠撤銷U命令,而U命令將會撤銷全部在本行的修改,包括哪些u所作的修改。(恢復到該行作任何修改以前的狀態——建立狀態)

小技巧:u命令能夠撤銷它自己的操做將會致使一個很調皮的循環。若是你只是想要撤銷你最後的編輯修改,那麼簡單地撤銷它,你將會被彈回原來的行。當你撤銷你的撤銷操做時,你仍呆在本行。

vim 可讓你使用 CTRL+R鍵來重作一個未完成的命令,和無限重作結合在一塊兒,你能夠向前或者向後你的編輯歷史,能夠查看稍後章節「撤銷撤銷操做」。

更多插入的方法

你能夠在光標前插入一段話,按下如此的鍵隊列:
itext to be inserted ESC鍵
而後你就向裏插入了「text to be inserted」,而且回到了命令行模式。這裏還有其餘的一些插入命令,在光標先後不一樣位置進行插入:

A 向行尾追加文本
I 向行首做插入操做
o (小寫o),向下建立一個新行,而後插入文本
O (大寫O), 向上建立一個新行,而後插入
s 刪除光標所在的或者替換文本
S 刪除本行或替換本行
R 用新值覆蓋原有文本,會一直向右邊移動,且能夠添加新文本。

全部的這些命令可讓你進入到插入模式,完成插入後,記得按下ESC鍵退回到命令模式。

A (append) 和 I(insert) 可讓你避免在編輯前移到行尾或者行首。(A命令比$a好,由於少按一次鍵,儘管算起來仍是同樣多的鍵,可是更快了不是嗎?只有你越懶,那麼你可能學會更多命令讓計算機來幫你作哪些無聊的重複工做。)

o和O命令,在下一行或者上一行新開一行,也不用再換行而後光標退回了。你能夠在當前行任意位置敲入。

s和S命令(substitute)容許你刪除一個字符或者一整行,而後接入你要輸入的任意長度文本。s等價於 c + 空格符,表示用空格符來代替一個字符。S命令呢,和cc命令是同樣的功效的。s的最佳用處是修改一個單詞爲若干個單詞。

R命令(replace)是頗有用的,當你想修改文本,可是不知道要修改多少個字符的時候,例如,你不知道要修改幾個單詞(估計用3cw或者4cw),可是這些都沒有R那麼好,由於R是改到哪就是哪逐個替換的。改完了,退出插入模式就好了。

插入命令的數字參數

除了o和O命令以外,以上列出的插入命令(加上i和a),可使用數字前綴作參數。有了數字前綴,你可能會用i,I或a命令來插入一行下劃線或者交替的符號,例如,你能夠輸入50i* ESC鍵 來輸出一行「**********************************」,而用25a*- ESC鍵來輸出這樣一行「*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-」(貌似是程序員編程時候的裝飾性分隔線,有這個東西爽爆了),這比重複地輸入一個字符或者幾個字符要有意思的多(很諷刺的是,我使用的不是vi編輯器,結果我輸入上面的符號的時候就是用手工重複的方法,實在是沒有vi那麼高效啊!)

有了數字前綴,r命令能夠一次替換一片的字符(例如輸入個5r,再輸個a,你會發現五個字符被替換爲a了,你將看到「aaaaa」整整齊齊地站在你的屏幕上。),在C或者C++中,要將|| 換成 &&,只需輸入一個2r&便可,無比省事。(愈來愈崇拜開發vi的神人了,感受vi就是爲程序員打造的,程序員又懶又聰明,纔會讓計算機來提升咱們工做的效率)

你能夠在大S命令前加上數字參數,這樣你就能夠一下替換掉好幾行了,這至關地迅速且很靈活,和用c 命令和移動命令結合起來用同樣爽。

一個很好的例子是,用s命令前面加數字參數能夠一次替換掉好幾個字符,這些字符每每在單詞的中間,輸入r很差,輸入cw會改掉太多,那就用s命令吧,它的效果和R差很少,但其實仍是有所不一樣的。

還有其餘的完美結合可讓你的編輯變得天然,例如ea命令(其實和A命令同樣)也是一個頗有用的組合,能夠在本行末尾添加文本。你將會被這些聰明的命令所導引,向着一個自動化的美好的世界而去。

將兩行連在一塊兒

J 命令,有時候你要將一些看起來很醜的短行鏈接在一塊兒,只須要將光標移到第一行,而後用J命令就能夠將兩行合併了。假設你有以下的practice文件:

With a
screen editor
you can
scroll the page, move the cursor

點擊查看原圖

在J以前加上數字參數會讓你驚喜地發現,一會兒能夠將好幾個行合併。可是合併後你會發現每行之間會留下痕跡——一個空格。(感受這個功能也是爲程序員造的,合併幾條語句在一行裏面。)

問題清單

  • 當你輸入命令時,文本在你的屏幕上跳來跳去四處遊走,並且不知道它在幹嗎
  • 當你想按j的時候,不要 錯誤滴按下J命令,你可能無心中按下了大寫轉換鍵 Caps Lock,vi是大小寫敏感的,這個不用囉嗦了。當發現caps lock 燈亮的時候,再按一次回到原來的狀態。記住按下ESC命令,回到命令模式。無需多言!

回顧學過的命令

下面的圖表,展現了c,d,y命令的一些結合移動命令的使用,都是一些基礎命令,本章介紹的命令就這些,記住必定要勤加練習才能熟能生巧。掌握這些命令,你已經入門了,可是要真正體會到vi的強大,你還得看下面的高級章節。

 

點擊查看原圖

點擊查看原圖

translated by bibodeng  若有錯誤,歡迎斧正  2012-09-22      謝絕轉載

 從此將再也不翻譯了,而是以筆記的形式記錄一些,由於已經有一本還不錯的中譯本《學習vi和vim編輯器》  不重複發明輪子。

相關文章
相關標籤/搜索