Line mode,顧名思義,就是列模式;也就是以列為單位來處理文章。 早期的編輯器都是以列為單位來列印、修改文章的, 而 vi 則是由一個名為 ed 的列編輯器發展出來的,所以也有對列的編輯功能。[ 前一節 ]‧[ 後一節 ]‧[ 回目錄 ]要進入 line mode,只要在 command mode 下按【 : 】, 螢幕左下角會出現 :。你的輸入都會跟在 : 的後面, 當你按下【 Enter 】時 vi 才會執行你下的指令,執行以後會再回到 command mode。 按【 Esc 】則會放棄你的輸入,回到 command mode。 接下來的說明皆假設是在 line mode 下,一個指令的後面都要加上一個【 Enter 】。
當你輸入一個正整數 n 時,游標會跳到第 n 列。 當你按 .= 時,vi 會顯示目前在第幾列。
d 刪除列, 當你要刪除第二十列時,可以下指令 20d。
m 移動列, 如果你要把第三列移動到第十列的後面,下指令 3m10。
co 或 t 複製列。 指令 2t3 會把第二列複製放到第三列下面。
這樣一列一列的下指令實在是太慢了, 我們也可以指定一個連續的範圍,例如要刪除 1~10 列, 我們可以下指令 1,10d,這樣 vi 就會刪除 1~10 列。 指令中的 1,10 表示從第一列到第十列, 放到最前面表示要 vi 對這十列字作動作。
再例如要移動 3~10 列到第十二列的後面,就要下指令 3,10m12。
在 line mode 中,每一個指令都要告訴 vi 你要對那一列作動作, 如果不指定,vi 就會對你目前游標所在的列作動作。 你要處理的列數放在最前面,後面才跟著指令。 列數的表示法有幾個比較重要而實用的:
- 只有一列時直接輸入列數即可。
- 當你要處理連續好幾列時,可以用 m,n 表示, vi 會處理從第 m 列到第 n 列的文字 ﹝m 必須小於獲等於 n﹞。
- . 代表目前游標所在的列,$ 代表檔案的最後一列。 例如下指令 .,$d 會把目前游標所在的列到最後一列的文字刪除。
- 你可以用 +、- 符號,他們真的就是加和減。 例如指令 .,.+20m5 會把由目前游標所在的列到後面 20 列的文字搬到第五列。 Vi 會把 .+20 變成目前游標所在的列再加二十。
- 當你下指令 100,.+5d 時,如果目前游標所在的加五以後列沒有大於一百, vi 就會產生錯誤訊息,因為你第二個數比第一個數小。 但是如果你下指令 100;.+5d 卻不會出錯﹝除非你的檔案列數不到 105﹞。 因為當你用 ; 取代 , 時, vi 會將游標所在的列設成 ; 前面的那個數,所以第二個數﹝.+5﹞一定是 105。
在 line mode 下也有搜尋指令,當你要搜尋一個字串, 你可以下指令 /string, vi 會自動尋找游標所在的列以後的第一個含有 string 的列, 而游標所在的列則會是最後一個被搜尋的﹝因為會 wrap﹞。
/string/ 表示含有 string 的列的列數, 所以指令 /HTML/= 會印出游標下面第一個含有 HTML 的列的列數。 如果你下指令 /HTML/,/BODY/d, 如果游標下面第一個含有 HTML 的是第 m 列, 第一個含有 BODY 的第 n 列, 則上述指令等於 m,nd。
讀者看到這裡,大概會認為 line mode 並沒有太大的用處, 但是至少要把指定列數的方法記下來, 因為下一節要說的全域代換肯定是 command mode 無法辦到的。
製作人、 修改記錄 |
李易霖 (02/8/18) --- |