【轉載】vi/vim使用進階: 指隨意動,移動如飛 (一)

vi/vim使用進階: 指隨意動,移動如飛 (一)

<< 返回vim使用進階: 目錄程序員

本節所用命令的幫助入口:正則表達式

:help usr_03.txt
:help motion.txt
:help usr_29.txt
:help scroll.txt 

vim提供的移動方式多如牛毛,但咱們並不須要掌握所有這些命令,只須要掌握最適合本身的那些命令。由於咱們最終的目的,並非成爲一個vim高手,而是更高效的編輯文本。vim

咱們下面介紹的命令,若是沒有特別說明,都是在Normal模式下使用的命令。wordpress

這些命令的幫助入口,就是」:help 命令名「。例如,對於」j「命令,查看它的幫助,使用」:help j「。工具

[上下左右]post

讓咱們從最簡單的、也是使用頻率最高的h, j, k, l開始。url

h, j, k, l的移動方式,已經成爲vim的標誌之一,而且也爲更多的軟件所接受。若是你仍在用上下左右光標來移動的話,說明你心裏並無真正接受vim的哲學,若是真的打算把vim作爲你的編輯工具,就從使用h, j, k, l開始吧!spa

h, j, k, l分別表明向左、下、上、右移動。如同許多vim命令同樣,能夠在這些鍵前加一個數字,表示移動的倍數。例如,」10j「表示向下移動10行;」10l「表示向右移動10列。.net

缺省狀況下,h和l命令不會把光標移出當前行。若是已經到了行首,不管按多少次h鍵,光標始終停留在行首,l命令也相似。若是但願h和l命令能夠移出當前行,更改‘whichwrap’選項的設置(:help ‘whichwrap’)。插件

vim的做者在安排按鍵功能時別具匠心,在其它的鍵綁定中,也能看到h, j, k, l所表明的含義。

例如,使光標在多個窗口間上下左右移動的命令,就是CTRL-W h/j/k/l (:help CTRL-W_h, …);

再如,上下左右移動窗口位置的命令,是CTRL-W H/J/K/L (:help CTRL-W_H, …)。注意,這裏的H, J, K, L是大寫的。

[ 翻頁 ]

在vim中翻頁,一樣可使用PageUp和PageDown,不過,像使用上下左右光標同樣,你的手指會移出主鍵盤區。所以,咱們一般使用CTRL-B和CTRL-F來進行翻頁,它們的功能等同於PageUp和PageDown。CTRL-B和CTRL-F前也能夠加上數字,來表示向上或向下翻多少頁。

vim中還能夠向上或向下翻半頁,翻指定的行數,參見scroll.txt幫助手冊頁。

[ 在文件中移動 ]

vim提供了一些命令,能夠方便的在文件中移動。

命令」gg「移動到文件的第一行,而命令」G「則移動到文件的最後一行。

命令」G「前能夠加上數字,在這裏,數字的含義並非倍數,而是你打算跳轉的行號。例如,你想跳轉到文件的第1234行,只需輸入」1234G「。

你還能夠按百分比來跳轉,例如,你想跳到文件的正中間,輸入」50%「;若是想跳到75%處,輸入」75%「。注意,你必須先輸入一個數字,而後輸入」%「。若是直接輸入」%「,那含義就徹底不一樣了。」:help N%「閱讀更多細節。

在文件中移動,你可能會迷失本身的位置,這時使用」CTRL-G「命令,查看一下本身位置。這個命令會顯示出光標的位置及其它信息。爲了不迷失,你能夠打開行號顯示;使用」:set number「命令後,會在每一行前顯示出行號,能夠更方便的定位的跳轉(:help ‘number’)。

[ 移動到指定字符 ]

上面的命令都是行間移動(除h, l外),也就是從當前行移動到另一行。若是咱們想在當前行內快速移動,可使用f, t, F, T命令。

f「命令移動到光標右邊的指定字符上,例如,」fx「,會把移動到光標右邊的第一個’x’字符上。」F「命令則反方向查找,也就是移動到光標左邊的指定字符上。

t「命令和」f「命令的區別在於,它移動到光標右邊的指定字符以前。例如,」tx「會移動到光標右邊第一個’x’字符的前面。」T「命令是」t「命令的反向版本,它移動到光標右邊的指定字符以後。

這四個命令只在當前行中移動光標,光標不會跨越回車換行符。

能夠在命令前面使用數字,表示倍數。例如,」3fx「表示移動到光標右邊的第3個’x’字符上。

;「命令重複前一次輸入的f, t, F, T命令,而」,「命令會反方向重複前一次輸入的f, t, F, T命令。這兩個命令前也可使用數字來表示倍數。

[ 行首/行尾 ]

在vim中,移動到行首的命令很是簡單,就是」0「,這個是數字0,而不是大寫字母O。移動到行尾的命令是」$「。

另外還有一個命令」^「,用它能夠移動到行首的第一個非空白字符。

在正則表達式中咱們會看到,」^「字符表明行首,而」$「字符表明行尾。可見,vi/vim的按鍵的安排,的確是別具匠心的。

[ 按單詞移動 ]

咱們知道,英文文檔的主體是單詞,一般用空白字符(包括空格、製表符和回車換行符)來分隔單詞。vim中提供了許多命令來按單詞移動。

要根據單詞來移動,首先要把文本分隔爲一個個獨立的單詞。vim在對單詞進行分隔時,會把’iskeyword‘選項中的字符作爲單詞的組成字符。也就是說,一個單詞(word)由’iskeyword‘選項中定義的字符構成,它前面、後面的字符不在’iskeyword‘選項定義的字符中。例如,若是咱們把’iskeyword‘選項設置爲」a-z,A-Z,48-57,_「,那麼」FooBar_123「被作爲一個單詞,而」FooBar-123「被作爲三個單詞:」FooBar「, 「「和」123「。」a-z,A-Z,48-57,_「中的48-57表示ASCII碼錶中的數字0-9。

vim中,移動光標到下一個單詞的詞首,使用命令」w「,移動光標到上一個單詞的詞首,使用命令」b「;移動光標到下一個單詞的結尾,用命令」e「,移動光標到上一個單詞的結尾,使用命令」ge「。

上面這些命令都使用’iskeyword‘選項中的字符來肯定單詞的分界,還有幾個命令,只把空白字符當作」單詞「的分界。固然,這裏說的」單詞「已經不是傳統意義上的單詞了,而是由非空白字符構成一串字串。命令」W「移動光標到下個字串的開始,命令」B「移動到上個字串的開始;命令」E「移動到下個字串的結尾,命令」gE「移動到上個字串的結尾。和上面的命令比較一下,發現什麼規律沒有?

[ H/M/L ]

注意:這幾個命令是大寫的。

使用H/M/L這三個鍵,可讓光標跳到當前窗口的頂部、中間、和底部,停留在第一個非空字符上。H命令和L命令前也能夠加一個數字,但數字的含義再也不是倍數,而是指距窗口頂部、底部的行數。例如,」3H「表示光標移動到距窗口頂部第3行的位置;」5L「表示光標移動到距窗口底部5行的位置。

[ 相對於光標滾屏 ]

在閱讀代碼時,有時咱們須要根據光標所在的位置滾屏,把光標所在行移動窗口的頂端、中間或底部,這時就能夠用到」zt「、」zz「和」zb「。這種滾屏方式相對於翻頁來說,它的好處在於,你可以始終以當前光標位置作爲參照,不會出現翻幾回頁後,發現本身迷失了方向。 ^_^

[ 查找 ]

查找,也能夠作爲一種快速移動的方式。

在vim中查找很是容易,直接在Normal模式下輸入」/「,而後輸入你想查詢的字符串,回車,就跳轉到第一個匹配的地方了。」/「是向下查找,而」?「進行反方向查找。命令」n「重複上一次的查找命令,而命令」N「也重複上一次的查找命令,只不過它按相反方向查找。

vim保存了查找的歷史記錄,你能夠在輸入」/「或」?「後,用上、下光標鍵(或CTRL-P/CTRL-N)翻看歷史記錄,而後再次執行這個查找。

另外你還可使用」q/「和」q?「命令,在vim窗口最下面打開一個新的窗口,這個窗口會列出你的查找歷史記錄,你可使用任何vim編輯命令對此窗口的內容進行編輯,而後再按回車,就會對光標所在的行的內容進行查找。

在上圖中,我使用」q/「命令打開了command-line窗口,這個窗口列出了我以前所查找的字符串。我如今想查找包含」check_swap「,因而先跳到第399行,把」check_tty「改成」check_swap「,而後按回車。此時vim就去查找包含」check_swap「位置了。這個例子比較簡單,你可能以爲command-line窗口沒什麼必要,但若是你要查找的內容是一個很長的正則表達式,你就會發現它很是有用了。

vim中有許多與查找相關的選項設置,其中最經常使用的是’incsearch‘, ‘hlsearch‘, ‘ignorecase‘。

  • incsearch‘表示在你輸入查找內容的同時,vim就開始對你輸入的內容進行匹配,並顯示匹配的位置。打開這個選項,你能夠即時看到查找的結果。
  • hlsearch‘選項表示對匹配的全部項目進行高亮顯示。
  • ignorecase‘選項表示在查找時忽略大小寫。

一般我會打開’incsearch‘和’hlsearch‘選項,關閉’ignorecase‘選項。

下一篇文章介紹了在vim中移動的另一些方法,這些移動命令的須要的技巧更高一些。

[參考文檔]

<< 返回vim使用進階: 目錄

原創文章,請閱讀頁腳的許可方式,轉載請註明:轉載自易水博客 [ http://easwy.com/blog/ ]

本文連接地址: http://easwy.com/blog/archives/advanced-vim-skills-basic-move-method/

文章的腳註信息由WordPress的wp-posturl插件自動生成

相關文章
相關標籤/搜索