移動

在 vi 的 comand mode 中控制游標位置的指令, 可分為兩種。 一種稱為游標移動指令,在之前中已提過【 h 】、【 j 】、【 k 】、【 l 】, 【 H 】、【 M 】、【 L 】、【 G 】或 n【 G 】、 【 Ctrl-F 】及【 Ctrl-B 】。 此外仍有【 Ctrl-U 】及【 Ctrl-D 】, 分別是向上和下移若干列﹝標準設定為 12 列,大約半個螢幕﹞。

以上的移動指令都可以跟在一個正整數 n 之後。 對【 h 】,【 j 】,【 l 】,及【 Ctrl-F 】,【 Ctrl-B 】而言, 都表示下那個移動指令 n 次。 對【 M 】 沒有影響。 對【 H 】 表示移到此螢幕上的第 n 列, 對【 L 】 表示移到此螢幕的倒數第 n 列。 對【 Ctrl-U 】及【 Ctrl-D 】 分別表示往上或往下卷 n 列, 而且 vi 會記住此 n, 以後當你按【 Ctrl-U 】及【 Ctrl-D 】時, 會向上或向下捲動 n 列。

另一種控制游標位置的指令稱為巡弋指令。 在之前介紹了【 w 】、【 b 】、【 e 】、【 0 】、【 $ 】、【 / 】。 此時『字』的定義是符合直覺的英文字或數字, 以空格,tab,或標點符號相隔者。 例如

let us compute sin(2x+1), ok?
連續按【 w 】游標會停在 l、u、c、s、l 、(、2、+、1、)、o 和 ? 等處。 另一組指令【 W 】,【 B 】 及【 E 】 的作用與其對應的小寫指令相同, 只是『字』的定義變了。 此時任意字串, 只要以空格或 tab 相隔的都算是一個字。 上例中連續按【 W 】則游標只會停在 l、u、c、s、o 等處。

與【 / 】 對應的是【 ? 】, 它朝著游標上方 (與【 / 】 反向尋找字串。 但【 / 】 (【 ? 】) 在到達最後一列 ( 第一列 ) 時, 都會自動 wrap ﹝到達文章結尾或開頭時,會回到文章另一端的動作﹞。

另外兩族巡弋指令是【 t 】,【 T 】 及【 f 】,【 F 】。 若 c 是一字元, 則【 fc 】 (following) 將游標移到同列右邊的第一個 c, 【 tc 】 (upto) 移到 c 的前一格。 【 Fc 】 及【 Tc 】 朝反方向 (左邊) 巡弋。 按【 ; 】 表示重複上一個【 f 】、【 t 】、【 F 】、【 T 】 指令。

當游標在一個左括號【 ( 】或一個右括號【 ) 】上, 按【 % 】 跳到它所對應的那一半去。 按【 ( 】 表示跳到這一句話的第一個字, 如果已經在那裡,跳到前一句話的第一個字。 按【 ) 】 跳到下一句話的第一個字。 所謂一句話即是以英文句點隔開的一個字串。 按【 { 】 跳到這一段落的上一列, 【 } 】 跳到這一段落的下一列。 所謂一段落即是以空列﹝連空格和 tab 都沒有﹞隔開的一個字串。 嚴格一點說,【 { 】 跳到上一次您連續按了兩個【 Enter 】的地方, 或是整個檔案的最前面。

除了【 / 】,及【 ? 】, 巡弋指令前也可先輸入一個正整數 n 。 其意義都是執行該指令 n 次。

巡弋指令的長處在於可與刪除指令【 d 】 合用。 指令 dd 刪掉一整列。 而 dx, 其中 x 是一個巡弋指令, 則由游標原在地一路刪到 x 所該到的地方。 ﹝除了【 dw 】 和【 dW 】,它刪到【 w 】 或【 W 】 所該到的前一格, 其意義很直覺﹞。

dddx 前都可添一個正整數 n 。 只要 nx 是有意義的。 ndxdnx 的意義是一樣的。 剛才被刪掉的東西,就像被 vi 吃了放在一個暫存的地方。 可按【 p 】﹝ paste ﹞或【 P 】 使它吐出來。 【 P 】 使它吐在游標的左邊或上邊,【 p 】 則是吐到右邊或下邊。

[ 前一節 ]‧[ 後一節 ]‧[ 回目錄 ]


製作人、
修改記錄
李易霖 (02/7/19) --- 02/08/14 (單)