## 9.2 vi 的使用
基本上 vi 共分為三種模式,分別是“一般指令模式”、“編輯模式”與“命令行命令模式”。 這三種模式的作用分別是:
* 一般指令模式 (command mode)
以 vi 打開一個文件就直接進入一般指令模式了(這是默認的模式,也簡稱為一般模式)。在這個模式中, 你可以使用“上下左右”按鍵來移動光標,你可以使用“刪除字符”或“刪除整列”來處理文件內容, 也可以使用“復制、貼上”來處理你的文件數據。
* 編輯模式 (insert mode)
在一般指令模式中可以進行刪除、復制、貼上等等的動作,但是卻無法編輯文件內容的! 要等到你按下“i, I, o, O, a, A, r, R”等任何一個字母之后才會進入編輯模式。注意了!通常在 Linux 中,按下這些按鍵時,在畫面的左下方會出現“ INSERT 或 REPLACE ”的字樣,此時才可以進行編輯。而如果要回到一般指令模式時, 則必須要按下“Esc”這個按鍵即可退出編輯模式。
* 命令行命令模式 (command-line mode)
在一般模式當中,輸入“ : / ? ”三個中的任何一個按鈕,就可以將光標移動到最下面那一列。在這個模式當中, 可以提供你“搜尋數據”的動作,而讀取、存盤、大量取代字符、離開 vi 、顯示行號等等的動作則是在此模式中達成的!
簡單的說,我們可以將這三個模式想成下面的圖示來表示:
圖9.2.1、vi三種模式的相互關系
注意到上面的圖示,你會發現一般指令模式可與編輯模式及命令行界面切換, 但編輯模式與命令行界面之間不可互相切換喔!這非常重要啦!閑話不多說,我們下面以一個簡單的例子來進行說明吧!

**Tips** 過去鳥哥的前一版本中,一般指令模式被稱為一般模式。但是英文版的 vi/vim 說明中,一般模式其實是“ command mode ”的意思!中文直譯會變成指令模式啊! 之所以稱為指令模式,主因是我們可以在一般模式下面按下很多特殊的指令功能!例如刪除、復制、區塊選擇等等!只是這個模式很容易跟命令行界面 (command-line) 混淆~ 所以鳥哥過去才稱為一般模式而已。不過真的很容易誤解啦!所以這一版開始,這一模式被鳥哥改為“一般指令模式”了!要尊重英文原文!
### 9.2.1 簡易執行范例
如果你想要使用 vi 來創建一個名為 welcome.txt 的文件時,你可以這樣做:
* 1\. 使用“ vi filename ”進入一般指令模式
```
[dmtsai@study ~]$ /bin/vi welcome.txt
# 在 CentOS 7 當中,由于一般帳號默認 vi 已經被 vim 取代了,因此得要輸入絕對路徑來執行才行!
```
直接輸入“ vi 文件名”就能夠進入 vi 的一般指令模式了。不過請注意,由于一般帳號默認已經使用 vim 來取代,因此如上表所示, 如果使用一般帳號來測試,得要使用絕對路徑的方式來執行 /bin/vi 才好!另外,請注意,記得 vi 后面一定要加文件名,不管該文件名存在與否!
整個畫面主要分為兩部份,上半部與最下面一列兩者可以視為獨立的。如下圖 9.2.2 所示,圖中那個虛線是不存在的, 鳥哥用來說明而已啦!上半部顯示的是文件的實際內容,最下面一列則是狀態顯示列(如下圖的[New File]信息),或者是命令下達列喔!
圖9.2.2、用 vi 打開一個新文件
如果你打開的文件是舊文件(已經存在的文件),則可能會出現如下的信息:
圖9.2.3、用 vi 打開一個舊文件
如上圖 9.2.3 所示,箭頭所指的那個“"/etc/man_db.conf" [readonly] 131L, 5171C”代表的是“現在打開的文件名為 /etc/man_db.conf, 由于啟動者的身份緣故,目前文件為只讀狀態,且文件內有 131 列 以及具有 5171 個字符”的意思!那一列的內容并不是在文件內,而是 vi 顯示一些信息的地方喔!此時是在一般指令模式的環境下啦。接下來開始來輸入吧!
* 2\. 按下 i 進入編輯模式,開始編輯文字
在一般指令模式之中,只要按下 i, o, a 等字符就可以進入編輯模式了!在編輯模式當中,你可以發現在左下角狀態列中會出現 –INSERT- 的字樣,那就是可以輸入任意字符的提示啰!這個時候,鍵盤上除了 [Esc] 這個按鍵之外,其他的按鍵都可以視作為一般的輸入按鈕了,所以你可以進行任何的編輯啰!
圖9.2.4、開始用 vi 來進行編輯
* 3\. 按下 [ESC] 按鈕回到一般指令模式
好了,假設我已經按照上面的樣式給他編輯完畢了,那么應該要如何退出呢?是的!沒錯!就是給他按下 [Esc] 這個按鈕即可!馬上你就會發現畫面左下角的 – INSERT – 不見了!!
* 4\. 進入命令行界面,文件儲存并離開 vi 環境
OK,我們要存盤了,存盤 (write) 并離開 (quit) 的指令很簡單,輸入“:wq”即可存盤離開! (注意了,按下 : 該光標就會移動到最下面一列去!) 這時你在提示字符后面輸入“ ls -l ”即可看到我們剛剛創建的 welcome.txt 文件啦!整個圖示有點像下面這樣:
圖9.2.5、在命令行界面進行儲存及離開 vi 環境
如此一來,你的文件 welcome.txt 就已經創建起來啰!需要注意的是,如果你的文件權限不對,例如為 -r--r--r-- 時,那么可能會無法寫入,此時可以使用“強制寫入”的方式嗎?可以!使用“ :wq! ” 多加一個驚嘆號即可!不過,需要特別注意呦!那個是在“你的權限可以改變”的情況下才能成立的! 關于權限的概念,請自行回去翻一下[第五章](../Text/index.html)的內容吧!
### 9.2.2 按鍵說明
除了上面簡易范例的 i, [Esc], :wq 之外,其實 vi 還有非常多的按鍵可以使用喔!在介紹之前還是要再次強調, vi 的三種模式只有一般指令模式可以與編輯、命令行界面切換,編輯模式與命令行界面之間并不能切換的! 這點在[圖9.2.1](../Text/index.html#fig9.2.1)里面有介紹到,注意去看看喔!下面就來談談 vi 軟件中會用到的按鍵功能吧!
* 第一部份:一般指令模式可用的按鈕說明,光標移動、復制貼上、搜尋取代等
| 移動光標的方法 |
| --- | --- | --- |
| h 或 向左方向鍵(←) | 光標向左移動一個字符 |
| j 或 向下方向鍵(↓) | 光標向下移動一個字符 |
| k 或 向上方向鍵(↑) | 光標向上移動一個字符 |
| l 或 向右方向鍵(→) | 光標向右移動一個字符 |
| 如果你將右手放在鍵盤上的話,你會發現 hjkl 是排列在一起的,因此可以使用這四個按鈕來移動光標。 如果想要進行多次移動的話,例如向下移動 30 列,可以使用 "30j" 或 "30↓" 的組合按鍵, 亦即加上想要進行的次數(數字)后,按下動作即可! |
| [Ctrl] + [f] | 屏幕“向下”移動一頁,相當于 [Page Down]按鍵 (常用) |
| [Ctrl] + [b] | 屏幕“向上”移動一頁,相當于 [Page Up] 按鍵 (常用) |
| [Ctrl] + [d] | 屏幕“向下”移動半頁 |
| [Ctrl] + [u] | 屏幕“向上”移動半頁 |
| + | 光標移動到非空白字符的下一列 |
| - | 光標移動到非空白字符的上一列 |
| n<space> | 那個 n 表示“數字”,例如 20 。按下數字后再按空白鍵,光標會向右移動這一列的 n 個字符。例如 20<space> 則光標會向后面移動 20 個字符距離。 |
| 0 或功能鍵[Home] | 這是數字“ 0 ”:移動到這一列的最前面字符處 (常用) |
| $ 或功能鍵[End] | 移動到這一列的最后面字符處(常用) |
| H | 光標移動到這個屏幕的最上方那一列的第一個字符 |
| M | 光標移動到這個屏幕的中央那一列的第一個字符 |
| L | 光標移動到這個屏幕的最下方那一列的第一個字符 |
| G | 移動到這個文件的最后一列(常用) |
| nG | n 為數字。移動到這個文件的第 n 列。例如 20G 則會移動到這個文件的第 20 列(可配合 :set nu) |
| gg | 移動到這個文件的第一列,相當于 1G 啊! (常用) |
| n<Enter> | n 為數字。光標向下移動 n 列(常用) |
| 搜尋與取代 |
| /word | 向光標之下尋找一個名稱為 word 的字串。例如要在文件內搜尋 vbird 這個字串,就輸入 /vbird 即可! (常用) |
| ?word | 向光標之上尋找一個字串名稱為 word 的字串。 |
| n | 這個 n 是英文按鍵。代表“<u>重復前一個搜尋的動作</u>”。舉例來說, 如果剛剛我們執行 /vbird 去向下搜尋 vbird 這個字串,則按下 n 后,會向下繼續搜尋下一個名稱為 vbird 的字串。如果是執行 ?vbird 的話,那么按下 n 則會向上繼續搜尋名稱為 vbird 的字串! |
| N | 這個 N 是英文按鍵。與 n 剛好相反,為“反向”進行前一個搜尋動作。 例如 /vbird 后,按下 N 則表示“向上”搜尋 vbird 。 |
| 使用 /word 配合 n 及 N 是非常有幫助的!可以讓你重復的找到一些你搜尋的關鍵字! |
| :n1,n2s/word1/word2/g | n1 與 n2 為數字。在第 n1 與 n2 列之間尋找 word1 這個字串,并將該字串取代為 word2 !舉例來說,在 100 到 200 列之間搜尋 vbird 并取代為 VBIRD 則:“:100,200s/vbird/VBIRD/g”。(常用) |
| :1,$s/word1/word2/g | 從第一列到最后一列尋找 word1 字串,并將該字串取代為 word2 !(常用) |
| :1,$s/word1/word2/gc | 從第一列到最后一列尋找 word1 字串,并將該字串取代為 word2 !且在取代前顯示提示字符給使用者確認 (confirm) 是否需要取代!(常用) |
| 刪除、復制與貼上 |
| x, X | 在一列字當中,x 為向后刪除一個字符 (相當于 [del] 按鍵), X 為向前刪除一個字符(相當于 [backspace] 亦即是倒退鍵) (常用) |
| nx | n 為數字,連續向后刪除 n 個字符。舉例來說,我要連續刪除 10 個字符, “10x”。 |
| dd | 刪除光標所在的那一整列(常用) |
| ndd | n 為數字。刪除光標所在的向下 n 列,例如 20dd 則是刪除 20 列 (常用) |
| d1G | 刪除光標所在到第一列的所有數據 |
| dG | 刪除光標所在到最后一列的所有數據 |
| d$ | 刪除光標所在處,到該列的最后一個字符 |
| d0 | 那個是數字的 0 ,刪除光標所在處,到該列的最前面一個字符 |
| yy | 復制光標所在的那一列(常用) |
| nyy | n 為數字。復制光標所在的向下 n 列,例如 20yy 則是復制 20 列(常用) |
| y1G | 復制光標所在列到第一列的所有數據 |
| yG | 復制光標所在列到最后一列的所有數據 |
| y0 | 復制光標所在的那個字符到該列行首的所有數據 |
| y$ | 復制光標所在的那個字符到該列行尾的所有數據 |
| p, P | p 為將已復制的數據在光標下一列貼上,P 則為貼在光標上一列! 舉例來說,我目前光標在第 20 列,且已經復制了 10 列數據。則按下 p 后, 那 10 列數據會貼在原本的 20 列之后,亦即由 21 列開始貼。但如果是按下 P 呢? 那么原本的第 20 列會被推到變成 30 列。 (常用) |
| J | 將光標所在列與下一列的數據結合成同一列 |
| c | 重復刪除多個數據,例如向下刪除 10 列,[ 10cj ] |
| u | 復原前一個動作。(常用) |
| [Ctrl]+r | 重做上一個動作。(常用) |
| 這個 u 與 [Ctrl]+r 是很常用的指令!一個是復原,另一個則是重做一次~ 利用這兩個功能按鍵,你的編輯,嘿嘿!很快樂的啦! |
| . | 不要懷疑!這就是小數點!意思是重復前一個動作的意思。 如果你想要重復刪除、重復貼上等等動作,按下小數點“.”就好了! (常用) |
* 第二部份:一般指令模式切換到編輯模式的可用的按鈕說明
| 進入插入或取代的編輯模式 |
| --- | --- | --- |
| i, I | 進入插入模式(Insert mode):i 為“從目前光標所在處插入”, I 為“在目前所在列的第一個非空白字符處開始插入”。 (常用) |
| a, A | 進入插入模式(Insert mode):a 為“從目前光標所在的下一個字符處開始插入”, A 為“從光標所在列的最后一個字符處開始插入”。(常用) |
| o, O | 進入插入模式(Insert mode):這是英文字母 o 的大小寫。o 為“在目前光標所在的下一列處插入新的一列”; O 為在目前光標所在處的上一列插入新的一列!(常用) |
| r, R | 進入取代模式(Replace mode):r 只會取代光標所在的那一個字符一次;R會一直取代光標所在的文字,直到按下 ESC 為止;(常用) |
| 上面這些按鍵中,在 vi 畫面的左下角處會出現“--INSERT--”或“--REPLACE--”的字樣。 由名稱就知道該動作了吧!!特別注意的是,我們上面也提過了,你想要在文件里面輸入字符時, 一定要在左下角處看到 INSERT 或 REPLACE 才能輸入喔! |
| [Esc] | 退出編輯模式,回到一般指令模式中(常用) |
* 第三部份:一般指令模式切換到命令行界面的可用按鈕說明
| 命令行界面的儲存、離開等指令 |
| --- | --- | --- |
| :w | 將編輯的數據寫入硬盤文件中(常用) |
| :w! | 若文件屬性為“只讀”時,強制寫入該文件。不過,到底能不能寫入, 還是跟你對該文件的文件權限有關啊! |
| :q | 離開 vi (常用) |
| :q! | 若曾修改過文件,又不想儲存,使用 ! 為強制離開不儲存盤案。 |
| 注意一下啊,那個驚嘆號 (!) 在 vi 當中,常常具有“強制”的意思~ |
| :wq | 儲存后離開,若為 :wq! 則為強制儲存后離開 (常用) |
| ZZ | 這是大寫的 Z 喔!若文件沒有更動,則不儲存離開,若文件已經被更動過,則儲存后離開! |
| :w [filename] | 將編輯的數據儲存成另一個文件(類似另存新文件) |
| :r [filename] | 在編輯的數據中,讀入另一個文件的數據。亦即將 “filename” 這個文件內容加到光標所在列后面 |
| :n1,n2 w [filename] | 將 n1 到 n2 的內容儲存成 filename 這個文件。 |
| :! command | 暫時離開 vi 到命令行界面下執行 command 的顯示結果!例如 “:! ls /home”即可在 vi 當中察看 /home 下面以 ls 輸出的文件信息! |
| vim 環境的變更 |
| :set nu | 顯示行號,設置之后,會在每一列的字首顯示該列的行號 |
| :set nonu | 與 set nu 相反,為取消行號! |
特別注意,在 vi 中,“數字”是很有意義的!數字通常代表重復做幾次的意思! 也有可能是代表去到第幾個什么什么的意思。舉例來說,要刪除 50 列,則是用 “50dd” 對吧! 數字加在動作之前~那我要向下移動 20 列呢?那就是“20j”或者是“20↓”即可。
OK!會這些指令就已經很厲害了,因為常用到的指令也只有不到一半!通常 vi 的指令除了上面鳥哥注明的常用的幾個外,其他是不用背的,你可以做一張簡單的指令表在你的屏幕墻上, 一有疑問可以馬上的查詢呦!這也是當初鳥哥使用 vim 的方法啦!
### 9.2.3 一個案例練習
來來來!趕緊測試一下你是否已經熟悉 vi 這個指令呢?請依照下面的需求進行指令動作。 (下面的操作為使用 CentOS 7.1 中的 man_db.conf 來做練習的,該文件你可以在這里下載: [http://linux.vbird.org/linux_basic/0310vi/man_db.conf](http://linux.vbird.org/linux_basic/0310vi/man_db.conf)。) 看看你的顯示結果與鳥哥的結果是否相同啊?
1. 請在 /tmp 這個目錄下創建一個名為 vitest 的目錄;
2. 進入 vitest 這個目錄當中;
3. 將 /etc/man_db.conf 復制到本目錄下面(或由上述的鏈接下載 [man_db.conf](http://linux.vbird.org/linux_basic/0310vi/man_db.conf) 文件);
4. 使用 vi 打開本目錄下的 man_db.conf 這個文件;
5. 在 vi 中設置一下行號;
6. 移動到第 43 列,向右移動 59 個字符,請問你看到的小括號內是哪個文字?
7. 移動到第一列,并且向下搜尋一下“ gzip ”這個字串,請問他在第幾列?
8. 接著下來,我要將 29 到 41 列之間的“小寫 man 字串”改為“大寫 MAN 字串”,并且一個一個挑選是否需要修改,如何下達指令?如果在挑選過程中一直按“y”, 結果會在最后一列出現改變了幾個 man 呢?
9. 修改完之后,突然反悔了,要全部復原,有哪些方法?
10. 我要復制 66 到 71 這 6 列的內容(含有MANDB_MAP),并且貼到最后一列之后;
11. 113 到 128 列之間的開頭為 # 符號的注解數據我不要了,要如何刪除?
12. 將這個文件另存成一個 man.test.config 的文件名;
13. 去到第 25 列,并且刪除 15 個字符,結果出現的第一個單字是什么?
14. 在第一列新增一列,該列內容輸入“I am a student...”;
15. 儲存后離開吧!
整個步驟可以如下顯示:
1. “mkdir /tmp/vitest”
2. “cd /tmp/vitest”
3. “cp /etc/man_db.conf .”
4. “/bin/vi man_db.conf”
5. “:set nu”然后你會在畫面中看到左側出現數字即為行號。
6. 先按下“43G”再按下“59→”會看到“ as ”這個單字在小括號內;
7. 先執行“1G”或“gg”后,直接輸入“/gzip”,則會去到第 93 列才對!
8. 直接下達“ :29,41s/man/MAN/gc ”即可!若一直按“y”最終會出現“在 13 列內置換 13 個字串”的說明。
9. (1)簡單的方法可以一直按“ u ”回復到原始狀態,(2)使用不儲存離開“ :q! ”之后,再重新讀取一次該文件;
10. “66G” 然后再“ 6yy ”之后最后一列會出現“復制6列”之類的說明字樣。 按下“ G ”到最后一列,再給他“ p ”貼上6列!
11. 因為 113~128 共 16 列,因此“ 113G ”→“ 16dd ”就能刪除 16 列,此時你會發現光標所在 113 列的地方變成 “ # Flags. ” 開頭啰
12. “ :w man.test.config ”,你會發現最后一列出現 "man.test.config" [New].. 的字樣。
13. “25G” 之后,再給他“ 15x ”即可刪除 15 個字符,出現“ tree ”的字樣;
14. 先“ 1G ”去到第一列,然后按下大寫的“ O ”便新增一列且在插入模式;開始輸入“I am a student...”后, 按下[Esc]回到一般指令模式等待后續工作;
15. “:wq”
如果你的結果都可以查的到,那么 vi 的使用上面應該沒有太大的問題啦!剩下的問題會是在…打字練習…。
### 9.2.4 vim 的暫存盤、救援回復與打開時的警告訊息
在目前主要的文書編輯軟件都會有“回復”的功能,亦即當你的系統因為某些原因而導致類似死機的情況時, 還可以通過某些特別的機制來讓你將之前未儲存的數據“救”回來!這就是鳥哥這里所謂的“回復”功能啦! 那么 vim 有沒有回復功能呢?有的! vim 就是通過“暫存盤”來救援的啦!
當我們在使用 vim 編輯時, vim 會在與被編輯的文件的目錄下,再創建一個名為 .filename.swp 的文件。 比如說我們在上一個小節談到的編輯 /tmp/vitest/man_db.conf 這個文件時, vim 會主動的創建 /tmp/vitest/.man_db.conf.swp 的暫存盤,你對 man_db.conf 做的動作就會被記錄到這個 .man_db.conf.swp 當中喔!如果你的系統因為某些原因斷線了, 導致你編輯的文件還沒有儲存,這個時候 .man_db.conf.swp 就能夠發揮救援的功能了!我們來測試一下吧! 下面的練習有些部分的指令我們尚未談到,沒關系,你先照著做,后續再回來了解啰!
```
[dmtsai@study ~]$ cd /tmp/vitest
[dmtsai@study vitest]$ vim man_db.conf
# 此時會進入到 vim 的畫面,請在 vim 的一般指令模式下按下“ [ctrl]-z ”的組合鍵
[1]+ Stopped vim man_db.conf <==按下 [ctrl]-z 會告訴你這個訊息
```
當我們在 vim 的一般指令模式下按下 [ctrl]-z 的組合按鍵時,你的 vim 會被丟到背景去執行! 這部份的功能我們會在[第十六章的程序管理](../Text/index.html#background)當中談到, 你這里先知道一下即可。回到命令提示字符后,接下來我們來仿真將 vim 的工作不正常的中斷吧!
```
[dmtsai@study vitest]$ ls -al
drwxrwxr-x. 2 dmtsai dmtsai 69 Jul 6 23:54 .
drwxrwxrwt. 17 root root 4096 Jul 6 23:53 ..
-rw-r--r--. 1 dmtsai dmtsai 4850 Jul 6 23:47 man_db.conf
-rw-r--r--. 1 dmtsai dmtsai 16384 Jul 6 23:54 .man_db.conf.swp <==就是他,暫存盤
-rw-rw-r--. 1 dmtsai dmtsai 5442 Jul 6 23:35 man.test.config
[dmtsai@study vitest]$ kill -9 %1 <==這里仿真斷線停止 vim 工作
[dmtsai@study vitest]$ ls -al .man_db.conf.swp
-rw-r--r--. 1 dmtsai dmtsai 16384 Jul 6 23:54 .man_db.conf.swp <==暫存盤還是會存在!
```
那個 kill 可以仿真將系統的 vim 工作刪除的情況,你可以假裝死機了啦! 由于 vim 的工作被不正常的中斷,導致暫存盤無法借由正常流程來結束, 所以暫存盤就不會消失,而繼續保留下來。此時如果你繼續編輯那個 man_db.conf ,會出現什么情況呢? 會出現如下所示的狀態喔:
```
[dmtsai@study vitest]$ vim man_db.conf
E325: ATTENTION <==錯誤代碼
Found a swap file by the name ".man_db.conf.swp" <==下面數列說明有暫存盤的存在
owned by: dmtsai dated: Mon Jul 6 23:54:16 2015
file name: /tmp/vitest/man_db.conf <==這個暫存盤屬于哪個實際的文件?
modified: no
user name: dmtsai host name: study.centos.vbird
process ID: 31851
While opening file "man_db.conf"
dated: Mon Jul 6 23:47:21 2015
下面說明可能發生這個錯誤的兩個主要原因與解決方案!
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r man_db.conf"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".man_db.conf.swp"
to avoid this message.
Swap file ".man_db.conf.swp" already exists! 下面說明你可進行的動作
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
```
由于暫存盤存在的關系,因此 vim 會主動的判斷你的這個文件可能有些問題,在上面的圖示中 vim 提示兩點主要的問題與解決方案,分別是這樣的:
* 問題一:可能有其他人或程序同時在編輯這個文件:
由于 Linux 是多用戶多任務的環境,因此很可能有很多人同時在編輯同一個文件。如果在多人共同編輯的情況下, 萬一大家同時儲存,那么這個文件的內容將會變的亂七八糟!為了避免這個問題,因此 vim 會出現這個警告窗口! 解決的方法則是:
* 找到另外那個程序或人員,請他將該 vim 的工作結束,然后你再繼續處理。
* 如果你只是要看該文件的內容并不會有任何修改編輯的行為,那么可以選擇打開成為只讀(O)文件, 亦即上述畫面反白部分輸入英文“ o ”即可,其實就是 [O]pen Read-Only 的選項啦!
* 問題二:在前一個 vim 的環境中,可能因為某些不知名原因導致 vim 中斷 (crashed):
這就是常見的不正常結束 vim 產生的后果。解決方案依據不同的情況而不同喔!常見的處理方法為:
* 如果你之前的 vim 處理動作尚未儲存,此時你應該要按下“R”,亦即使用 (R)ecover 的項目, 此時 vim 會載入 .man_db.conf.swp 的內容,讓你自己來決定要不要儲存!這樣就能夠救回來你之前未儲存的工作。 不過那個 .man_db.conf.swp 并不會在你結束 vim 后自動刪除,所以你離開 vim 后還得要自行刪除 .man_db.conf.swp 才能避免每次打開這個文件都會出現這樣的警告!
* 如果你確定這個暫存盤是沒有用的,那么你可以直接按下“D”刪除掉這個暫存盤,亦即 (D)elete it 這個項目即可。 此時 vim 會載入 man_db.conf ,并且將舊的 .man_db.conf.swp 刪除后,創建這次會使用的新的 .man_db.conf.swp 喔!
至于這個發現暫存盤警告訊息的畫面中,有出現六個可用按鈕,各按鈕的說明如下:
* [O]pen Read-Only:打開此文件成為只讀文件, 可以用在你只是想要查閱該文件內容并不想要進行編輯行為時。一般來說,在上課時,如果你是登陸到同學的計算機去看他的配置文件, 結果發現其實同學他自己也在編輯時,可以使用這個模式;
* (E)dit anyway:還是用正常的方式打開你要編輯的那個文件, 并不會載入暫存盤的內容。不過很容易出現兩個使用者互相改變對方的文件等問題!不好不好!
* (R)ecover:就是載入暫存盤的內容,用在你要救回之前未儲存的工作。 不過當你救回來并且儲存離開 vim 后,還是要手動自行刪除那個暫存盤喔!
* (D)elete it:你確定那個暫存盤是無用的!那么打開文件前會先將這個暫存盤刪除! 這個動作其實是比較常做的!因為你可能不確定這個暫存盤是怎么來的,所以就刪除掉他吧!哈哈!
* (Q)uit:按下 q 就離開 vim ,不會進行任何動作回到命令提示字符。
* (A)bort:忽略這個編輯行為,感覺上與 quit 非常類似! 也會送你回到命令提示字符就是啰!
- 鳥哥的Linux私房菜:基礎學習篇 第四版
- 目錄及概述
- 第零章、計算機概論
- 0.1 電腦:輔助人腦的好工具
- 0.2 個人電腦架構與相關設備元件
- 0.3 數據表示方式
- 0.4 軟件程序運行
- 0.5 重點回顧
- 0.6 本章習題
- 0.7 參考資料與延伸閱讀
- 第一章、Linux是什么與如何學習
- 1.1 Linux是什么
- 1.2 Torvalds的Linux發展
- 1.3 Linux當前應用的角色
- 1.4 Linux 該如何學習
- 1.5 重點回顧
- 1.6 本章習題
- 1.7 參考資料與延伸閱讀
- 第二章、主機規劃與磁盤分區
- 2.1 Linux與硬件的搭配
- 2.2 磁盤分區
- 2.3 安裝Linux前的規劃
- 2.4 重點回顧
- 2.5 本章習題
- 2.6 參考資料與延伸閱讀
- 第三章、安裝 CentOS7.x
- 3.1 本練習機的規劃--尤其是分區參數
- 3.2 開始安裝CentOS 7
- 3.3 多重開機安裝流程與管理(Option)
- 3.4 重點回顧
- 3.5 本章習題
- 3.6 參考資料與延伸閱讀
- 第四章、首次登陸與線上求助
- 4.1 首次登陸系統
- 4.2 文字模式下指令的下達
- 4.3 Linux系統的線上求助man page與info page
- 4.4 超簡單文書編輯器: nano
- 4.5 正確的關機方法
- 4.6 重點回顧
- 4.7 本章習題
- 4.8 參考資料與延伸閱讀
- 第五章、Linux 的文件權限與目錄配置
- 5.1 使用者與群組
- 5.2 Linux 文件權限概念
- 5.3 Linux目錄配置
- 5.4 重點回顧
- 5.5 本章練習
- 5.6 參考資料與延伸閱讀
- 第六章、Linux 文件與目錄管理
- 6.1 目錄與路徑
- 6.2 文件與目錄管理
- 6.3 文件內容查閱
- 6.4 文件與目錄的默認權限與隱藏權限
- 6.5 指令與文件的搜尋
- 6.6 極重要的復習!權限與指令間的關系
- 6.7 重點回顧
- 6.8 本章習題:
- 6.9 參考資料與延伸閱讀
- 第七章、Linux 磁盤與文件系統管理
- 7.1 認識 Linux 文件系統
- 7.2 文件系統的簡單操作
- 7.3 磁盤的分區、格式化、檢驗與掛載
- 7.4 設置開機掛載
- 7.5 內存交換空間(swap)之創建
- 7.6 文件系統的特殊觀察與操作
- 7.7 重點回顧
- 7.8 本章習題 - 第一題一定要做
- 7.9 參考資料與延伸閱讀
- 第八章、文件與文件系統的壓縮,打包與備份
- 8.1 壓縮文件的用途與技術
- 8.2 Linux 系統常見的壓縮指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系統的備份與還原
- 8.5 光盤寫入工具
- 8.6 其他常見的壓縮與備份工具
- 8.7 重點回顧
- 8.8 本章習題
- 8.9 參考資料與延伸閱讀
- 第九章、vim 程序編輯器
- 9.1 vi 與 vim
- 9.2 vi 的使用
- 9.3 vim 的額外功能
- 9.4 其他 vim 使用注意事項
- 9.5 重點回顧
- 9.6 本章練習
- 9.7 參考資料與延伸閱讀
- 第十章、認識與學習BASH
- 10.1 認識 BASH 這個 Shell
- 10.2 Shell 的變量功能
- 10.3 命令別名與歷史命令
- 10.4 Bash Shell 的操作環境:
- 10.5 數據流重導向
- 10.6 管線命令 (pipe)
- 10.7 重點回顧
- 10.8 本章習題
- 10.9 參考資料與延伸閱讀
- 第十一章、正則表達式與文件格式化處理
- 11.1 開始之前:什么是正則表達式
- 11.2 基礎正則表達式
- 11.3 延伸正則表達式
- 11.4 文件的格式化與相關處理
- 11.5 重點回顧
- 11.6 本章習題
- 11.7 參考資料與延伸閱讀
- 第十二章、學習 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 簡單的 shell script 練習
- 12.3 善用判斷式
- 12.4 條件判斷式
- 12.5 循環 (loop)
- 12.6 shell script 的追蹤與 debug
- 12.7 重點回顧
- 12.8 本章習題
- 第十三章、Linux 帳號管理與 ACL 權限設置
- 13.1 Linux 的帳號與群組
- 13.2 帳號管理
- 13.3 主機的細部權限規劃:ACL 的使用
- 13.4 使用者身份切換
- 13.5 使用者的特殊 shell 與 PAM 模塊
- 13.6 Linux 主機上的使用者訊息傳遞
- 13.7 CentOS 7 環境下大量創建帳號的方法
- 13.8 重點回顧
- 13.9 本章習題
- 13.10 參考資料與延伸閱讀
- 第十四章、磁盤配額(Quota)與進階文件系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟件磁盤陣列 (Software RAID)
- 14.3 邏輯卷軸管理員 (Logical Volume Manager)
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十五章、例行性工作調度(crontab)
- 15.1 什么是例行性工作調度
- 15.2 僅執行一次的工作調度
- 15.3 循環執行的例行性工作調度
- 15.4 可喚醒停機期間的工作任務
- 15.5 重點回顧
- 15.6 本章習題
- 第十六章、程序管理與 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件與程序
- 16.5 SELinux 初探
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考資料與延伸閱讀
- 第十七章、認識系統服務 (daemons)
- 17.1 什么是 daemon 與服務 (service)
- 17.2 通過 systemctl 管理服務
- 17.3 systemctl 針對 service 類型的配置文件
- 17.4 systemctl 針對 timer 的配置文件
- 17.5 CentOS 7.x 默認啟動的服務簡易說明
- 17.6 重點回顧
- 17.7 本章習題
- 17.8 參考資料與延伸閱讀
- 第十八章、認識與分析登錄文件
- 18.1 什么是登錄文件
- 18.2 rsyslog.service :記錄登錄文件的服務
- 18.3 登錄文件的輪替(logrotate)
- 18.4 systemd-journald.service 簡介
- 18.5 分析登錄文件
- 18.6 重點回顧
- 18.7 本章習題
- 18.8 參考資料與延伸閱讀
- 第十九章、開機流程、模塊管理與 Loader
- 19.1 Linux 的開機流程分析
- 19.2 核心與核心模塊
- 19.3 Boot Loader: Grub2
- 19.4 開機過程的問題解決
- 19.5 重點回顧
- 19.6 本章習題
- 19.7 參考資料與延伸閱讀
- 第二十章、基礎系統設置與備份策略
- 20.1 系統基本設置
- 20.2 服務器硬件數據的收集
- 20.3 備份要點
- 20.4 備份的種類、頻率與工具的選擇
- 20.5 鳥哥的備份策略
- 20.6 災難復原的考慮
- 20.7 重點回顧
- 20.8 本章習題
- 20.9 參考資料與延伸閱讀
- 第二十一章、軟件安裝:源代碼與 Tarball
- 20.1 開放源碼的軟件安裝與升級簡介
- 21.2 使用傳統程序語言進行編譯的簡單范例
- 21.3 用 make 進行宏編譯
- 21.4 Tarball 的管理與建議
- 21.5 函數庫管理
- 21.6 檢驗軟件正確性
- 21.7 重點回顧
- 21.8 本章習題
- 21.9 參考資料與延伸閱讀
- 第二十二章、軟件安裝 RPM, SRPM 與 YUM
- 22.1 軟件管理員簡介
- 22.2 RPM 軟件管理程序: rpm
- 22.3 YUM 線上升級機制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
- 第二十三章、X Window 設置介紹
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析與設置
- 23.3 顯卡驅動程序安裝范例
- 23.4 重點回顧
- 23.5 本章習題
- 23.6 參考資料與延伸閱讀
- 第二十四章、Linux 核心編譯與管理
- 24.1 編譯前的任務:認識核心與取得核心源代碼
- 24.2 核心編譯的前處理與核心功能選擇
- 24.3 核心的編譯與安裝
- 24.4 額外(單一)核心模塊編譯
- 24.5 以最新核心版本編譯 CentOS 7.x 的核心
- 24.6 重點回顧
- 24.7 本章習題
- 24.8 參考資料與延伸閱讀