標籤:

Vim基礎篇——快速移動

最初使用Vim時,初學者經常會感到不適應,因為它的移動方式和一般的編輯器差別很大。但是Vim的魅力就在於,當你學會Vim的移動方式後,你能迅速的把游標移動到你想要的位置。

本文介紹Vim中的移動方式:Vim中熟練的移動並不是指用hjkl移動,當你越熟練的掌握vim的移動方式,你會越少的使用hjkl移動方式。

hjkl are the tip of the top of the iceberg and very rarely used, at least in my case.

1、行內移動:

Test: This is a line with example text n

最基礎的移動方式是w/e/b/ge

w是向前移動到下一個單詞的第一個位置,大寫的W表示只使用空格作為分隔

" * 代表了游標的初始位置n" 每個字母代表了如果按下這個鍵會跳轉的位置nTest: This is a line with example textn* w w w w w w w wn* W W W W W W Wn

w前面可以加上數字,表示w命令重複幾次,比如3w等同於按下三次w

e是向前跳動到下一個【單詞的末尾】,這意味著如果當前游標在單詞的中間,按下e會跳轉到當前單詞的末尾。大寫的E表示只使用空格作為分隔

" * 代表了游標的初始位置n" 每個字母代表了如果按下這個鍵會跳轉的位置nTest: This is a line with example textn* ee e e e e e e en* E E E E E E E E n

b是向後移動到上一個【單詞的開頭】,這意味著如果當前游標在單詞的中間,按下b會跳轉到當前單詞的開頭。大寫的B表示只使用空格作為分隔

" * 代表了游標的初始位置n" 每個字母代表了如果按下這個鍵會跳轉的位置nTest: This is a line with example textnb b b b b b b b b *nB B B B B B B B * n

ge是向後移動到上一個【單詞的末尾】。大寫的gE表示只使用空格作為分隔

" * 代表了游標的初始位置n" 每個字母代表了如果按下這個鍵會跳轉的位置n" & 表示按下gEnTest: This is a line with example textn ee e e e e e e *n & & & & & & & * n

Notice:w/e/b/ge都是可以跨行移動的!

快速移動到行的開始和結束

$ 移動到行的末尾n0 移動到行的開頭n^ 移動到第一個非空白字元ng_ 移動到最後一個非空白字元n

0不能使用數字參數;但是$可以,$等同於1$,2$表示移動到下一行的末尾,同理3$...

行內移動到特定字元

【f+字元】表示移動到行內當前游標後面的第一個這個字元

【t+字元】表示移動到行內當前游標後的的第一個這個字元的前一個位置

【F+字元】為【f+字元】的反向

【T+字元】為【t+字元】的反向

這種移動方式不能跨行

" * 代表了游標的初始位置n" 每個字母代表了如果按下這個鍵會跳轉的位置n" & 表示按下fen" ! 表示按下tenTest: This is a line with example textn*& & & & &n * !n

注意到一個奇怪的現象,在第二行操作中,按下te會定位到line中的e,游標會移動到e的前一個字元n,如果再一次按下te,會定位到line中的e,游標會移動到e的前一個字元n,也就是說游標不會移動。

這樣就告訴我們:連續按下兩次【t+字元】和按下一次到達的位置一定是一樣的。

f/t/F/T均可以接受數字參數,3fe相當於按下三次fe

事實上,重複操作有另一種方式:【;】代表了重複查找字元,【,】是【;】的反向:

【fe;】等同於【fefe】等同於【2fe】

【fe,】等同於【feFe】


2、行間移動

滾動屏幕

<Ctrl-b> 向下移動一個屏幕

<Ctrl-f> 向上移動一個屏幕

<Ctrl-u> 向下移動半個屏幕

<Ctrl-d> 向上移動半個屏幕

文件位置移動

【數字+G】表示移動到文件的特定行

比如30G表示移動到第三十行

gg表示移動到文件的第一行

G表示移動到文件的最後一行


3、其他移動方式

【%】:找到當前游標 下或者之後 的第一個括弧,並移動到它匹配的括弧的位置

括弧包括:

([{}])

/* */

#if, #ifdef, #else, #elif, #endif

" * 代表了游標的初始位置n" 每個字母代表了如果按下這個鍵會跳轉的位置nint f(1, g(2, 3))n * %n % *n * %n % *n

推薦閱讀:

替換兩個 Tags 之間字元串的 VIM 命令怎麼寫?(或者, g 的輸出如何作為 s 的輸入?)
如何用 vim 的插件開發?有什麼實際中的技巧?
到底 VIM 能配置到多強大的程度?
怎麼向新手解釋 Emacs?
有沒有vim學習,經典,權威,完整的書?

TAG:Vim |