You are on page 1of 4

Linux 系統管理講義:VI 編輯器

Linux 系統管理講義:VI 編輯器


一、 vi 簡介 :
1. vi 是各種 UNIX-Like 系統都會支援的全螢幕文字編輯器,任何一位 UNIX/Linux 系統管理者都應該學會 vi。
2. vi 的操作環境是針對熟悉 UNIX 系統的使用者而設計,內建大量的快速鍵指令,初學者必須多加練習。
二、 vi 的操作環境 :
vi 共分為三種模式,分別是命令模式(Command mode)、編輯模式(Insert mode)與指令列模式
(Last line mode)三種;也可以將命令模式與指令列模式統稱為「命令模式」。
1. 命令模式:命令模式為 vi 的初始模式,可以使用『上下左右』或『k j h l』按鍵來移動游標,您可以使用
『刪除字元』或『刪除整行』來處理檔案,也可以使用『複製、貼上』來處理您的文件資料。
(在編輯模式或指令列模式中按「ESC」鍵可換回命令模式)
2. 編輯模式:在命令模式中按下『i, I, o, O, a, A, r, R』等字母之後才會進入編輯模式。按下上述的字母時,
     在畫面的左下方會出現『 INSERT 或 REPLACE 』的字樣,才可以做文字資料輸入。
     (在命令模式中按『i, I, o, O, a, A, r, R』可進入編輯模式)
3. 指令列模式:在命令模式當中,輸入『 : 』或「 / 』就可以將游標移動到最底下那一行,在這個模式當中,
     可以提供您『搜尋資料』以及而讀檔、存檔、大量取代字元、離開 vi 、顯示行號等等的操作。
     (在命令模式當中,按『 : 』或「 / 』可進入指令列模式)

命令模式

按「i, I, o, O, 按「 : 」或
a, A, r, R 」 「 / 」

編輯模式 指令列模式
按「ESC 」

圖一、 vi 的操作環境
三、 vi 操作說明 :
1. 進入 vi 開始編輯:
$vi (編輯未命名新檔)
$vi newfile (開啟名為 newfile 的舊檔,或新編一個名為 newfile 的新檔)
*剛開啟 vi 時為命令模式*
2. 按下『i, I, o, O, a, A, r, R』等字母之後會進入編輯模式。
3. 編輯完畢按下「ESC」返回命令模式操作;在命令模式中按下「:」或「/」可進入指令列模式。
4. 在指令列模式中(有「:」提示時),可輸入 w(存檔)、q(離開 vi)、wq(存檔並離開 vi)、q!(不存檔離開
vi)、h 或 help(線上說明)、以及其它搜尋取代的指令。再按「ESC」回到命令模式。
5. 練習 A:使用 vi 在~/test/目錄下開一個新檔案 newfile,並輸入2~3行文字後存檔離開。
練習 B:a.使用#man vi | col -b > ~/test/man-vi.txt
b.使用 vi 開啟~/test/man-vi.txt 操作後不存檔離開。

Page - 1
Edited by bono@teacher.com
Linux 系統管理講義:VI 編輯器

四 、命令模式與指令列模式說明 :(參考來源 http://linux.vbird.org/linux_basic/0310vi.php)


命令模式在最下面一行沒有出現『--INSERT--』或『--REPLACE--』字樣的時候。
重要性 Command mode: 移動游標
* h 或 向左方向鍵 游標向左移動一個字元
* j 或 向下方向鍵 游標向下移動一個字元
* k 或 向上方向鍵 游標向上移動一個字元
* l 或 向右方向鍵 游標向右移動一個字元
** [Ctrl] + [f] 螢幕『向前』移動一頁
** [Ctrl] + [b] 螢幕『向後』移動一頁
[Ctrl] + [d] 螢幕『向前』移動半頁
[Ctrl] + [u] 螢幕『向後』移動半頁
+ 游標移動到非空白字元的下一列
- 游標移動到非空白字元的上一列
* n<space> 按下數字後再按空白鍵,游標會向右移動這一行的 n 個字元。例如 20<space>
則游標會向後面移動 20 個字元距離。
*** 0 或[HOME] 這是數字『 0 』:移動到這一行的最前面字元處(常用)
*** $或[END] 移動到這一行的最後面字元處(常用)
* H 游標移動到這個螢幕的最上方那一行
* M 游標移動到這個螢幕的中央那一行
* L 游標移動到這個螢幕的最下方那一行
*** G 移動到這個檔案的最後一行(常用)
*** gg 移動到這個檔案的第一行(常用)
** nG 移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的 20 行
** n<Enter> 游標向下移動 n 行
Last line mode: 搜尋與取代
*** /word 向游標之後尋找一個字串名稱為 word 的字串。搜尋時可按「n」將游標移到下一個
字串
** ?word 向游標之前尋找一個字串名稱為 word 的字串。
*** :n1,n2s/word1/word2/g 在第 n1 與 n2 行之間尋找 word1 這個字串,並將該字串取代為 word2
*** :1,$s/word1/word2/g 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2
*** :1,$s/word1/word2/gc 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2,且在取代前
顯示提示字元給使用者確認(conform)是否需要取代
重要性 Command mode: 刪除、複製與貼上
** x, X x 為向後刪除一個字元, X 為向前刪除一個字元
* nx 向後刪除 n 個字元
*** dd 刪除游標所在的那一整列
*** ndd 刪除游標所在的向下 n 列,例如 20dd 則是刪除 20 列
* d1G 刪除游標所在到第一行的所有資料
* dG 刪除游標所在到最後一行的所有資料
*** yy 複製游標所在的那一行
*** nyy 複製游標所在的向下 n 列,例如 20yy 則是複製 20 列
* y1G 複製游標所在列到第一列的所有資料
* yG 複製游標所在列到最後一列的所有資料
*** p, P p 為複製的資料在游標下一行貼上,P 則為貼在游標上一行
* J 將游標所在列與下一列的資料結合成同一列
* c 重複刪除多個資料,例如向下刪除 10 行,[ 10cj ]
*** u 復原前一個動作(undo)
*** ZZ(shift+z 兩次) 若檔案沒有更動,則不儲存離開,若檔案已經經過更動,則儲存後離開
進入 Insert mode:
*** i, I 插入:在目前的游標所在處插入輸入之文字,已存在的文字會向後退
*** a, A 增加:由目前游標所在的下一個字開始輸入,已存在的文字會向後退
*** o, O 插入新的一行:從游標所在的下一行枝行首開始輸入文字
** r, R 取代:r 會取代游標所在的那一個字元;R 會一直取代游標所在的文字,直到按下
ESC 為止)
*** Esc 退出編輯模式,回到一般模式中
Last line mode:
*** :w 將編輯的資料寫入硬碟檔案中
*** :w! 若檔案屬性為『唯讀』時,強制寫入該檔案
*** :q 離開 vi(檔案未經修改才能直接離開)

Page - 2
Edited by bono@teacher.com
Linux 系統管理講義:VI 編輯器

*** :q! 若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案。


*** :wq 儲存後離開,若為 :wq! 則為強制儲存後離開
** :e! 將檔案還原到最原始的狀態!
** :w [filename] 將編輯的資料儲存成另一個檔案(類似另存新檔)
** :r [filename] 在編輯的資料中,讀入另一個檔案的資料。亦即將『filename』這個檔案內容加到游
標所在行後面
*** :set nu 顯示行號,設定之後,會在每一行的字首顯示該行的行號
*** :set nonu 與 set nu 相反,為取消行號!(或:set nu!)
** n1,n2 w [filename] 將 n1 到 n2 行的內容儲存成 filename 這個檔案。
*** :sh 暫時離開 vi 到 Shell 下執行指令,執行完畢可打「exit」或按「Ctrl+d」返回 vi
* :! command 暫時離開 vi 到指令列模式下執行 command 的顯示結果!例如[ :! ls /home ]

Page - 3
Edited by bono@teacher.com
Linux 系統管理講義:VI 編輯器

五 、進階操作 :
1. 自動修復錯誤:可針對自己經常會打錯的字作自動修復。
(在指令列模式中):abbr hte the  (hte 為錯字,the 為正確的字)
之後在輸入時如出現打錯字,vi 會自動修正(abbr 實際上是用來設定縮寫字轉換)
2. 分割螢幕在多檔案(或同一檔案)中編輯:(利用「Ctrl+w, ??」組合鍵呼叫)
(在指令列模式中):split    (或按「Ctrl+w,s」將目前檔案分割為上下視窗)
分割視窗後可按「Ctrl+w,j」或「Ctrl+w,↓」將游標移至下方視窗;按「Ctrl+w,k」或「Ctrl+w,↑」將游標移至上
方視窗(「Ctrl+w,j」的按法為:先按「Ctrl+w」後放掉再按「j」)
「Ctrl+w,n」:在上方視窗開一個新檔案
「Ctrl+w,q」:關閉游標所在視窗
3. VISUAL mode(標示功能):
 v (小寫 v),這是屬於字元標示(character visual),按下 v 後就可以移動游標,游標走過的地方就會
  標示起來。再按一次 v 就會結束 v-mode。用 mouse 按兩次左鈕的標示區也是屬於這類的標示。
 V (大寫 V),這是列標示(line visual),按下 V 後會整行標示起來(包括行首前空白的部分),移動
  上下鍵,會標示多行。mouse 連按三次左鈕,也是屬於此類的標示。再按一次 V 就會結束 v-mode。
 Ctrl-v 這是方塊標示(block visual),可縱向標示矩形區域。再按一次 Ctrl-v 就會結束 v-mode。
 結束 v-mode 的方式亦可使用 「Esc」 鍵,或統一使用 「Ctl-c」。
 d 刪除標示區內容。y 複製標示區內容。p 貼上已複製標示區內容。
4. vi 的加密功能:
 vi -x [檔名] :這樣進入 vi 後會要求輸入密碼(兩次)。以後加密過的檔案由 vi 開啟時會自動要求
輸入密碼。否則無法開啟。其它的編輯器當然是無法開啟的。
 如果正在 vi 中編輯檔案,臨時想加密,可在指令列模式用 :X 指令。
!! 小心!vim 一開檔就會有個 .檔名.swp 這個檔,是為了緊急回復用的,一般是在您所開檔案的所在目錄,這是個隱藏檔,您加密的
功能並沒有作用在這個 swp 檔,因此 root 還是知道您在寫些什麼關於他的壞話的。:-) 當然啦,您也是可以把 swap 的功能關掉的
:set noswf 就行了!但如果您編輯的是大檔案,則不建議您把 swap 關掉,這樣會很吃記憶體的。
5. 重覆上一個指令:在命令模式下按「.」即可,非常好用哦!
6. 利用 vi 的線上說明文件:在指令列模式下輸入「:h」、「:help」、「按[F1]鍵」,或「:h <關鍵字>」,
在瀏覽 Help 時,如果將游標移到「|bars|」字串之間,再按「 Ctrl+] 」可跳到|bars|主題查閱,再按
「Ctrl+t」或「Ctrl+o」返回主 Help 頁面。請多練習操作查閱線上說明,加強自己的操作技術。(線上文件放在
/usr/share/vim 目錄下)
六 、網路資源 :
1. http://www.newriders.com/books/opl/ebooks/0735710015.html
NewRiders 的線上電子書(非常完整)
2. http://www.study-area.net/tips/vim/index.html
大家來學 VIM(一個歷久彌新的編輯器)
3. http://linux.vbird.org/linux_basic/0310vi.php
vi 文書處理軟體(鳥哥的 Linux 與 ADSL 私房菜)

--END--

Page - 4
Edited by bono@teacher.com