Operation Modes |
---|
vi 是一個 UNIX 上 非常風行的螢幕式編輯器, 在 1976 年由 UC Berkeley
的 Bill Joy 設計出來,作為 ex 編輯器的一部份, vi
具備全螢幕游標控制的能力, 使用者透過它可以用互動方式編輯檔案。
反觀早期無法控制游標的列編輯器(Line Editor),
游標無法於螢幕上游走,非常的不方便。
(註:第一代的CRT終端機並不具備游標控制的功能,只能使用
列編輯器,使用者必須使用非常難用的編輯編輯指令指揮編輯器
進行文件編輯。)
螢幕式編輯器大大提高了
編輯效率。 vi 搭配具有 regular expression 能力的 ex,
其編輯效率更是如虎添翼,筆者用 vi 的時間遠遠超過了微軟的
Word。
|
操作模式
|
vi 有三種操作模式,使用者經常需要在此三種模式之間互相切換:
|
基本操作 |
---|
基本操作
|
1. 進入 vi
|
在系統提示符號後輸入 vi 及檔案名稱後即進入 vi 全螢幕編輯畫面,
且在 Command mode 中。例如:
|
$ vi testfile |
---|
2. 切換至 Insert mode 編輯文件:
|
在 Command mode 中可按 'i' 或 'a' 或 'o' 或 'I' 或 'A' 或 'O'
等指令進入 Insert mode。
(事實上,R,S,s,C,c等更改指令也可視為進入Insert mode。)
|
3. 結束 insert 時,按<ESC>鍵,返回 Command mode。
|
4. 按冒號 ':'進入 ex mode,
|
執行一行指令後,自動返回 Command mode。
|
5. 離開 vi 及存檔:
|
在 Command mode 中可用 ZZ 指令存檔並跳出 vi 回到作業系統,
|
在 Ex mode 中,可先存檔,再跳出:
|
:w | 存入原檔案
:w filename
| 存入指定檔案,如果該檔案早已存在,系統會
提出警告並拒絕執行
| | 強迫存入指定檔案,如果該檔案早已存在,系統
會覆蓋之
| :q
| 離開,若未存檔,系統會提出警告並拒絕執行
| :q!
| 強迫離開,若未存檔,系統會放棄所做的編輯直接跳離vi
| :wq
| 存入原檔並離開 vi
| |
---|
Command mode 基本功能鍵簡介 |
---|
在Command mode中,使用者可以下達各種不同的指令,其格式分為三段:
|
「作用次數」的意思是,後面所跟的指令必須被重複做幾次的意思。
我們將在以後的例子中,學習它的用途。
|
如果沒有指定「作用次數」時,只做一次 (default=1)。
|
而「作用物件」可以從缺 (optional)。
|
進入 Insert mode |
---|
要訣:在 Command mode 中可按 'i' 或 'a' 或 'o' 或 'I' 或 'A' 或 'O'
進入 Insert mode
|
指令 | 作用
i
| 自游標之前
| 插入隨後所鍵入之字串
| 以<ESC>結束
| I
| 自本行之前
| 插入隨後所鍵入之字串
| 以<ESC>結束
| a
| 自游標之後
| 插入隨後所鍵入之字串
| 以<ESC>結束
| A
| 自本行之後
| 插入隨後所鍵入之字串
| 以<ESC>結束
| o
| 自游標所在之次行
| 插入隨後所鍵之字串
| 以<ESC>結束
| O
| 自游標所在之上一行
| 插入隨後所鍵入之字串
| 以<ESC>結束
| |
---|
例:指令「60I=<ESC>」意思是插入60個*=*,得到如下的雙線:
|
移動游標 |
---|
要訣:在 Command mode 中可用下列指令移動游標:
|
指令 | 作用
h
| 游標左移一格
| l
| 游標右移一格
| k
| 游標上移一格
| j
| 游標下移一格
| ^B
| 螢幕展示上一頁(back)
| ^F
| 螢幕展示下一頁(forward)
| ^
| 向上捲動(up)
| ^D
| 向下捲動(down)
| G
| 移到檔案最後
| 1G
| 移到檔案開頭
| #G
| 移到檔案之第 # 行
| 0
| 移到本行開頭
| $
| 移到所在該行之最末
| #|
| 移到本行之第 # 字元
| w
| 移到下一個英文字之開頭
| #w
| 移到下#個英文字之開頭
| e
| 移到所在英文字之最末字元
| fx
| 移到右邊第一個'x'字元之位置
| tx
| 移到右邊第一個'x'字元之左邊
| /pattern/
| 向前搜尋字串
| ?pattern?
| 向後搜尋字串
| |
---|
這裡有一個問題,為何不用鍵盤上的箭頭鍵來移動游標?
答案很簡單,早期的終端機上的鍵盤,跟現在個人電腦的鍵盤
大大的不同,根本沒有箭頭鍵,沒有功能鍵,更沒有視窗鍵,vi 是
設計給終端機用的,不是給個人電腦用的。
|
刪除 |
---|
要訣:在 Command mode 中可用下列指令刪除數個字元或行。
|
指令 | 作用
x
| 刪除一個字元
| #x
| 刪除數個字元,例, 3x 表示刪除 3 個字元
| dd
| 刪除游標所在之行
| #dd
| 刪除自游標算起之數行
| |
---|
更改或刪除字串 |
---|
要訣:在 Command mode 中可用 c 或 d 指令搭配作用範圍更改或刪除字串。
|
(w 代表一個 word,意指數個英文字母組成的 word, 在電腦中,word
比較接近英文的 word 而跟中文的「字」意義大大的不同,請勿誤會)。
|
指令 | 作用
cw
| 更改游標處之 word
| c#w
| 更改數個 word,例: c3w 代表更改 3 個 word
| cfx
| 自游標處起至字元x,更改整個字串
| ctx
| 自游標處起至字元x之前一個字元,更改整個字串
| |
---|
指令 | 作用
dw
| 自游標處刪除到該 word 之尾端
| d#w
| 自游標處刪除數個 word ,例: c3w 表更改 3 個英文字
| dfx
| 自游標處起至字元x,刪除整個字串
| dtx
| 自游標處起至字元x之前一個字元,刪除整個字串
| |
---|
取代 |
---|
要訣:在 Command mode 中可用 r 或 R 進行更改字串。
|
指令 | 作用
r
| 取代游標處之字元
| R
| 自游標所在處開始取代字元直到按 <ESC> 為止
| |
---|
複製 |
---|
要訣:在 Command mode 中可用 y 或 yy 複製字串。
|
用指令y複製字串至暫存區 (y後面須指定作用範圍)
|
指令 | 作用
y3w
| 拷貝三個英文字
| yfx
| 從游標處起至字元x,拷貝整個字串
| ytx
| 從游標處起至字元x之前一個字元,拷貝整個字串
| |
---|
用指令yy複製區塊(一或多行文字)至暫存區
|
指令 | 作用
yy
| 拷貝一行
| 3yy
| 拷貝三行
| |
---|
用 p 或 P 將暫存區中之字串或區塊貼入
|
指令 | 作用
P
| 將暫存區內之物件貼入,如是字串,則貼到游標之前,
如是區塊,則貼到上一行
| p
| 將暫存區內之物件貼入,如是字串,則貼到游標之後,
如是區塊,則貼到下一行
| |
---|
跳至指定之行 |
---|
要訣:在 Command mode 中可用 G 直接跳至某行。
|
指令 | 作用
G
| 游標移至最後一行行首
| #G
| 例: 44G 移動游標至第 44 行行首
| |
---|
Join |
---|
要訣:在 Command mode 中可用 J 將本行與次一行合併。
|
如要將兩行併成一行,這個功能遠遠快過 MS-Word。
|
指令 | 作用
J
| 將本行與次一行合併。
| |
---|
取消 |
---|
要訣:在 Command mode 可用 u 及 U 取消上一次的更動
|
指令 | 作用
u
| 取消上一次的更動
| U
| 取消在游標所在之行之所有更動
| |
---|
VI的取消動作與MS-Word 裡的復原動作不完全相同,
VI只記得上一次的更動,而不記得更早之前的更動,
因此只能還原一次更動,連續下兩個u指令的結果是放棄取消
的動作,變成重作原先的更動。
所以連續的 u 等於復原與重做的連續切換。
奇數次的 u 等於一個u,而偶數次的 u 等於零個u。
(U 也是相同的行為。)
|
Redo Last Command |
---|
要訣:在 Command mode 中用 '.' 重複上一次的更動。
|
指令 | 作用
.
| 重複上一次的更動
| |
---|
搜尋字串 |
---|
要訣:在 Command mode 中用 /pat/ 或?pat? 搜尋字串。
|
向前尋找字串 | /word
向後尋找字串
| ?word
| |
---|
Ex mode 指令簡介 |
---|
要訣:在 Command mode 中,按 ':' 可進入 Ex mode。
|
1.列出行號 | 2.取消列出行號
| | 3.批次代換字串
| | | | |
---|
參考資源
|
精通 SunOS (李偉民譯, 松崗)
|
SunOS 速成手冊 (施得勝、林國瑞著, 第三波)
|