2016-09-20

Vim 快速移動游標的操作方法

阿舍搞定方向鍵之後,接下來,阿舍在用 Vim 寫程式的時候,最常遇到的問題,就是,要如何的把游標快速的移到阿舍想要去的位置來寫東西或改東西,而阿舍最常遇到且苦惱的情況,就是像,一行很長的程式碼,阿舍只想要改其中的一個字母時,怎麼移才會快 ? 還有,當鍵盤上沒有 Page Up 和 Page Down 鍵可用時,要怎麼辦 ? 當然,還有,Vim 的快捷鍵們和阿舍都不是很熟的問題哩 ! 但是,由於阿舍有堅忍的惰性,所以,都是一一的使用方向鍵來克服,只有到阿舍覺得受不了的時候,才會去好好的記下來和學起來,而這篇,就是在阿舍經年累月的努力下,記得下來而且有在用的操作方式 ... 提供參考囉 !


一開始,阿舍就先來說明如何,如何快速將游標定位到某一行好了,這個是阿舍不小心打錯時發現的,阿舍某天要切換檔案時,本來,是要打  :10b ,結果,不小心只打了 :10 就按下 Enter 鍵,然後,就發現游標移到第 10 去了哩 ! 原來,要移到那一行就只要用 :行號 就可以,其實,還滿方便的哩 ! 但是,後來,阿舍才發現,直接用 10G,就是用 行號G 也可以,但是,G 要大寫,對阿舍來說,頗麻煩的,所以,阿舍就還是用 :行號 囉 ! ... 呵 !

再來要說的,就是在某一行裡,阿舍想要把游標移到第幾欄或那一個字來修改的方法,本來,阿舍很天真的就去查到在 Vim 用快速移動游標到第幾欄的方法,就是 欄號| 或 :11| ,例如,阿舍想要移到第 11 欄,就可以直接輸入 11| 或是用 :11| 加 Enter 的方式,可是,阿舍幾乎很少會知道阿舍要動的那個位置是在第幾欄哩 ! 所以,有點給他不太實用哩 ! ...

後來,阿舍在某一次的搜尋中發現,Vim 搜尋的不是都會從游標所在的位置來開始尋找嗎 ? 所以,阿舍只要用 /要改的字或字串 來搜尋,這樣,游標就會移到阿舍要動的那個字或附近,這樣,阿舍就不用在那邊算欄位數或慢慢移動游標了哩 ! 不過,那如果要改的字是在游標的前面的話,那要怎麼辦呢 ? 這個 ... 阿舍都是直接按下向上鍵來把游標移到上一行,再來做搜尋,就沒有去用那個向後搜尋的功能哩 ...

最後,就是換頁鍵的部份,阿舍有好一陣子沒用到 Windows 鍵盤了,不過,阿舍依稀還記得,好像在某些境境下,Vim 是可以用鍵盤上的 Page Up 和 Page Down 鍵來做換頁的,但是,好像大部分的情況下是不行的,所以,阿舍就有去查 Vim 的換頁到底要按那個鍵,後來,就有查到是用 Ctrl-b 和 Ctrl-f,要用組合鍵,有點小麻煩,而且,阿舍還常常會搞不清楚那一個是往上翻、那一個是往下翻哩 ...

於是,阿舍就想找看看,有沒有更簡單的方法,阿舍有想到將游標移到畫面上的第一行或到最底下那一行再往下移動的方法,可是,移到畫面上的第一行是用 Shift-h (最高),移到畫面上的最後一行是用 Shift-l (最低),中間則是 Shift-m,一樣是組合鍵,沒有比較省工和好記,所以,阿舍只好回來好好記住 Ctrl-b 和 Ctrl-f 的差別,阿舍仔細想想,原來,Ctrl-b 的 b 是 Backward 的意思,所以,阿舍認知的「往上翻」在 Vim 就變成「往回翻」,而 Ctrl-f 的 f 則是 Forward,意思就是「往前翻」,和阿舍認知的畫面往下是「往下翻」不一樣哩 !

至於,阿舍常常會用到的回到文件的第一行或最後一行,因為是 gg 和 Shift-G,還滿好記的,因此,阿舍就還滿容易記住的,而關於移到每行的第一個字或行尾的指令,則是因為阿舍學的 RegEx 很多都是用 ^ 符號 (Shift-6) 表行首,$ 符號 (Shift-4) 表示行尾,所以,阿舍一下就連起來了,就沒特別去記住它,其實,用這二個服號來表示頭尾的地方好像還滿多的,記下來也滿實用的哩 ...


推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

3 則留言 :

Unknown 提到...

移到第 10 行除了打 :10 或 10G 以外,還可以打 10gg
這樣就不用碰 shift 了 ^O^

Arthur 提到...

Hello,

原來還有這一招哩 ! ... Cool !

謝謝囉 ! .. ^^=

夢見草 提到...

我在vim裡使用page up 和 page down 從沒遇過問題,不知你常常不能用是什麼情況?
debian 預設所安裝的是 vim-tiny 這是精簡版,很難用,常用功能缺很多,所以通常我都會把它移掉,另外安裝完整的vim版本,可能是這原因,所以我在使用 Page up 和 down 鍵時都沒遇過問題。

張貼留言

歡迎留言提問和討論 .... 😁