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 、顯示行號等等的操作。
(在命令模式當中,按『 : 』或「 / 』可進入指令列模式)
圖一、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操作後不存檔離開。
四、命令模式與指令列模式說明:(參考來源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 按下數字後再按空白鍵,游標會向右移動這一行的 n 個字元。例如 20 則游標會向後面移動 20 個字元距離。
*** 0或[HOME] 這是數字『 0 』:移動到這一行的最前面字元處(常用)
***
或[END]移動到這一行的最後面字元處(常用)*H游標移動到這個螢幕的最上方那一行*M游標移動到這個螢幕的中央那一行*L游標移動到這個螢幕的最下方那一行***G移動到這個檔案的最後一行(常用)***gg移動到這個檔案的第一行(常用)**nG移動到這個檔案的第n行。例如20G則會移動到這個檔案的20行**n游標向下移動n行Lastlinemode:搜尋與取代***/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(檔案未經修改才能直接離開)
*** :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 ]
五、進階操作:
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–