vi 簡易使用說明

Operation Modes

基本操作

Command mode 基本功能鍵簡介

進入 Insert mode

移動游標

刪除

更改或刪除字串

取代

複製

跳至指定之行

Join

取消

Redo Last Command

搜尋字串

Ex mode 指令簡介


Untitled Document
Operation Modes
   
vi 是一個 UNIX 上 非常風行的螢幕式編輯器, 在 1976 年由 UC Berkeley 的 Bill Joy 設計出來,作為 ex 編輯器的一部份, vi 具備全螢幕游標控制的能力, 使用者透過它可以用互動方式編輯檔案。 反觀早期無法控制游標的列編輯器(Line Editor), 游標無法於螢幕上游走,非常的不方便。 (註:第一代的CRT終端機並不具備游標控制的功能,只能使用 列編輯器,使用者必須使用非常難用的編輯編輯指令指揮編輯器 進行文件編輯。) 螢幕式編輯器大大提高了 編輯效率。 vi 搭配具有 regular expression 能力的 ex, 其編輯效率更是如虎添翼,筆者用 vi 的時間遠遠超過了微軟的 Word。
 
操作模式
   
vi 有三種操作模式,使用者經常需要在此三種模式之間互相切換:
Command mode 控制螢幕游標之移動,字元之刪除, 搬移複製某區段,大部份的控制指令都在此模式下運作。
Insert mode 本模式可輸入文字。由 Command mode 進入 Insert mode 下, 才可做文字資料之輸入, 按 <ESC> 鍵可回到 Command mode。
Last line mode (Ex mode) 呼叫 ex 指令作用於正在編輯的檔案上。 例如:整個檔案中的某字串之取代、將檔案寫入或離開編輯器、 設定編輯環境、尋找字串、列出行號..等。
Fri Oct 13 22:26:23 CST 2023 Untitled Document
基本操作
基本操作
 
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 存入指定檔案,如果該檔案早已存在,系統會 提出警告並拒絕執行
:w! filename 強迫存入指定檔案,如果該檔案早已存在,系統 會覆蓋之
:q 離開,若未存檔,系統會提出警告並拒絕執行
:q! 強迫離開,若未存檔,系統會放棄所做的編輯直接跳離vi
:wq 存入原檔並離開 vi
Fri Oct 13 22:26:23 CST 2023 Untitled Document
Command mode 基本功能鍵簡介
   
在Command mode中,使用者可以下達各種不同的指令,其格式分為三段:
作用次數   作用指令  作用物件
  
「作用次數」的意思是,後面所跟的指令必須被重複做幾次的意思。 我們將在以後的例子中,學習它的用途。
   
如果沒有指定「作用次數」時,只做一次 (default=1)。
   
而「作用物件」可以從缺 (optional)。
Fri Oct 13 22:26:23 CST 2023 Untitled Document
進入 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個*=*,得到如下的雙線:
============================================================
Fri Oct 13 22:26:23 CST 2023 Untitled Document
移動游標
 
要訣:在 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 是 設計給終端機用的,不是給個人電腦用的。
Fri Oct 13 22:26:24 CST 2023 Untitled Document
刪除
 
要訣:在 Command mode 中可用下列指令刪除數個字元或行。
指令 作用
x 刪除一個字元
#x 刪除數個字元,例, 3x 表示刪除 3 個字元
dd 刪除游標所在之行
#dd 刪除自游標算起之數行
Fri Oct 13 22:26:24 CST 2023 Untitled Document
更改或刪除字串
 
要訣:在 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之前一個字元,刪除整個字串
Fri Oct 13 22:26:24 CST 2023 Untitled Document
取代
 
要訣:在 Command mode 中可用 r 或 R 進行更改字串。
指令 作用
r 取代游標處之字元
R 自游標所在處開始取代字元直到按 <ESC> 為止
Fri Oct 13 22:26:25 CST 2023 Untitled Document
複製
 
要訣:在 Command mode 中可用 y 或 yy 複製字串。
 
用指令y複製字串至暫存區 (y後面須指定作用範圍)
指令 作用
y3w 拷貝三個英文字
yfx 從游標處起至字元x,拷貝整個字串
ytx 從游標處起至字元x之前一個字元,拷貝整個字串
 
用指令yy複製區塊(一或多行文字)至暫存區
指令 作用
yy 拷貝一行
3yy 拷貝三行
 
用 p 或 P 將暫存區中之字串或區塊貼入
指令 作用
P 將暫存區內之物件貼入,如是字串,則貼到游標之前, 如是區塊,則貼到上一行
p 將暫存區內之物件貼入,如是字串,則貼到游標之後, 如是區塊,則貼到下一行
Fri Oct 13 22:26:25 CST 2023 Untitled Document
跳至指定之行
 
要訣:在 Command mode 中可用 G 直接跳至某行。
指令 作用
G 游標移至最後一行行首
#G 例: 44G 移動游標至第 44 行行首
Fri Oct 13 22:26:25 CST 2023 Untitled Document
Join
 
要訣:在 Command mode 中可用 J 將本行與次一行合併。
   
如要將兩行併成一行,這個功能遠遠快過 MS-Word。
指令 作用
J 將本行與次一行合併。
Fri Oct 13 22:26:26 CST 2023 Untitled Document
取消
 
要訣:在 Command mode 可用 u 及 U 取消上一次的更動
指令 作用
u 取消上一次的更動
U 取消在游標所在之行之所有更動
   
VI的取消動作與MS-Word 裡的復原動作不完全相同, VI只記得上一次的更動,而不記得更早之前的更動, 因此只能還原一次更動,連續下兩個u指令的結果是放棄取消 的動作,變成重作原先的更動。 所以連續的 u 等於復原與重做的連續切換。 奇數次的 u 等於一個u,而偶數次的 u 等於零個u。 (U 也是相同的行為。)
Fri Oct 13 22:26:26 CST 2023 Untitled Document
Redo Last Command
 
要訣:在 Command mode 中用 '.' 重複上一次的更動。
指令 作用
. 重複上一次的更動
Fri Oct 13 22:26:27 CST 2023 Untitled Document
搜尋字串
 
要訣:在 Command mode 中用 /pat/ 或?pat? 搜尋字串。
向前尋找字串 /word
向後尋找字串 ?word
Fri Oct 13 22:26:27 CST 2023 Untitled Document
Ex mode 指令簡介
 
要訣:在 Command mode 中,按 ':' 可進入 Ex mode。
1.列出行號 :se nu
2.取消列出行號 :se nonu
3.批次代換字串 :10,20s/nccu/NCC/
4.列出所有選項 :se all
參考資源
   
精通 SunOS (李偉民譯, 松崗)
   
SunOS 速成手冊 (施得勝、林國瑞著, 第三波)
Fri Oct 13 22:26:27 CST 2023