post

Vim zh-tw:移動游標

介紹

一旦你開始寫了一些文字,在編輯與重寫的過程中都需要在文件裡的各個部分之間來回移動。舉個例子來說,當你正在寫篇故事,突然你想到了一個新情節的點子,不過必須要回到主角進入城市的地方(或是類似的其它地方)舖梗…你要如何快速地在文章內移動而不至於遺漏你的思緒?

一起來看幾個 Vim 如何讓移動變快的例子。

註記
所有的移動都以目前游標的位置為起點
  • 想要把游標移到下一個單字? 請按w
  • 想要把游標移到下一個段落? 請按}
  • 想要把游標移到第三個’h’出現的地方?請按3fh
  • 想要向下移動35行?請按35j
  • 當做了上面提到的其中一項移動後,想要跳回去原來的地方?請按ctrl-o
  • 想要了解所有的移動技巧嗎?讓我們開始切入正題吧。

首先,開啟一個叫chandrayaan.txt的新檔案,然後打入下面的文字(從維基百科取得):

Chandrayaan-1 is India’s first mission to the moon. Launched by India’s national space agency the Indian Space Research Organisation (ISRO). The unmanned lunar exploration mission includes a lunar orbiter and an impactor. The spacecraft was launched by a modified version of the PSLV XL on 22 October 2008 from Satish Dhawan Space Centre, Sriharikota, Andhra Pradesh at 06:23 IST (00:52 UTC). The vehicle was successfully inserted into lunar orbit on 8 November 2008. The Moon Impact Probe was successfully impacted at the lunar south pole at 20:31 hours on 14 November 2008.

The remote sensing satellite had a mass of 1,380 kilograms (3,042 lb) at launch and 675 kilograms (1,488 lb) at lunar orbit and carries high resolution remote sensing equipment for visible, near infrared, and soft and hard X-ray frequencies. Over a two-year period, it is intended to survey the lunar surface to produce a complete map of its chemical characteristics and 3-dimensional topography. The polar regions are of special interest, as they might contain ice. The lunar mission carries five ISRO payloads and six payloads from other international space agencies including NASA, ESA, and the Bulgarian Aerospace Agency, which were carried free of cost.

用Vim的方式來移動游標

'hjkl'應該會是你最常用的基本按鍵。這四個鍵分別對應了左、下、上、右這四個方向鍵。注意這些鍵恰好位於你右手鍵盤的本位列

但為什麼不用原本的方向鍵呢?因為它們位於鍵盤的另一側,必須將手移動比較遠的距離才能使用它們,這跟離開鍵盤來使用滑鼠沒什麼兩樣。

記得將右手的手指隨時放在jkl;這四個鍵上(拇指則是放在空白鍵上)。現在我們來看一下如何使用這四個鍵:

使用h,j,k,l取代方向鍵

h 你必須向左邊伸長你的食指(原本是在’j’上)去按’h’。這是最左邊的鍵,也就是意味著向左移動。
j ‘j’向下垂的鉤鉤,意味著向下移動。
k ‘k’往上指的一豎,意味著向上移動。
l 最右邊的’l’鍵,意味著向右移動。

注意,我們可以在按下鍵之前加上數字來重複移動的動作。 例如,2j會重複兩次j這個動作。

開啟文字檔chandrayaan.txt並開始練習這些按鍵吧:

  • 先將你的游標移到文件裡的第一個字母’C’。
  • 2j,此時應該會跳過目前的一整行文字與一個空白行而移動到第二行文字,也就是第二段。
  • 2k回到之前的位置,或是使用另一個方式,按ctrl-o跳回原處。
  • 5l向右移動5個字元。
  • 5h向左移動5個字元,或是使用另一個方式,按ctrl-o跳回原處。

養成使用'hjkl'代替方向鍵的習慣。經過幾次的嘗試,你將會發現使用這些鍵可以讓你移動多麼的快速。

同樣地,這裡還有許多的快捷鍵來替代一些特別的移動方式。再次注意到,這些都是為了減少手的移動。在這些特殊的情況,大部分的人還是會想找出這些對應的特別鍵,所以我們將它們放在這裡省去尋找的麻煩。

對應於傳統的移動方式 Vim使用的移動方式
‘home’移到所在行的一開始。 ^鍵(可以聯想到’anchored to the start’)
‘end’移動到所在行的最後。 $鍵(可以聯想到’the buck stops here’)
‘pgup’向上換頁。 ctrl-b表示螢幕回到(’b’ackward)上一頁。
‘pgdn’向下換頁。 ctrl-f表示螢幕前進到(’f’orward)下一頁。

假如你已經知道要移動到的確切行數,例如第50行,那麼按50G。如果沒有指定行數,則按G會跳到檔案的最後一行。那要如何跳到第一行呢?簡單,只要按1G即可。我們可以發現一個簡單的按鍵卻可以做到這麼多的事情。

  • 移動游標到第一行,按1G
  • 向右移動20個字元,按20l
  • 移動到第一個字元,按^
  • 移動到最後一個字元,按$
  • 移動到最後一行,按G

假如你要移動的範圍是顯示在螢幕上的文字,那要怎麼做呢?

  • 按H就像是儘量往高(’h’igh)處移動。(也就是顯示在螢幕上的第一行)
  • 按M就是往螢幕中間(’m’iddle)的地方移動。
  • 按L就像是儘量往低(’l’ow)處移動。(也就是顯示在螢幕上的最後一行)

你一定開始注意到了幾個重點,也就是 不看鍵盤打字 與 不要將手移出主鍵盤的位置。這是件好事。

單字、句子、段落

我們已經看過如何在字元與行之間做移動,但我們會比較傾向將一段文字視為許多的單字並將它們組合在一起 - 接著是句子、段落、章節等依序組合下去。所以,為什麼不在一部分的文字,也就是所謂的”文字物件”之間進行跨越呢?

我們先從我們的範例中擷取出一開始的幾個字:

The polar regions are of special interest, as they might contain ice.

首先,我們將游標移動到第一個字元,按^

[T]he polar regions are of special interest, as they might contain ice.

注意一下,我們用中括號來標記目前的游標位置。

想要移動到下一個單字(’w’ord)?按w。這時游標應該會在’polar’的’p’。

The [p]olar regions are of special interest, as they might contain ice.

那要怎麼移到下兩個字的前方?只要在w之前加個數字:2w

The polar regions [a]re of special interest, as they might contain ice.

類似的方式,要移動到下一個字的後方(’e’nd),按e

The polar regions ar[e] of special interest, as they might contain ice.

要回到(’b’ackward)前一個字,按b。在b前加上數字,例如2b會回到前2個字。

The polar [r]egions are of special interest, as they might contain ice.

請參閱:help word-motions來取得更多相關的細節。

我們已經看過如何在字元與單字間做移動,現在讓我們一起在句字之間移動吧。

[C]handrayaan-1 is India’s first mission to the moon. Launched by India’s national space agency the Indian Space Research Organisation (ISRO). The unmanned lunar exploration mission includes a lunar orbiter and an impactor. The spacecraft was launched by a modified version of the PSLV XL on 22 October 2008 from Satish Dhawan Space Centre, Sriharikota, Andhra Pradesh at 06:23 IST (00:52 UTC). The vehicle was successfully inserted into lunar orbit on 8 November 2008. The Moon Impact Probe was successfully impacted at the lunar south pole at 20:31 hours on 14 November 2008.

將游標移動到第一個字元(^)。

要移動到下一個句字,按)

Chandrayaan-1 is India’s first mission to the moon. [L]aunched by India’s national space agency the Indian Space Research Organisation (ISRO). The unmanned lunar exploration mission includes a lunar orbiter and an impactor. The spacecraft was launched by a modified version of the PSLV XL on 22 October 2008 from Satish Dhawan Space Centre, Sriharikota, Andhra Pradesh at 06:23 IST (00:52 UTC). The vehicle was successfully inserted into lunar orbit on 8 November 2008. The Moon Impact Probe was successfully impacted at the lunar south pole at 20:31 hours on 14 November 2008.

這不是很酷嗎?

要移到前一個句子,按(

去吧,試試看你可以移動多快。同樣的,你可以在前面加一個數字,像是3)來移動到後三個句子。

現在,使用整個文件並試試在段落之間移動。按}(右大括號)移動到下一個段落,按{(左大括號)移動到上一個段落。

注意一下,較’大’的括號就是用在較大的文字物件。假如你已經注意到這個,那麼恭喜你,你已經像個贏家(winner)在思考了,喔,是像個Vimmer在思考了。

再次注意到,不要試著去記憶這些按鍵,而是試著讓它成為一種習慣,讓你的手指自然地使用這些按鍵。

請參閱:help word-motions來取得更多相關的細節。