通常,編輯文本需要做的第1步就是將光標移動到需要編輯的地方,因此編輯文本的速度1定程度上取決于將光標移動到目的地所需要的按鍵數(shù)。這1篇文章,主要介紹如何快速移動光標。
根據(jù)屏幕來移動:
在1個有幾千行文本的文件中,如果依照行來移動的話,可能效力非常低。此時可以依照屏幕來移動。可以把文件看成1個具有文字的長長的卷軸,而屏幕是1個窗口,通常顯示其中的24行文字(我的是顯示26行)。其中^F代表crtl鍵+f鍵。如果想往前或往下轉(zhuǎn)動屏幕,但又想讓光標保持在原來的文本行,可使用z命令:^F:往前(往文本結(jié)尾方向)轉(zhuǎn)動1整屏;
^B:往后(往文本開頭方向)轉(zhuǎn)動1整屏;
^D:往前轉(zhuǎn)動半屏;
^U:往后轉(zhuǎn)動半屏;
^E:往前轉(zhuǎn)動1行;
^Y:往后轉(zhuǎn)動1行;
z+enter:將光標移動到屏幕頂端并轉(zhuǎn)動屏幕;
z.:將光標移動到屏幕中心并轉(zhuǎn)動屏幕;
z-:將光標移動到屏幕底端并轉(zhuǎn)動屏幕;
舉個例子:當前光標在屏幕最底層的1行,現(xiàn)在想讓光標依然在該行,但讓該行移動到屏幕頂端,就能夠直接輸入z,接著輸入enter鍵,以下圖所示:
光標處于屏幕最后1行:
輸入z enter 鍵以后,光標所在行移動到屏幕第1行:
所以你會發(fā)現(xiàn)重復相同的z命令并沒成心義,由于第1次履行以后已到達目的了,再履行相同的命令沒有效果。z命令可以接受數(shù)值參數(shù),例如z+enter是將當前行移動到屏幕頂端,但是200z+enter就是將文件的第兩百行移動到屏幕頂端。
當某些消息出現(xiàn)在屏幕上而影響工作時,可以通過轉(zhuǎn)動屏幕來消除這些消息,也能夠直接輸入crtl+L鍵來重畫但不轉(zhuǎn)動屏幕。如圖所示:
輸入ctrl+L鍵以后,就能夠重畫屏幕,提示消息消失:
如果需要在保持當前屏幕視圖的情況下,可以通過以下命令在屏幕范圍內(nèi)移動:
H:移動到屏幕頂真?zhèn)€行;
M:移動到屏幕中央的行;
L:移動到屏幕底真?zhèn)€行;
nH:移動到屏幕頂端往下第n行;
nL:移動到屏幕底端往上第n行;
其效果以下圖所示,起初光標在當前屏幕視圖的第1行:
輸入M鍵以后,光標移動到當前屏幕的中間行,而且屏幕視圖沒有變化:
根據(jù)行移動:
之前已講過了" j "和" k "這兩個以行動單位進行移動的命令,這里補充幾個命令:
以上3個命令在移動到目的行后,光標會置于該行的第1個非空字符。在當前行中移動,可使用以下命令:enter:移動到下1行第1個字符;
+:移動到下1行的第1個字符;-:移動到上1行的第1個字符;
^:移到當前行的第1個非空格處;
n|:移動到當前行的第n列;
根據(jù)文本塊來移動:
vi編輯器中可以以文本塊(單詞,句子,段落或小節(jié))為單位進行移動。之前已講過了依照單詞來移動(w,W,b,B),接下來再介紹幾個根據(jù)文本塊來移動光標的命令:
e:移動到單詞的結(jié)尾;
E:移動到單詞的結(jié)尾,算上標點符號;
(:移動到當前句子的開頭;
):移動到下1個句子的開頭;
{:移動到當前段落的開頭;
}:移動到下1段落的結(jié)尾;
[[:移動到當前這1節(jié)的開頭;
]]:移動到下1節(jié)的開頭;
vi會尋覓" ? . ! "等標點符號作為句子的結(jié)束。當這些標點符號后面有最少兩個空格或作為1行的最后1個非空格字符時,vi將其作為句子的結(jié)束。但是我實際操作的時候發(fā)現(xiàn),其實只要這些標點符號后面跟上1個空格,vi就會將其作為句子的結(jié)束,不知道是否是書上又講錯了,還是哪里可以配置?暫時先記下這個問題吧。
段落的定義是指下1個空白行前的文本,或是出現(xiàn)在段落宏之前的文本。而小節(jié)的定義則是下1個節(jié)宏之前的文本。可以通過:set命令自定義這些被當做段或節(jié)分隔符的宏。
根據(jù)搜索模式的結(jié)果來移動文本:
在大文件中移動時,最快速的方法之1就是根據(jù)搜索模式的結(jié)果來進行移動。搜索命令是特殊字符" / ",格式為/patten。模式可以是完全的單詞,或1連串字符串,如果在搜索模式中加入了空格,這個空格也會被成單詞的1部份,固然還可使用更強大的模式匹配語法。vi會從光標當前位置開始搜索,并且會依照需要自動繞回文件開頭或文件底部進行搜索,如果搜索到了,光標會定位在該搜索模式第1次出現(xiàn)的地方,否則在屏幕底端顯示相應的信息。
/patten:從光標位置開始處往前搜索;
?patten:從光標位置開始處往回搜索;
上1次的搜索模式會留在你的編輯回話中,因此可以重復搜索,而不需要重新輸入原來的搜索模式:
n: 往同1個方向上重復搜索;
N: 往相反方向上重復搜索;
/enter:往前重復搜索;
?enter:往后重復搜索;
由于重復搜索時,默許是會自動繞回文件頭或文件尾的,因此可以通過設置vi編輯器的wrapscan選項來控制搜索是不是要繞回,當輸入了指令:set nowrapscan 時,就能夠取消搜索時繞過文件頭或文件尾。這時候當我們往前搜索失敗時,就會顯示以下信息:
而如果往回搜索失敗時,也會顯示以下圖所示的相應信息:
搜索命令可以與修改文本命令相結(jié)合1起使用。也就是說對(command)(TextObject)的使用情勢,搜索命令可以出現(xiàn)在TextObject中,而command代表的是文本修改命令,如c,d等。例如 d?file就是刪除光標所在位置到往回搜索第1次出現(xiàn)file的所有字符。
可以用以下命令在當前行中搜索:
fx:搜索(同時將光標移動到)本行下1個出現(xiàn)x的地方,x代表任何字符;
Fx:搜索(同時將光標移動到)本行前1個出現(xiàn)x的地方;
tx:搜索(同時將光標移動到)本行下1個出現(xiàn)x的地方的前1個字符;
Tx:搜索(同時將光標移動到)本行前1個出現(xiàn)x的地方的后1個字符;
;:重復上1個搜索,方向相同;
,:重復上1個搜索,方向相反;
這些命令加上數(shù)值參數(shù),代表搜索x字符第n次出現(xiàn)的地方。這些命令在刪除或拖曳時很有用,當需要修改的文本塊有多個標點符號而難以統(tǒng)計單詞數(shù),此時用字符搜索結(jié)合文本修改命令可能非常方便。
根據(jù)行號來移動:
行號對http://www.vxbq.cn非常有用,由于編譯報錯時通常都會告知我們是哪行報錯,如果能夠直接移動到源文件中的那行,就能夠非常便捷。通過:set nu選項來顯示文件的行號。
CTRL+G命令會在屏幕底端顯示相應的信息,包括當前的行號,文件的總行數(shù),當前位置占全文的百分比。以下圖所示:
G命令:數(shù)值參數(shù)加上G命令代表直接移動到相應的指定行。如果沒有指定行號,則G命令直接移動到文件尾部。
輸入兩個反引號( `` )可以回到原來的位置(上1次使用G命令的位置)。如果你在這中間做了編輯操作,兩個反引號將光標移回到上次編輯的位置。如果使用了搜索命令,``可以將光標移回到上1次搜索時的位置。 ''和``作用類似,只不過它將光標移回到上次位置所在行的開頭而不是確切的位置。
依照行號來移動光標是在1個大文件中快速移動的方法。
本章vi編輯器命令總結(jié):
^F,^B,^D,^U,^E,^Y,z+enter,z.,z-,^L,H,M,L,enter,+,-,^,n|,e,E,(,),{,},[[,]],/pattern,?pattern,n,N,/,?,fx,F(xiàn)x,tx,Tx,;, , ,G,``,'',^G。