Input Mode

Vi 的 input mode 算是三種狀態中最單純的了。 基本上,就是一般的文字輸入;要進入 input mode, 除了【 i 】﹝ insert ﹞和【 a 】﹝ append ﹞之外, 一般常用的還有【 o 】和【 O 】。 【 o 】會在下一列輸入文字,【 O 】則是在上一列輸入文字。 一但進入 input mode 以後,你就只能不斷輸入文字, 而無法控制游標移動。

特殊控制字元

在 input mode 時, 先按【 Ctrl-V 】,螢幕上會出現 ^。 再按【 Enter 】,【 Esc 】或【 Ctrl-L 】, 在螢幕上可見 ^M^[^L。 這些都是特殊控制字元,它們代表標準的 ASCII 控制碼。 雖然看來像是兩個符號﹝一個 ^ 和一個 M ﹞, 用 h 和 l 左右移動看看,就知道它們其實是一個符號。

Tab

將游標一次跳到一列中的某些位置的動作,叫作 tab, 因為這個動作常在作表格﹝ table ﹞時發生。 這些特定的位置稱作 tabstop。Tab 主要是為了讓表格看起來整齊易懂而存在的。 也有許多人利用 tab 來控制程式原始碼,增加可讀性。

在 vi 中,當你輸入控制碼 ^I,vi 便會作 tab, 使游標移到下一個 tabstop。 一般而言,當你按【 Tab 】時,vi 就會作 tab,在文章中會放入控制碼。 雖然在 tabstop 和 tabstop ﹝或是某個字元和下一個 tabstop ﹞之間有一段空白, 這些空白並不是由若干空格字元造成,而是由一個控制碼造成。 你可以試著用游標移動看看,就會發現這只是一個字元。

Tabstop 的位置在每一列的第 n*t + 1 格。 其中 n 是非負整數,t 由 vi 的一個參數 ts 決定。 今日絕大多數的設定為 t=8。這代表兩個 tabstop 之間的距離是 8 格。 如果你要改變設定,下指令 :set ts=t, 這樣 ts 的設定就會變成 t。 在此 n 只能是自然數。請讀者自行試驗看看修改了 ts 以後, 會發生什麼變化。

參數

在 vi 中有許多參數可以設定,所謂的參數,就類似 windows 中的選項。 參數往往不會改變你的編輯內容,而是改變你的編輯的環境。 雖然你的螢幕看起來不一樣,但是存到檔案中的結果是一樣的。 例如之前提及的 ts,不管你如何設定,儲存的檔案都不會有影響。 所有的 tab 都會存成一個控制碼 ^I

參數的設定,要經過 line mode,要進入 line mode, 在 command mode 中按【 : 】就會進入 line mode。 所以之前的指令是由 : 開始的, 因為本文還沒有打算介紹 line mode, 所以一切經過 line mode 的動作都會用這種表示法帶過去。

在 command mode 中輸入指令 :set all 可看到此刻 vi 的所有參數設定值。 因為篇幅有限,所以只再介紹一個參數。 在 line mode 中,輸入 set sm, 這樣一來,每當你輸入 )}, vi 便會自動把標移動到對應的 ({,一秒後移回, 如果沒找到,就會發出一聲嗶。

換列

通常螢幕上每列恰有 80 格。 所以在 input mode 中連續輸入超過 80 個字元時會超過螢幕寬度。 vi 的標準反應是將第 81 個字元顯示在螢幕的下一列的第一格,依此類推。 在 command mode 中用 jk 試試, 就會發現這些看起來像兩列的字,在計算機內部仍被視為同一列。

以軟體而言,一列必須以【 Enter 】結束, UNIX 使用一控制碼 ^J ﹝ Linefeed ﹞, PC 使用兩碼 ^M^J﹝ Carriage-Return Linefeed ﹞來記錄一列的結束。 理論上 vi 可以接受任意長度的列。

要是設定參數 wm=m。 則當輸入到螢幕右端 m 格之內時, 進入此範圍的字 (word) 會整個被移到下一列; 也就是,vi 自動加入一個 【 Enter 】。這個動作叫 autowrap。 原始設定為 wm=0,意即不作 autowrap。 vi 不接受負的 m 值。 輸入中文文件時,wm 參數沒什麼大用。

若在編輯當中有任何系統訊息發生,例如郵差按鈴或有人想聊天, 可先回到 command mode,按【 Ctrl-L 】重畫螢幕, 螢幕重畫後,雜訊便會被清除。 有些終端機程式對中文的支援並不是很好, 常常會導致文字破碎,這時候你也可以按【 Ctrl-L 】重畫螢幕, 可以讓文字看起來回復正常。

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


製作人、
修改記錄
李易霖 (02/7/18) ---