• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            逛奔的蝸牛

            我不聰明,但我會(huì)很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::
            From: http://linux.vbird.org/linux_basic/0310vi.php#vi_vim

               
             
            最近更新日期:2009/08/20
            系統(tǒng)管理員的重要工作就是得要修改與設(shè)定某些重要軟體的設(shè)定檔,因此至少得要學(xué)會(huì)一種以上的文字介面的文書編輯器。 在所有的 Linux distributions 上頭都會(huì)有的一套文書編輯器就是 vi ,而且很多軟體預(yù)設(shè)也是使用 vi 做為他們編輯的介面, 因此鳥哥建議您務(wù)必要學(xué)會(huì)使用 vi 這個(gè)正規(guī)的文書編輯器。此外,vim 是進(jìn)階版的 vi , vim 不但可以用不同顏色顯示文字內(nèi)容,還能夠進(jìn)行諸如 shell script, C program 等程式編輯功能, 你可以將 vim 視為一種程式編輯器!鳥哥也是用 vim 編輯鳥站的網(wǎng)頁(yè)文章呢! ^_^


            大標(biāo)題的圖示vi 與 vim

            由前面一路走來(lái),我們一直建議使用文字模式來(lái)處理 Linux 的系統(tǒng)設(shè)定問(wèn)題,因?yàn)椴坏梢宰屇惚容^容易瞭解到 Linux 的運(yùn)作狀況,也比較容易瞭解整個(gè)設(shè)定的基本精神,更能『保證』你的修改可以順利的被運(yùn)作。 所以,在 Linux 的系統(tǒng)中使用文字編輯器來(lái)編輯你的 Linux 參數(shù)設(shè)定檔,可是一件很重要的事情呦!也因此呢,系統(tǒng)管理員至少應(yīng)該要熟悉一種文書處理器的!

            Tips:
            這裡要再次的強(qiáng)調(diào),不同的 Linux distribution 各有其不同的附加軟體,例如 Red Hat Enterprise Linux 與 Fedora 的 ntsysv 與 setup 等,而 SuSE 則有 YAST 管理工具等等, 因此,如果你只會(huì)使用此種類型的軟體來(lái)控制你的 Linux 系統(tǒng)時(shí),當(dāng)接管不同的 Linux distributions 時(shí),呵呵!那可就苦惱了!
            鳥哥的圖示

            在 Linux 的世界中,絕大部分的設(shè)定檔都是以 ASCII 的純文字形態(tài)存在,因此利用簡(jiǎn)單的文字編輯軟體就能夠修改設(shè)定了! 與微軟的 Windows 系統(tǒng)不同的是,如果你用慣了 Microsoft Word 或 Corel Wordperfect 的話,那麼除了 X window 裡面的圖形介面編輯程式(如 xemacs )用起來(lái)尚可應(yīng)付外,在 Linux 的文字模式下,會(huì)覺(jué)得文書編輯程式都沒(méi)有視窗介面來(lái)的直觀與方便。

            Tips:
            什麼是純文字檔?其實(shí)檔案記錄的就是 0 與 1 ,而我們透過(guò)編碼系統(tǒng)來(lái)將這些 0 與 1 轉(zhuǎn)成我們認(rèn)識(shí)的文字就是了。 在第零章裡面的資料表示方式有較多說(shuō)明,請(qǐng)自行查閱。 ASCII 就是其中一種廣為使用的文字編碼系統(tǒng),在 ASCII 系統(tǒng)中的圖示與代碼可以參考 http://zh.wikipedia.org/wiki/ASCII呢!
            鳥哥的圖示

            那麼 Linux 在文字介面下的文書編輯器有哪些呢?其實(shí)有非常多喔!常常聽到的就有: emacspico,nanojoe, 與 vim 等等(註1)。 既然有這麼多文字介面的文書編輯器,那麼我們?yōu)槭颤N一定要學(xué) vi ?。窟€有那個(gè) vim 是做啥用的?底下就來(lái)談一談先!


            小標(biāo)題的圖示為何要學(xué) vim

            文書編輯器那麼多,我們之前在第五章也曾經(jīng)介紹過(guò)那簡(jiǎn)單好用的 nano ,既然已經(jīng)學(xué)會(huì)了 nano ,幹嘛鳥哥還一直要你學(xué)這不是很友善的 vi 呢?其實(shí)是有原因的啦!因?yàn)椋?/p>

            • 所有的 Unix Like 系統(tǒng)都會(huì)內(nèi)建 vi 文書編輯器,其他的文書編輯器則不一定會(huì)存在;
            • 很多個(gè)別軟體的編輯介面都會(huì)主動(dòng)呼叫 vi (例如未來(lái)會(huì)談到的 crontabvisudoedquota 等指令);
            • vim 具有程式編輯的能力,可以主動(dòng)的以字體顏色辨別語(yǔ)法的正確性,方便程式設(shè)計(jì);
            • 因?yàn)槌淌胶?jiǎn)單,編輯速度相當(dāng)快速。

            其實(shí)重點(diǎn)是上述的第二點(diǎn),因?yàn)橛刑?Linux 上面的指令都預(yù)設(shè)使用 vi 作為資料編輯的介面,所以你必須、一定要學(xué)會(huì) vi ,否則很多指令你根本就無(wú)法操作呢!這樣說(shuō),有刺激到你務(wù)必要學(xué)會(huì) vi 的熱情了嗎? ^_^

            那麼什麼是 vim 呢?其實(shí)你可以將 vim 視作 vi 的進(jìn)階版本,vim 可以用顏色或底線等方式來(lái)顯示一些特殊的資訊。 舉例來(lái)說(shuō),當(dāng)你使用 vim 去編輯一個(gè) C 程式語(yǔ)言的檔案,或者是我們後續(xù)會(huì)談到的shell script 程式時(shí),vim 會(huì)依據(jù)檔案的副檔名或者是檔案內(nèi)的開頭資訊, 判斷該檔案的內(nèi)容而自動(dòng)的呼叫該程式的語(yǔ)法判斷式,再以顏色來(lái)顯示程式碼與一般資訊。也就是說(shuō), 這個(gè) vim 是個(gè)『程式編輯器』啦!甚至一些 Linux 基礎(chǔ)設(shè)定檔內(nèi)的語(yǔ)法,都能夠用 vim 來(lái)檢查呢! 例如我們?cè)诘诎苏抡劦降?nbsp;/etc/fstab 這個(gè)檔案的內(nèi)容。

            簡(jiǎn)單的來(lái)說(shuō), vi 是老式的文書處理器,不過(guò)功能已經(jīng)很齊全了,但是還是有可以進(jìn)步的地方。 vim 則可以說(shuō)是程式開發(fā)者的一項(xiàng)很好用的工具,就連 vim 的官方網(wǎng)站 (http://www.vim.org) 自己也說(shuō) vim 是一個(gè)『程式開發(fā)工具』而不是文書處理軟體~^_^。 因?yàn)?vim 裡面加入了很多額外的功能,例如支援正規(guī)表示法的搜尋架構(gòu)、多檔案編輯、區(qū)塊複製等等。 這對(duì)於我們?cè)?Linux 上面進(jìn)行一些設(shè)定檔的修訂工作時(shí),是很棒的一項(xiàng)功能呢!

            Tips:
            什麼時(shí)候會(huì)使用到 vim 呢?其實(shí)鳥哥的整個(gè)網(wǎng)站都是在 vim 的環(huán)境下一字一字的建立起來(lái)的喔! 早期鳥哥使用網(wǎng)頁(yè)製作軟體在編寫網(wǎng)頁(yè),但是老是發(fā)現(xiàn)網(wǎng)頁(yè)編輯軟體都不怎麼友善,尤其是寫到 PHP 方面的程式碼時(shí)。 後來(lái)就乾脆不使用所見即所得的編輯軟體,直接使用 vim ,然後標(biāo)籤 (tag) 也都自行用鍵盤輸入! 這樣整個(gè)檔案也比較乾淨(jìng)!所以說(shuō),鳥哥我是很喜歡 vim 的啦! ^_^
            鳥哥的圖示

            底下鳥哥會(huì)先就簡(jiǎn)單的 vi 做個(gè)介紹,然後再跟大家報(bào)告一下 vim 的額外功能與用法呢!


            大標(biāo)題的圖示vi 的使用

            基本上 vi 共分為三種模式,分別是『一般模式』、『編輯模式』與『指令列命令模式』。 這三種模式的作用分別是:

            • 一般模式
              以 vi 打開一個(gè)檔案就直接進(jìn)入一般模式了(這是預(yù)設(shè)的模式)。在這個(gè)模式中, 你可以使用『上下左右』按鍵來(lái)移動(dòng)游標(biāo),你可以使用『刪除字元』或『刪除整行』來(lái)處理檔案內(nèi)容, 也可以使用『複製、貼上』來(lái)處理你的文件資料。

            • 編輯模式
              在一般模式中可以進(jìn)行刪除、複製、貼上等等的動(dòng)作,但是卻無(wú)法編輯文件內(nèi)容的! 要等到你按下『i, I, o, O, a, A, r, R』等任何一個(gè)字母之後才會(huì)進(jìn)入編輯模式。注意了!通常在 Linux 中,按下這些按鍵時(shí),在畫面的左下方會(huì)出現(xiàn)『 INSERT 或 REPLACE 』的字樣,此時(shí)才可以進(jìn)行編輯。而如果要回到一般模式時(shí), 則必須要按下『Esc』這個(gè)按鍵即可退出編輯模式。

            • 指令列命令模式
              在一般模式當(dāng)中,輸入『 : / ? 』三個(gè)中的任何一個(gè)按鈕,就可以將游標(biāo)移動(dòng)到最底下那一行。在這個(gè)模式當(dāng)中, 可以提供你『搜尋資料』的動(dòng)作,而讀取、存檔、大量取代字元、離開 vi 、顯示行號(hào)等等的動(dòng)作則是在此模式中達(dá)成的!

            簡(jiǎn)單的說(shuō),我們可以將這三個(gè)模式想成底下的圖示來(lái)表示:

            vi三種模式的相互關(guān)係
            圖 2.1、vi 三種模式的相互關(guān)係

            注意到上面的圖示,你會(huì)發(fā)現(xiàn)一般模式可與編輯模式及指令列模式切換, 但編輯模式與指令列模式之間不可互相切換喔!這非常重要啦! 閒話不多說(shuō),我們底下以一個(gè)簡(jiǎn)單的例子來(lái)進(jìn)行說(shuō)明吧!


            小標(biāo)題的圖示簡(jiǎn)易執(zhí)行範(fàn)例

            如果你想要使用 vi 來(lái)建立一個(gè)名為 test.txt 的檔案時(shí),你可以這樣做:

            1. 使用 vi 進(jìn)入一般模式;
              [root@www ~]# vi test.txt
              
              直接輸入『 vi 檔名』就能夠進(jìn)入 vi 的一般模式了。請(qǐng)注意,記得 vi 後面一定要加檔名,不管該檔名存在與否! 整個(gè)畫面主要分為兩部份,上半部與最底下一行兩者可以視為獨(dú)立的。如下圖 2.1.1 所示,圖中那個(gè)虛線是不存在的, 鳥哥用來(lái)說(shuō)明而已啦!上半部顯示的是檔案的實(shí)際內(nèi)容,最底下一行則是狀態(tài)顯示列(如下圖的[New File]資訊), 或者是命令下達(dá)列喔!

              用 vi 開啟一個(gè)新檔案
              圖 2.1.1、用 vi 開啟一個(gè)新檔案

              如果你開啟的檔案是舊檔(已經(jīng)存在的檔案),則可能會(huì)出現(xiàn)如下的資訊:

              用 vi 開啟一個(gè)舊檔案
              圖 2.1.2、用 vi 開啟一個(gè)舊檔案

              如上圖 2.1.2 所示,箭頭所指的那個(gè)『"/etc/man.config" 141L, 4617C』代表的是『檔名為 /etc/man.conf, 檔案內(nèi)有 141 行 以及具有 4617 個(gè)字元』的意思! 那一行的內(nèi)容並不是在檔案內(nèi),而是 vi 顯示一些資訊的地方喔!此時(shí)是在一般模式的環(huán)境下啦。 接下來(lái)開始來(lái)輸入吧!

            2. 按下 i 進(jìn)入編輯模式,開始編輯文字

              在一般模式之中,只要按下 i, o, a 等字元就可以進(jìn)入編輯模式了!在編輯模式當(dāng)中,你可以發(fā)現(xiàn)在左下角狀態(tài)列中會(huì)出現(xiàn) –INSERT- 的字樣,那就是可以輸入任意字元的提示囉!這個(gè)時(shí)候,鍵盤上除了 [Esc] 這個(gè)按鍵之外,其他的按鍵都可以視作為一般的輸入按鈕了,所以你可以進(jìn)行任何的編輯囉!

              開始用 vi 來(lái)進(jìn)行編輯
              圖 2.1.3、開始用 vi 來(lái)進(jìn)行編輯
              Tips:
              在 vi 裡面, [tab] 這個(gè)按鈕所得到的結(jié)果與空白字元所得到的結(jié)果是不一樣的,特別強(qiáng)調(diào)一下!
              鳥哥的圖示
            3. 按下 [ESC] 按鈕回到一般模式

              好了,假設(shè)我已經(jīng)按照上面的樣式給他編輯完畢了,那麼應(yīng)該要如何退出呢?是的!沒(méi)錯(cuò)!就是給他按下 [Esc] 這個(gè)按鈕即可!馬上你就會(huì)發(fā)現(xiàn)畫面左下角的 – INSERT – 不見了!

            4. 在一般模式中按下 :wq 儲(chǔ)存後離開 vi

              OK,我們要存檔了,存檔並離開的指令很簡(jiǎn)單,輸入『:wq』即可存檔離開! (注意了,按下 : 該游標(biāo)就會(huì)移動(dòng)到最底下一行去!) 這時(shí)你在提示字元後面輸入『 ls -l 』即可看到我們剛剛建立的 test.txt 檔案啦!整個(gè)圖示有點(diǎn)像底下這樣:

              儲(chǔ)存並離開 vi 環(huán)境
              圖 2.1.4、儲(chǔ)存並離開 vi 環(huán)境

            如此一來(lái),你的檔案 test.txt 就已經(jīng)建立起來(lái)囉!需要注意的是,如果你的檔案權(quán)限不對(duì),例如為 -r--r--r-- 時(shí),那麼可能會(huì)無(wú)法寫入,此時(shí)可以使用『強(qiáng)制寫入』的方式嗎?可以!使用『 :wq! 』 多加一個(gè)驚嘆號(hào)即可!不過(guò),需要特別注意呦!那個(gè)是在『你的權(quán)限可以改變』的情況下才能成立的! 關(guān)於權(quán)限的概念,請(qǐng)自行回去翻一下第六章的內(nèi)容吧!


            小標(biāo)題的圖示按鍵說(shuō)明

            除了上面簡(jiǎn)易範(fàn)例的 i, [Esc], :wq 之外,其實(shí) vim 還有非常多的按鍵可以使用喔!在介紹之前還是要再次強(qiáng)調(diào), vim 的三種模式只有一般模式可以與編輯、指令列模式切換,編輯模式與指令列模式之間並不能切換的! 這點(diǎn)在圖2.1裡面有介紹到,注意去看看喔!底下就來(lái)談?wù)?vim 軟體中會(huì)用到的按鍵功能吧!


            • 第一部份:一般模式可用的按鈕說(shuō)明,游標(biāo)移動(dòng)、複製貼上、搜尋取代等

            移動(dòng)游標(biāo)的方法
            h 或 向左方向鍵(←)游標(biāo)向左移動(dòng)一個(gè)字元
            j 或 向下方向鍵(↓)游標(biāo)向下移動(dòng)一個(gè)字元
            k 或 向上方向鍵(↑)游標(biāo)向上移動(dòng)一個(gè)字元
            l 或 向右方向鍵(→)游標(biāo)向右移動(dòng)一個(gè)字元
            如果你將右手放在鍵盤上的話,你會(huì)發(fā)現(xiàn) hjkl 是排列在一起的,因此可以使用這四個(gè)按鈕來(lái)移動(dòng)游標(biāo)。 如果想要進(jìn)行多次移動(dòng)的話,例如向下移動(dòng) 30 行,可以使用 "30j" 或 "30↓" 的組合按鍵, 亦即加上想要進(jìn)行的次數(shù)(數(shù)字)後,按下動(dòng)作即可!
            [Ctrl] + [f]螢?zāi)弧合蛳隆灰苿?dòng)一頁(yè),相當(dāng)於 [Page Down]按鍵 (常用)
            [Ctrl] + [b]螢?zāi)弧合蛏稀灰苿?dòng)一頁(yè),相當(dāng)於 [Page Up] 按鍵 (常用)
            [Ctrl] + [d]螢?zāi)弧合蛳隆灰苿?dòng)半頁(yè)
            [Ctrl] + [u]螢?zāi)弧合蛏稀灰苿?dòng)半頁(yè)
            +游標(biāo)移動(dòng)到非空白字元的下一列
            -游標(biāo)移動(dòng)到非空白字元的上一列
            n<space>那個(gè) n 表示『數(shù)字』,例如 20 。按下數(shù)字後再按空白鍵,游標(biāo)會(huì)向右移動(dòng)這一行的 n 個(gè)字元。例如 20<space> 則游標(biāo)會(huì)向後面移動(dòng) 20 個(gè)字元距離。
            0 或功能鍵[Home]這是數(shù)字『 0 』:移動(dòng)到這一行的最前面字元處 (常用)
            $ 或功能鍵[End]移動(dòng)到這一行的最後面字元處(常用)
            H游標(biāo)移動(dòng)到這個(gè)螢?zāi)坏淖钌戏侥且恍械牡谝粋€(gè)字元
            M游標(biāo)移動(dòng)到這個(gè)螢?zāi)坏闹醒肽且恍械牡谝粋€(gè)字元
            L游標(biāo)移動(dòng)到這個(gè)螢?zāi)坏淖钕路侥且恍械牡谝粋€(gè)字元
            G移動(dòng)到這個(gè)檔案的最後一行(常用)
            nGn 為數(shù)字。移動(dòng)到這個(gè)檔案的第 n 行。例如 20G 則會(huì)移動(dòng)到這個(gè)檔案的第 20 行(可配合 :set nu)
            gg移動(dòng)到這個(gè)檔案的第一行,相當(dāng)於 1G 啊! (常用)
            n<Enter>n 為數(shù)字。游標(biāo)向下移動(dòng) n 行(常用)
            搜尋與取代
            /word向游標(biāo)之下尋找一個(gè)名稱為 word 的字串。例如要在檔案內(nèi)搜尋 vbird 這個(gè)字串,就輸入 /vbird 即可! (常用)
            ?word向游標(biāo)之上尋找一個(gè)字串名稱為 word 的字串。
            n這個(gè) n 是英文按鍵。代表『重複前一個(gè)搜尋的動(dòng)作』。舉例來(lái)說(shuō), 如果剛剛我們執(zhí)行 /vbird 去向下搜尋 vbird 這個(gè)字串,則按下 n 後,會(huì)向下繼續(xù)搜尋下一個(gè)名稱為 vbird 的字串。如果是執(zhí)行 ?vbird 的話,那麼按下 n 則會(huì)向上繼續(xù)搜尋名稱為 vbird 的字串!
            N這個(gè) N 是英文按鍵。與 n 剛好相反,為『反向』進(jìn)行前一個(gè)搜尋動(dòng)作。 例如 /vbird 後,按下 N 則表示『向上』搜尋 vbird 。
            使用 /word 配合 n 及 N 是非常有幫助的!可以讓你重複的找到一些你搜尋的關(guān)鍵字!
            :n1,n2s/word1/word2/gn1 與 n2 為數(shù)字。在第 n1 與 n2 行之間尋找 word1 這個(gè)字串,並將該字串取代為 word2 !舉例來(lái)說(shuō),在 100 到 200 行之間搜尋 vbird 並取代為 VBIRD 則:
            『:100,200s/vbird/VBIRD/g』。(常用)
            :1,$s/word1/word2/g從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !(常用)
            :1,$s/word1/word2/gc從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !且在取代前顯示提示字元給使用者確認(rèn) (confirm) 是否需要取代!(常用)
            刪除、複製與貼上
            x, X在一行字當(dāng)中,x 為向後刪除一個(gè)字元 (相當(dāng)於 [del] 按鍵), X 為向前刪除一個(gè)字元(相當(dāng)於 [backspace] 亦即是倒退鍵) (常用)
            nxn 為數(shù)字,連續(xù)向後刪除 n 個(gè)字元。舉例來(lái)說(shuō),我要連續(xù)刪除 10 個(gè)字元, 『10x』。
            dd刪除游標(biāo)所在的那一整列(常用)
            nddn 為數(shù)字。刪除游標(biāo)所在的向下 n 列,例如 20dd 則是刪除 20 列 (常用)
            d1G刪除游標(biāo)所在到第一行的所有資料
            dG刪除游標(biāo)所在到最後一行的所有資料
            d$刪除游標(biāo)所在處,到該行的最後一個(gè)字元
            d0那個(gè)是數(shù)字的 0 ,刪除游標(biāo)所在處,到該行的最前面一個(gè)字元
            yy複製游標(biāo)所在的那一行(常用)
            nyyn 為數(shù)字。複製游標(biāo)所在的向下 n 列,例如 20yy 則是複製 20 列(常用)
            y1G複製游標(biāo)所在列到第一列的所有資料
            yG複製游標(biāo)所在列到最後一列的所有資料
            y0複製游標(biāo)所在的那個(gè)字元到該行行首的所有資料
            y$複製游標(biāo)所在的那個(gè)字元到該行行尾的所有資料
            p, Pp 為將已複製的資料在游標(biāo)下一行貼上,P 則為貼在游標(biāo)上一行! 舉例來(lái)說(shuō),我目前游標(biāo)在第 20 行,且已經(jīng)複製了 10 行資料。則按下 p 後, 那 10 行資料會(huì)貼在原本的 20 行之後,亦即由 21 行開始貼。但如果是按下 P 呢? 那麼原本的第 20 行會(huì)被推到變成 30 行。 (常用)
            J將游標(biāo)所在列與下一列的資料結(jié)合成同一列
            c重複刪除多個(gè)資料,例如向下刪除 10 行,[ 10cj ]
            u復(fù)原前一個(gè)動(dòng)作。(常用)
            [Ctrl]+r重做上一個(gè)動(dòng)作。(常用)
            這個(gè) u 與 [Ctrl]+r 是很常用的指令!一個(gè)是復(fù)原,另一個(gè)則是重做一次~ 利用這兩個(gè)功能按鍵,你的編輯,嘿嘿!很快樂(lè)的啦!
            .不要懷疑!這就是小數(shù)點(diǎn)!意思是重複前一個(gè)動(dòng)作的意思。 如果你想要重複刪除、重複貼上等等動(dòng)作,按下小數(shù)點(diǎn)『.』就好了! (常用)


            • 第二部份:一般模式切換到編輯模式的可用的按鈕說(shuō)明

            進(jìn)入插入或取代的編輯模式
            i, I進(jìn)入插入模式(Insert mode):
            i 為『從目前游標(biāo)所在處插入』, I 為『在目前所在行的第一個(gè)非空白字元處開始插入』。 (常用)
            a, A進(jìn)入插入模式(Insert mode):
            a 為『從目前游標(biāo)所在的下一個(gè)字元處開始插入』, A 為『從游標(biāo)所在行的最後一個(gè)字元處開始插入』。(常用)
            o, O進(jìn)入插入模式(Insert mode):
            這是英文字母 o 的大小寫。o 為『在目前游標(biāo)所在的下一行處插入新的一行』; O 為在目前游標(biāo)所在處的上一行插入新的一行!(常用)
            r, R進(jìn)入取代模式(Replace mode):
            r 只會(huì)取代游標(biāo)所在的那一個(gè)字元一次;R會(huì)一直取代游標(biāo)所在的文字,直到按下 ESC 為止;(常用)
            上面這些按鍵中,在 vi 畫面的左下角處會(huì)出現(xiàn)『--INSERT--』或『--REPLACE--』的字樣。 由名稱就知道該動(dòng)作了吧??!特別注意的是,我們上面也提過(guò)了,你想要在檔案裡面輸入字元時(shí), 一定要在左下角處看到 INSERT 或 REPLACE 才能輸入喔!
            [Esc]退出編輯模式,回到一般模式中(常用)


            • 第三部份:一般模式切換到指令列模式的可用的按鈕說(shuō)明

            指令列的儲(chǔ)存、離開等指令
            :w將編輯的資料寫入硬碟檔案中(常用)
            :w!若檔案屬性為『唯讀』時(shí),強(qiáng)制寫入該檔案。不過(guò),到底能不能寫入, 還是跟你對(duì)該檔案的檔案權(quán)限有關(guān)?。?/td>
            :q離開 vi (常用)
            :q!若曾修改過(guò)檔案,又不想儲(chǔ)存,使用 ! 為強(qiáng)制離開不儲(chǔ)存檔案。
            注意一下啊,那個(gè)驚嘆號(hào) (!) 在 vi 當(dāng)中,常常具有『強(qiáng)制』的意思~
            :wq儲(chǔ)存後離開,若為 :wq! 則為強(qiáng)制儲(chǔ)存後離開 (常用)
            ZZ這是大寫的 Z 喔!若檔案沒(méi)有更動(dòng),則不儲(chǔ)存離開,若檔案已經(jīng)被更動(dòng)過(guò),則儲(chǔ)存後離開!
            :w [filename]將編輯的資料儲(chǔ)存成另一個(gè)檔案(類似另存新檔)
            :r [filename]在編輯的資料中,讀入另一個(gè)檔案的資料。亦即將 『filename』 這個(gè)檔案內(nèi)容加到游標(biāo)所在行後面
            :n1,n2 w [filename]將 n1 到 n2 的內(nèi)容儲(chǔ)存成 filename 這個(gè)檔案。
            :! command暫時(shí)離開 vi 到指令列模式下執(zhí)行 command 的顯示結(jié)果!例如
            『:! ls /home』即可在 vi 當(dāng)中察看 /home 底下以 ls 輸出的檔案資訊!
            vim 環(huán)境的變更
            :set nu顯示行號(hào),設(shè)定之後,會(huì)在每一行的字首顯示該行的行號(hào)
            :set nonu與 set nu 相反,為取消行號(hào)!

            特別注意,在 vi 中,『數(shù)字』是很有意義的!數(shù)字通常代表重複做幾次的意思! 也有可能是代表去到第幾個(gè)什麼什麼的意思。舉例來(lái)說(shuō),要?jiǎng)h除 50 行,則是用 『50dd』 對(duì)吧! 數(shù)字加在動(dòng)作之前~那我要向下移動(dòng) 20 行呢?那就是『20j』或者是『20↓』即可。

            OK!會(huì)這些指令就已經(jīng)很厲害了,因?yàn)槌S玫降闹噶钜仓挥胁坏揭话?!通?vi 的指令除了上面鳥哥註明的常用的幾個(gè)外,其他是不用背的,你可以做一張簡(jiǎn)單的指令表在你的螢?zāi)粻澤希?一有疑問(wèn)可以馬上的查詢呦!這也是當(dāng)初鳥哥使用 vim 的方法啦!


            小標(biāo)題的圖示一個(gè)案例練習(xí)

            來(lái)來(lái)來(lái)!趕緊測(cè)試一下你是否已經(jīng)熟悉 vi 這個(gè)指令呢?請(qǐng)依照底下的需求進(jìn)行指令動(dòng)作。 (底下的操作為使用 CentOS 5.2 中的 man.config 來(lái)做練習(xí)的,該檔案你可以在這裡下載:http://linux.vbird.org/linux_basic/0310vi/man.config。) 看看你的顯示結(jié)果與鳥哥的結(jié)果是否相同???

            1. 請(qǐng)?jiān)?/tmp 這個(gè)目錄下建立一個(gè)名為 vitest 的目錄;
            2. 進(jìn)入 vitest 這個(gè)目錄當(dāng)中;
            3. 將 /etc/man.config 複製到本目錄底下(或由上述的連結(jié)下載 man.config 檔案);
            4. 使用 vi 開啟本目錄下的 man.config 這個(gè)檔案;
            5. 在 vi 中設(shè)定一下行號(hào);
            6. 移動(dòng)到第 58 行,向右移動(dòng) 40 個(gè)字元,請(qǐng)問(wèn)你看到的雙引號(hào)內(nèi)是什麼目錄?
            7. 移動(dòng)到第一行,並且向下搜尋一下『 bzip2 』這個(gè)字串,請(qǐng)問(wèn)他在第幾行?
            8. 接著下來(lái),我要將 50 到 100 行之間的『小寫 man 字串』改為『大寫 MAN 字串』,並且一個(gè)一個(gè)挑選是否需要修改,如何下達(dá)指令?如果在挑選過(guò)程中一直按『y』, 結(jié)果會(huì)在最後一行出現(xiàn)改變了幾個(gè) man 呢?
            9. 修改完之後,突然反悔了,要全部復(fù)原,有哪些方法?
            10. 我要複製 65 到 73 這九行的內(nèi)容(含有MANPATH_MAP),並且貼到最後一行之後;
            11. 21 到 42 行之間的開頭為 # 符號(hào)的註解資料我不要了,要如何刪除?
            12. 將這個(gè)檔案另存成一個(gè) man.test.config 的檔名;
            13. 去到第 27 行,並且刪除 15 個(gè)字元,結(jié)果出現(xiàn)的第一個(gè)單字是什麼?
            14. 在第一行新增一行,該行內(nèi)容輸入『I am a student...』;
            15. 儲(chǔ)存後離開吧!

            整個(gè)步驟可以如下顯示:

            1. 『mkdir /tmp/vitest』
            2. 『cd /tmp/vitest』
            3. 『cp /etc/man.config .』
            4. 『vi man.config』
            5. 『:set nu』然後你會(huì)在畫面中看到左側(cè)出現(xiàn)數(shù)字即為行號(hào)。
            6. 先按下『58G』再按下『40→』會(huì)看到『/dir/bin/foo』這個(gè)字樣在雙引號(hào)內(nèi);
            7. 先執(zhí)行『1G』或『gg』後,直接輸入『/bzip2』,則會(huì)去到第 118 行才對(duì)!
            8. 直接下達(dá)『 :50,100s/man/MAN/gc 』即可!若一直按『y』最終會(huì)出現(xiàn)『在 23 行內(nèi)置換 25 個(gè)字串』的說(shuō)明。
            9. (1)簡(jiǎn)單的方法可以一直按『 u 』回復(fù)到原始狀態(tài),(2)使用不儲(chǔ)存離開『 :q! 』之後,再重新讀取一次該檔案;
            10. 『65G』 然後再『 9yy 』之後最後一行會(huì)出現(xiàn)『複製九行』之類的說(shuō)明字樣。 按下『 G 』到最後一行,再給他『 p 』貼上九行!
            11. 因?yàn)?21~42 22 行,因此『 21G 』→『 22dd 』就能刪除 22 行,此時(shí)你會(huì)發(fā)現(xiàn)游標(biāo)所在 21 行的地方變成 MANPATH 開頭囉, 註解的 # 符號(hào)那幾行都被刪除了。
            12. 『 :w man.test.config 』,你會(huì)發(fā)現(xiàn)最後一行出現(xiàn) "man.test.config" [New].. 的字樣。
            13. 『27G』 之後,再給他『 15x 』即可刪除 15 個(gè)字元,出現(xiàn)『 you 』的字樣;
            14. 先『 1G 』去到第一行,然後按下大寫的『 O 』便新增一行且在插入模式;開始輸入『I am a student...』後, 按下[Esc]回到一般模式等待後續(xù)工作;
            15. 『:wq』

            如果你的結(jié)果都可以查的到,那麼 vi 的使用上面應(yīng)該沒(méi)有太大的問(wèn)題啦!剩下的問(wèn)題會(huì)是在…打字練習(xí)…。


            小標(biāo)題的圖示vim 的暫存檔、救援回復(fù)與開啟時(shí)的警告訊息

            在目前主要的編輯軟體都會(huì)有『回復(fù)』的功能,亦即當(dāng)你的系統(tǒng)因?yàn)槟承┰蚨鴮?dǎo)致類似當(dāng)機(jī)的情況時(shí), 還可以透過(guò)某些特別的機(jī)制來(lái)讓你將之前未儲(chǔ)存的資料『救』回來(lái)!這就是鳥哥這裡所謂的『回復(fù)』功能啦! 那麼 vim 有沒(méi)有回復(fù)功能呢?有的! vim 就是透過(guò)『暫存檔』來(lái)救援的啦!

            當(dāng)我們?cè)谑褂?vim 編輯時(shí), vim 會(huì)在與被編輯的檔案的目錄下,再建立一個(gè)名為 .filename.swp 的檔案。 比如說(shuō)我們?cè)谏弦粋€(gè)小節(jié)談到的編輯 /tmp/vitest/man.config 這個(gè)檔案時(shí), vim 會(huì)主動(dòng)的建立 /tmp/vitest/.man.config.swp 的暫存檔,你對(duì) man.config 做的動(dòng)作就會(huì)被記錄到這個(gè) .man.config.swp 當(dāng)中喔!如果你的系統(tǒng)因?yàn)槟承┰驍嗑€了, 導(dǎo)致你編輯的檔案還沒(méi)有儲(chǔ)存,這個(gè)時(shí)候 .man.config.swp 就能夠發(fā)會(huì)救援的功能了!我們來(lái)測(cè)試一下吧! 底下的練習(xí)有些部分的指令我們尚未談到,沒(méi)關(guān)係,你先照著做,後續(xù)再回來(lái)瞭解囉!

            [root@www ~]# cd /tmp/vitest
            [root@www vitest]# vim man.config
            # 此時(shí)會(huì)進(jìn)入到 vim 的畫面,請(qǐng)?jiān)?vim 的一般模式下按下『 [ctrl]-z 』的組合鍵
            
            [1]+  Stopped             vim man.config  <==按下 [ctrl]-z 會(huì)告訴你這個(gè)訊息
            

            當(dāng)我們?cè)?vim 的一般模式下按下 [ctrl]-z 的組合按鍵時(shí),你的 vim 會(huì)被丟到背景去執(zhí)行! 這部份的功能我們會(huì)在第十七章的程序管理當(dāng)中談到, 你這裡先知道一下即可。回到命令提示字元後,接下來(lái)我們來(lái)模擬將 vim 的工作不正常的中斷吧!

            [root@www vitest]# ls -al
            total 48
            drwxr-xr-x 2 root root 4096 Jan 12 14:48 .
            drwxrwxrwt 7 root root 4096 Jan 12 13:26 ..
            -rw-r--r-- 1 root root 4101 Jan 12 13:55 man.config
            -rw-r--r-- 1 root root 4096 Jan 12 14:48 .man.config.swp  <==就是他,暫存檔
            -rw-r--r-- 1 root root 4101 Jan 12 13:43 man.test.config
            
            [root@www vitest]# kill -9 %1 <==這裡模擬斷線停止 vim 工作
            [root@www vitest]# ls -al .man.config.swp
            -rw-r--r-- 1 root root 4096 Jan 12 14:48 .man.config.swp  <==暫存檔還是會(huì)存在!
            

            那個(gè) kill 可以模擬將系統(tǒng)的 vim 工作刪除的情況,你可以假裝當(dāng)機(jī)了啦! 由於 vim 的工作被不正常的中斷,導(dǎo)致暫存檔無(wú)法藉由正常流程來(lái)結(jié)束, 所以暫存檔就不會(huì)消失,而繼續(xù)保留下來(lái)。此時(shí)如果你繼續(xù)編輯那個(gè) man.config ,會(huì)出現(xiàn)什麼情況呢? 會(huì)出現(xiàn)如下所示的狀態(tài)喔:

            [root@www vitest]# vim man.config
            E325: ATTENTION  <==錯(cuò)誤代碼
            Found a swap file by the name ".man.config.swp"  <==底下數(shù)行說(shuō)明有暫存檔的存在
                      owned by: root   dated: Mon Jan 12 14:48:24 2009
                     file name: /tmp/vitest/man.config  <==這個(gè)暫存檔屬於哪個(gè)實(shí)際的檔案?
                      modified: no
                     user name: root   host name: www.vbird.tsai
                    process ID: 11539
            While opening file "man.config"
                         dated: Mon Jan 12 13:55:07 2009
            底下說(shuō)明可能發(fā)生這個(gè)錯(cuò)誤的兩個(gè)主要原因與解決方案!
            (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.config"
                to recover the changes (see ":help recovery").
                If you did this already, delete the swap file ".man.config.swp"
                to avoid this message.
            
            Swap file ".man.config.swp" already exists!底下說(shuō)明你可進(jìn)行的動(dòng)作
            [O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:  
            

            由於暫存檔存在的關(guān)係,因此 vim 會(huì)主動(dòng)的判斷你的這個(gè)檔案可能有些問(wèn)題,在上面的圖示中 vim 提示兩點(diǎn)主要的問(wèn)題與解決方案,分別是這樣的:

            • 問(wèn)題一:可能有其他人或程式同時(shí)在編輯這個(gè)檔案:

              由於 Linux 是多人多工的環(huán)境,因此很可能有很多人同時(shí)在編輯同一個(gè)檔案。如果在多人共同編輯的情況下, 萬(wàn)一大家同時(shí)儲(chǔ)存,那麼這個(gè)檔案的內(nèi)容將會(huì)變的亂七八糟!為了避免這個(gè)問(wèn)題,因此 vim 會(huì)出現(xiàn)這個(gè)警告視窗! 解決的方法則是:

              • 找到另外那個(gè)程式或人員,請(qǐng)他將該 vim 的工作結(jié)束,然後你再繼續(xù)處理。 

              • 如果你只是要看該檔案的內(nèi)容並不會(huì)有任何修改編輯的行為,那麼可以選擇開啟成為唯讀(O)檔案, 亦即上述畫面反白部分輸入英文『 o 』即可,其實(shí)就是 [O]pen Read-Only 的選項(xiàng)啦!

            • 問(wèn)題二:在前一個(gè) vim 的環(huán)境中,可能因?yàn)槟承┎恢驅(qū)е?vim 中斷 (crashed):

              這就是常見的不正常結(jié)束 vim 產(chǎn)生的後果。解決方案依據(jù)不同的情況而不同喔!常見的處理方法為:

              • 如果你之前的 vim 處理動(dòng)作尚未儲(chǔ)存,此時(shí)你應(yīng)該要按下『R』,亦即使用 (R)ecover 的項(xiàng)目, 此時(shí) vim 會(huì)載入 .man.config.swp 的內(nèi)容,讓你自己來(lái)決定要不要儲(chǔ)存!這樣就能夠救回來(lái)你之前未儲(chǔ)存的工作。 不過(guò)那個(gè) .man.config.swp 並不會(huì)在你結(jié)束 vim 後自動(dòng)刪除,所以你離開 vim 後還得要自行刪除 .man.config.swp 才能避免每次打開這個(gè)檔案都會(huì)出現(xiàn)這樣的警告!

              • 如果你確定這個(gè)暫存檔是沒(méi)有用的,那麼你可以直接按下『D』刪除掉這個(gè)暫存檔,亦即 (D)elete it 這個(gè)項(xiàng)目即可。 此時(shí) vim 會(huì)載入 man.config ,並且將舊的 .man.config.swp 刪除後,建立這次會(huì)使用的新的 .man.config.swp 喔!

            至於這個(gè)發(fā)現(xiàn)暫存檔警告訊息的畫面中,有出現(xiàn)六個(gè)可用按鈕,各按鈕的說(shuō)明如下:

            • [O]pen Read-Only:打開此檔案成為唯讀檔, 可以用在你只是想要查閱該檔案內(nèi)容並不想要進(jìn)行編輯行為時(shí)。一般來(lái)說(shuō),在上課時(shí),如果你是登入到同學(xué)的電腦去看他的設(shè)定檔, 結(jié)果發(fā)現(xiàn)其實(shí)同學(xué)他自己也在編輯時(shí),可以使用這個(gè)模式;

            • (E)dit anyway:還是用正常的方式打開你要編輯的那個(gè)檔案, 並不會(huì)載入暫存檔的內(nèi)容。不過(guò)很容易出現(xiàn)兩個(gè)使用者互相改變對(duì)方的檔案等問(wèn)題!不好不好!

            • (R)ecover:就是載入暫存檔的內(nèi)容,用在你要救回之前未儲(chǔ)存的工作。 不過(guò)當(dāng)你救回來(lái)並且儲(chǔ)存離開 vim 後,還是要手動(dòng)自行刪除那個(gè)暫存檔喔!

            • (D)elete it:你確定那個(gè)暫存檔是無(wú)用的!那麼開啟檔案前會(huì)先將這個(gè)暫存檔刪除! 這個(gè)動(dòng)作其實(shí)是比較常做的!因?yàn)槟憧赡懿淮_定這個(gè)暫存檔是怎麼來(lái)的,所以就刪除掉他吧!哈哈!

            • (Q)uit:按下 q 就離開 vim ,不會(huì)進(jìn)行任何動(dòng)作回到命令提示字元。

            • (A)bort:忽略這個(gè)編輯行為,感覺(jué)上與 quit 非常類似! 也會(huì)送你回到命令提示字元就是囉!

            大標(biāo)題的圖示vim 的額外功能

            其實(shí),目前大部分的 distributions 都以 vim 取代 vi 的功能了!如果你使用 vi 後,卻看到畫面的右下角有顯示目前游標(biāo)所在的行列號(hào)碼,那麼你的 vi 已經(jīng)被 vim 所取代囉~ 為什麼要用 vim 呢?因?yàn)?vim 具有顏色顯示的功能,並且還支援許多的程式語(yǔ)法 (syntax), 因此,當(dāng)你使用 vim 編輯程式時(shí)( 不論是 C 語(yǔ)言,還是 shell script ), 我們的 vim 將可幫你直接進(jìn)行『程式除錯(cuò) (debug)』的功能!真的很不賴吧!^_^

            如果你在文字模式下,輸入 alias 時(shí),出現(xiàn)這樣的畫面:

            [root@www ~]# alias
            ....其他省略....
            alias vi='vim'  <==重點(diǎn)在這行??!
            

            這表示當(dāng)你使用 vi 這個(gè)指令時(shí),其實(shí)就是執(zhí)行 vim 啦!如果你沒(méi)有這一行,那麼你就必須要使用 vim filename 來(lái)啟動(dòng) vim 囉!基本上, vim 的一般用法與 vi 完全一模一樣~沒(méi)有不同啦!那麼我們就來(lái)看看 vim 的畫面是怎樣囉!假設(shè)我想要編輯 /etc/man.config ,則輸入『vim /etc/man.config

            vim 的圖示示意
            圖3.0.1、 vim 的圖示示意

            上面是 vim 的畫面示意圖,在這個(gè)畫面中有幾點(diǎn)特色要說(shuō)明喔:

            1. 由於 man.config 是系統(tǒng)規(guī)劃的設(shè)定檔,因此 vim 會(huì)進(jìn)行語(yǔ)法檢驗(yàn),所以你會(huì)看到畫面中內(nèi)部主要為深藍(lán)色, 且深藍(lán)色那一行是以註解符號(hào) (#) 為開頭;
            2. 最底下一行的左邊顯示該檔案的屬性,包括 141行與 4617 字元;
            3. 最底下一行的右邊出現(xiàn)的 1,1 表示游標(biāo)所在為第一行, 第一個(gè)字元位置之意(請(qǐng)看一下上圖中的游標(biāo)所在);

            所以,如果你向下移動(dòng)到其他位置時(shí),出現(xiàn)的非註解的資料就會(huì)有點(diǎn)像這樣:

            vim 的圖示示意
            圖3.0.2、 vim 的圖示示意

            看到了喔!除了註解之外,其他的行就會(huì)有特別的顏色顯示呢!可以避免你打錯(cuò)字?。《遥?最右下角的 30% 代表目前這個(gè)畫面佔(zhàn)整體檔案的 30% 之意!這樣瞭乎?


            小標(biāo)題的圖示區(qū)塊選擇(Visual Block)

            剛剛我們提到的簡(jiǎn)單的 vi 操作過(guò)程中,幾乎提到的都是以行為單位的操作。那麼如果我想要搞定的是一個(gè)區(qū)塊範(fàn)圍呢? 舉例來(lái)說(shuō),像底下這種格式的檔案:

            192.168.1.1    host1.class.net
            192.168.1.2    host2.class.net
            192.168.1.3    host3.class.net
            192.168.1.4    host4.class.net
            .....中間省略......
            

            這個(gè)檔案我將他放置到 http://linux.vbird.org/linux_basic/0310vi/hosts ,你可以自行下載來(lái)看一看這個(gè)檔案?。‖F(xiàn)在我們來(lái)玩一玩這個(gè)檔案吧!假設(shè)我想要將 host1, host2... 等等複製起來(lái), 並且加到每一行的後面,亦即每一行的結(jié)果要是『 192.168.1.2 host2.class.net host2 』這樣的情況時(shí), 在傳統(tǒng)或現(xiàn)代的視窗型編輯器似乎不容易達(dá)到這個(gè)需求,但是咱們的 vim 是辦的到的喔!那就使用區(qū)塊選擇 (Visual Block) 吧!當(dāng)我們按下 v 或者 V 或者 [Ctrl]+v 時(shí), 這個(gè)時(shí)候游標(biāo)移動(dòng)過(guò)的地方就會(huì)開始反白,這三個(gè)按鍵的意義分別是:

            區(qū)塊選擇的按鍵意義
            v字元選擇,會(huì)將游標(biāo)經(jīng)過(guò)的地方反白選擇!
            V行選擇,會(huì)將游標(biāo)經(jīng)過(guò)的行反白選擇!
            [Ctrl]+v區(qū)塊選擇,可以用長(zhǎng)方形的方式選擇資料
            y將反白的地方複製起來(lái)
            d將反白的地方刪除掉

            來(lái)實(shí)際進(jìn)行我們需要的動(dòng)作吧!就是將 host 再加到每一行的最後面,你可以這樣做:

            1. 使用 vim hosts 來(lái)開啟該檔案,記得該檔案請(qǐng)由上述的連結(jié)下載先!
            2. 將游標(biāo)移動(dòng)到第一行的 host 那個(gè) h 上頭,然後按下 [ctrl]-v ,左下角出現(xiàn)區(qū)塊示意字樣:

              進(jìn)入?yún)^(qū)塊功能的示意圖
              圖 3.1.1、進(jìn)入?yún)^(qū)塊功能的示意圖

            3. 將游標(biāo)移動(dòng)到最底部,此時(shí)游標(biāo)移動(dòng)過(guò)的區(qū)域會(huì)反白!如下圖所示:

              區(qū)塊選擇的結(jié)果示意圖
              圖 3.1.2、區(qū)塊選擇的結(jié)果示意圖

            4. 此時(shí)你可以按下『 y 』來(lái)進(jìn)行複製,當(dāng)你按下 y 之後,反白的區(qū)塊就會(huì)消失不見囉!
            5. 最後,將游標(biāo)移動(dòng)到第一行的最右邊,並且再用編輯模式向右按兩個(gè)空白鍵,回到一般模式後, 再按下『 p 』後,你會(huì)發(fā)現(xiàn)很有趣!如下圖所示:

              將區(qū)塊的資料貼上後的結(jié)果
              圖 3.1.3、將區(qū)塊的資料貼上後的結(jié)果

            透過(guò)上述的功能,你可以複製一個(gè)區(qū)塊,並且是貼在某個(gè)『區(qū)塊的範(fàn)圍』內(nèi),而不是以行為單位來(lái)處理你的整份文件喔! 鳥哥個(gè)人是覺(jué)得這玩意兒非常的有幫助啦!至少在進(jìn)行排列整齊的文字檔案中複製/刪除區(qū)塊時(shí),會(huì)是一個(gè)非常棒的功能! 


            小標(biāo)題的圖示多檔案編輯

            假設(shè)一個(gè)例子,你想要將剛剛我們的 hosts 內(nèi)的 IP 複製到你的 /etc/hosts 這個(gè)檔案去, 那麼該如何編輯?我們知道在 vi 內(nèi)可以使用 :r filename 來(lái)讀入某個(gè)檔案的內(nèi)容, 不過(guò),這樣畢竟是將整個(gè)檔案讀入啊!如果我只是想要部分內(nèi)容呢?呵呵!這個(gè)時(shí)候多檔案同時(shí)編輯就很有用了。 我們可以使用 vim 後面同時(shí)接好幾個(gè)檔案來(lái)同時(shí)開啟喔!相關(guān)的按鍵有:

            多檔案編輯的按鍵
            :n編輯下一個(gè)檔案
            :N編輯上一個(gè)檔案
            :files列出目前這個(gè) vim 的開啟的所有檔案

            在過(guò)去,鳥哥想要將 A 檔案內(nèi)的十條消息『移動(dòng)』到 B 檔案去,通常要開兩個(gè) vim 視窗來(lái)複製, 偏偏每個(gè) vim 都是獨(dú)立的,因此並沒(méi)有辦法在 A 檔案下達(dá)『 nyy 』再跑到 B 檔案去『 p 』啦! 在這種情況下最常用的方法就是透過(guò)滑鼠圈選, 複製後貼上。不過(guò)這樣一來(lái)還是有問(wèn)題,因?yàn)轼B哥超級(jí)喜歡使用 [Tab] 按鍵進(jìn)行編排對(duì)齊動(dòng)作, 透過(guò)滑鼠卻會(huì)將 [Tab] 轉(zhuǎn)成空白鍵,這樣內(nèi)容就不一樣了!此時(shí)這個(gè)多檔案編輯就派上用場(chǎng)了!

            現(xiàn)在你可以做一下練習(xí)看看說(shuō)!假設(shè)你要將剛剛鳥哥提供的 hosts 內(nèi)的前四行 IP 資料複製到你的 /etc/hosts 檔案內(nèi),那可以怎麼進(jìn)行呢?可以這樣?。?/p>

            1. 透過(guò)『 vim hosts /etc/hosts 』指令來(lái)使用一個(gè) vim 開啟兩個(gè)檔案;
            2. 在 vim 中先使用『 :files 』察看一下編輯的檔案資料有啥?結(jié)果如下所示。 至於下圖的最後一行顯示的是『按下任意鍵』就會(huì)回到 vim 的一般模式中!

              多檔案編輯示意圖
              圖 3.2.1、多檔案編輯示意圖"

            3. 在第一行輸入『 4yy 』複製四行;
            4. 在 vim 的環(huán)境下輸入『 :n 』會(huì)來(lái)到第二個(gè)編輯的檔案,亦即 /etc/hosts 內(nèi);
            5. 在 /etc/hosts 下按『 G 』到最後一行,再輸入『 p 』貼上;
            6. 按下多次的『 u 』來(lái)還原原本的檔案資料;
            7. 最終按下『 :q 』來(lái)離開 vim 的多檔案編輯吧!

            看到了吧?利用多檔案編輯的功能,可以讓你很快速的就將需要的資料複製到正確的檔案內(nèi)。 當(dāng)然囉,這個(gè)功能也可以利用視窗介面來(lái)達(dá)到,那就是底下要提到的多視窗功能。


            小標(biāo)題的圖示多視窗功能

            在開始這個(gè)小節(jié)前,先來(lái)想像兩個(gè)情況:

            • 當(dāng)我有一個(gè)檔案非常的大,我查閱到後面的資料時(shí),想要『對(duì)照』前面的資料, 是否需要使用 [ctrl]+f 與 [ctrl]+b (或 pageup, pagedown 功能鍵) 來(lái)跑前跑後查閱?

            • 我有兩個(gè)需要對(duì)照著看的檔案,不想使用前一小節(jié)提到的多檔案編輯功能;

            在一般視窗介面下的編輯軟體大多有『分割視窗』或者是『凍結(jié)視窗』的功能來(lái)將一個(gè)檔案分割成多個(gè)視窗的展現(xiàn), 那麼 vim 能不能達(dá)到這個(gè)功能???可以??!但是如何分割視窗並放入檔案呢? 很簡(jiǎn)單??!在指令列模式輸入『:sp {filename}』即可!那個(gè) filename 可有可無(wú), 如果想要在新視窗啟動(dòng)另一個(gè)檔案,就加入檔名,否則僅輸入 :sp 時(shí), 出現(xiàn)的則是同一個(gè)檔案在兩個(gè)視窗間!

            讓我們來(lái)測(cè)試一下,你先使用『 vim /etc/man.config 』打開這個(gè)檔案,然後『 1G 』去到第一行,之後輸入『 :sp 』 再次的打開這個(gè)檔案一次,然後再輸入『 G 』,結(jié)果會(huì)變成底下這樣喔:

            視窗分割的示意圖
            圖 3.3.1、視窗分割的示意圖

            萬(wàn)一你再輸入『 :sp /etc/hosts 』時(shí),就會(huì)變成下圖這樣喔:

            視窗分割的示意圖
            圖 3.3.2、視窗分割的示意圖

            怎樣?帥吧!兩個(gè)檔案同時(shí)在一個(gè)螢?zāi)簧厦骘@示,你還可以利用『[ctrl]+w+↑』及『[ctrl]+w+↓』 在兩個(gè)視窗之間移動(dòng)呢!這樣的話,複製啊、查閱啊等等的,就變的很簡(jiǎn)單囉~ 分割視窗的相關(guān)指令功能有很多,不過(guò)你只要記得這幾個(gè)就好了:

            多視窗情況下的按鍵功能
            :sp [filename]開啟一個(gè)新視窗,如果有加 filename, 表示在新視窗開啟一個(gè)新檔案,否則表示兩個(gè)視窗為同一個(gè)檔案內(nèi)容(同步顯示)。
            [ctrl]+w+ j
            [ctrl]+w+↓
            按鍵的按法是:先按下 [ctrl] 不放, 再按下 w 後放開所有的按鍵,然後再按下 j (或向下方向鍵),則游標(biāo)可移動(dòng)到下方的視窗。
            [ctrl]+w+ k
            [ctrl]+w+↑
            同上,不過(guò)游標(biāo)移動(dòng)到上面的視窗。
            [ctrl]+w+ q其實(shí)就是 :q 結(jié)束離開啦! 舉例來(lái)說(shuō),如果我想要結(jié)束下方的視窗,那麼利用 [ctrl]+w+↓ 移動(dòng)到下方視窗後,按下 :q 即可離開, 也可以按下 [ctrl]+w+q ?。?/td>

            鳥哥第一次玩 vim 的分割視窗時(shí),真是很高興啊!竟然有這種功能!太棒了! ^_^


            小標(biāo)題的圖示vim 環(huán)境設(shè)定與記錄: ~/.vimrc, ~/.viminfo

            有沒(méi)有發(fā)現(xiàn),如果我們以 vim 軟體來(lái)搜尋一個(gè)檔案內(nèi)部的某個(gè)字串時(shí),這個(gè)字串會(huì)被反白, 而下次我們?cè)俅我?vim 編輯這個(gè)檔案時(shí),該搜尋的字串反白情況還是存在呢!甚至於在編輯其他檔案時(shí), 如果其他檔案內(nèi)也存在這個(gè)字串,哇!竟然還是主動(dòng)反白耶!真神奇! 另外,當(dāng)我們重複編輯同一個(gè)檔案時(shí),當(dāng)?shù)诙芜M(jìn)入該檔案時(shí), 游標(biāo)竟然就在上次離開的那一行上頭呢!真是好方便啊~但是,怎麼會(huì)這樣呢?

            這是因?yàn)槲覀兊?vim 會(huì)主動(dòng)的將你曾經(jīng)做過(guò)的行為登錄下來(lái),好讓你下次可以輕鬆的作業(yè)啊! 那個(gè)記錄動(dòng)作的檔案就是: ~/.viminfo !如果你曾經(jīng)使用過(guò) vim, 那你的家目錄應(yīng)該會(huì)存在這個(gè)檔案才對(duì)。這個(gè)檔案是自動(dòng)產(chǎn)生的, 你不必自行建立。而你在 vim 裡頭所做過(guò)的動(dòng)作,就可以在這個(gè)檔案內(nèi)部查詢到囉~ ^_^

            此外,每個(gè) distributions 對(duì) vim 的預(yù)設(shè)環(huán)境都不太相同,舉例來(lái)說(shuō),某些版本在搜尋到關(guān)鍵字時(shí)並不會(huì)高亮度反白, 有些版本則會(huì)主動(dòng)的幫你進(jìn)行縮排的行為。但這些其實(shí)都可以自行設(shè)定的,那就是 vim 的環(huán)境設(shè)定囉~ vim 的環(huán)境設(shè)定參數(shù)有很多,如果你想要知道目前的設(shè)定值,可以在一般模式時(shí)輸入『 :set all 』 來(lái)查閱,不過(guò).....設(shè)定項(xiàng)目實(shí)在太多了~所以,鳥哥在這裡僅列出一些平時(shí)比較常用的一些簡(jiǎn)單的設(shè)定值, 提供給你參考啊。

            Tips:
            所謂的縮排,就是當(dāng)你按下 Enter 編輯新的一行時(shí),游標(biāo)不會(huì)在行首,而是在與上一行的第一個(gè)非空白字元處對(duì)齊!
            鳥哥的圖示
            vim 的環(huán)境設(shè)定參數(shù)
            :set nu
            :set nonu
            就是設(shè)定與取消行號(hào)??!
            :set hlsearch
            :set nohlsearch
            hlsearch 就是 high light search(高亮度搜尋)。 這個(gè)就是設(shè)定是否將搜尋的字串反白的設(shè)定值。預(yù)設(shè)值是 hlsearch
            :set autoindent
            :set noautoindent
            是否自動(dòng)縮排?autoindent 就是自動(dòng)縮排。
            :set backup是否自動(dòng)儲(chǔ)存?zhèn)浞輽n?一般是 nobackup 的, 如果設(shè)定 backup 的話,那麼當(dāng)你更動(dòng)任何一個(gè)檔案時(shí),則原始檔案會(huì)被另存成一個(gè)檔名為 filename~ 的檔案。 舉例來(lái)說(shuō),我們編輯 hosts ,設(shè)定 :set backup ,那麼當(dāng)更動(dòng) hosts 時(shí),在同目錄下,就會(huì)產(chǎn)生 hosts~ 檔名的檔案,記錄原始的 hosts 檔案內(nèi)容
            :set ruler還記得我們提到的右下角的一些狀態(tài)列說(shuō)明嗎? 這個(gè) ruler 就是在顯示或不顯示該設(shè)定值的啦!
            :set showmode這個(gè)則是,是否要顯示 --INSERT-- 之類的字眼在左下角的狀態(tài)列。
            :set backspace=(012)一般來(lái)說(shuō), 如果我們按下 i 進(jìn)入編輯模式後,可以利用倒退鍵 (backspace) 來(lái)刪除任意字元的。 但是,某些 distribution 則不許如此。此時(shí),我們就可以透過(guò) backspace 來(lái)設(shè)定囉~ 當(dāng) backspace 為 2 時(shí),就是可以刪除任意值;0 或 1 時(shí),僅可刪除剛剛輸入的字元, 而無(wú)法刪除原本就已經(jīng)存在的文字了!
            :set all顯示目前所有的環(huán)境參數(shù)設(shè)定值。
            :set顯示與系統(tǒng)預(yù)設(shè)值不同的設(shè)定參數(shù), 一般來(lái)說(shuō)就是你有自行變動(dòng)過(guò)的設(shè)定參數(shù)啦!
            :syntax on
            :syntax off
            是否依據(jù)程式相關(guān)語(yǔ)法顯示不同顏色? 舉例來(lái)說(shuō),在編輯一個(gè)純文字檔時(shí),如果開頭是以 # 開始,那麼該行就會(huì)變成藍(lán)色。 如果你懂得寫程式,那麼這個(gè) :syntax on 還會(huì)主動(dòng)的幫你除錯(cuò)呢!但是, 如果你僅是編寫純文字檔案,要避免顏色對(duì)你的螢?zāi)划a(chǎn)生的干擾,則可以取消這個(gè)設(shè)定 。
            :set bg=dark
            :set bg=light
            可用以顯示不同的顏色色調(diào),預(yù)設(shè)是『 light 』。如果你常常發(fā)現(xiàn)註解的字體深藍(lán)色實(shí)在很不容易看, 那麼這裡可以設(shè)定為 dark 喔!試看看,會(huì)有不同的樣式呢!

            總之,這些設(shè)定值很有用處的啦!但是......我是否每次使用 vim 都要重新設(shè)定一次各個(gè)參數(shù)值? 這不太合理吧?沒(méi)錯(cuò)啊!所以,我們可以透過(guò)設(shè)定檔來(lái)直接規(guī)定我們習(xí)慣的 vim 操作環(huán)境呢! 整體 vim 的設(shè)定值一般是放置在 /etc/vimrc 這個(gè)檔案,不過(guò),不建議你修改他! 你可以修改 ~/.vimrc 這個(gè)檔案(預(yù)設(shè)不存在,請(qǐng)你自行手動(dòng)建立!),將你所希望的設(shè)定值寫入! 舉例來(lái)說(shuō),可以是這樣的一個(gè)檔案:

            [root@www ~]# vim ~/.vimrc
            "這個(gè)檔案的雙引號(hào) (") 是註解
            set hlsearch            "高亮度反白
            set backspace=2         "可隨時(shí)用倒退鍵刪除
            set autoindent          "自動(dòng)縮排
            set ruler               "可顯示最後一行的狀態(tài)
            set showmode            "左下角那一行的狀態(tài)
            set nu                  "可以在每一行的最前面顯示行號(hào)啦!
            set bg=dark             "顯示不同的底色色調(diào)
            syntax on               "進(jìn)行語(yǔ)法檢驗(yàn),顏色顯示。
            

            在這個(gè)檔案中,使用『 set hlsearch 』或『 :set hlsearch 』,亦即最前面有沒(méi)有冒號(hào)『 : 』效果都是一樣的! 至於雙引號(hào)則是註解符號(hào)!不要用錯(cuò)註解符號(hào),否則每次使用 vim 時(shí)都會(huì)發(fā)生警告訊息喔! 建立好這個(gè)檔案後,當(dāng)你下次重新以 vim 編輯某個(gè)檔案時(shí),該檔案的預(yù)設(shè)環(huán)境設(shè)定就是上頭寫的囉~ 這樣,是否很方便你的操作啊!多多利用 vim 的環(huán)境設(shè)定功能呢!^_^


            小標(biāo)題的圖示vim 常用指令示意圖

            為了方便大家查詢?cè)诓煌哪J较驴梢允褂玫?vim 指令,鳥哥查詢了一些 vim 與 Linux 教育訓(xùn)練手冊(cè), 發(fā)現(xiàn)底下這張圖非常值得大家參考!可以更快速有效的查詢到需要的功能喔!看看吧!

            vim 常用指令示意圖
            圖 3.5.1 、 vim 常用指令示意圖

            大標(biāo)題的圖示其他 vim 使用注意事項(xiàng)

            vim 其實(shí)不是那麼好學(xué),雖然他的功能確實(shí)非常強(qiáng)大!所以底下我們還有一些需要注意的地方要來(lái)跟大家分享喔!


            小標(biāo)題的圖示中文編碼的問(wèn)題

            很多朋友常常哀嚎,說(shuō)他們的 vim 裡面怎麼無(wú)法顯示正常的中文???其實(shí)這很有可能是因?yàn)榫幋a的問(wèn)題! 因?yàn)橹形木幋a有 big5 與 utf8 兩種,如果你的檔案是使用 big5 編碼製作的,但在 vim 的終端介面中你使用的是萬(wàn)國(guó)碼(utf8), 由於編碼的不同,你的中文檔案內(nèi)容當(dāng)然就是一堆亂碼了!怎麼辦?這時(shí)你得要考慮許多東西啦!有這些:

            1. 你的 Linux 系統(tǒng)預(yù)設(shè)支援的語(yǔ)系資料:這與 /etc/sysconfig/i18n 有關(guān);
            2. 你的終端介面 (bash) 的語(yǔ)系: 這與 LANG 這個(gè)變數(shù)有關(guān);
            3. 你的檔案原本的編碼;
            4. 開啟終端機(jī)的軟體,例如在 GNOME 底下的視窗介面。

            事實(shí)上最重要的是上頭的第三與第四點(diǎn),只要這兩點(diǎn)的編碼一致,你就能夠正確的看到與編輯你的中文檔案。 否則就會(huì)看到一堆亂碼啦!

            一般來(lái)說(shuō),中文編碼使用 big5 時(shí),在寫入某些資料庫(kù)系統(tǒng)中,在『許、蓋、功』這些字體上面會(huì)發(fā)生錯(cuò)誤! 所以近期以來(lái)大多希望大家能夠使用萬(wàn)國(guó)碼 utf8 來(lái)進(jìn)行中文編碼!但是在 Windows XP 上的軟體常常預(yù)設(shè)使用 big5 的編碼, 包括鳥哥由於沿用以前的文件資料檔案,也大多使用 big5 的編碼。此時(shí)就得要注意上述的這些咚咚囉。

            在 Linux 本機(jī)前的 tty1~tty6 原本預(yù)設(shè)就不支援中文編碼,所以不用考慮這個(gè)問(wèn)題!因?yàn)槟阋欢〞?huì)看到亂碼!呵呵! 現(xiàn)在鳥哥假設(shè)俺的文件檔案內(nèi)編碼為 big5 時(shí),而且我的環(huán)境是使用 Linux 的 GNOME ,啟動(dòng)的終端介面為 GNOME-terminal 軟體, 那鳥哥通常是這樣來(lái)修正語(yǔ)系編碼的行為:

            [root@www ~]# LANG=zh_TW.big5
            

            然後在終端介面工具列的『終端機(jī)』-->『設(shè)定字元編碼』 -->『中文 (正體) (BIG5)』項(xiàng)目點(diǎn)選一下, 如果一切都沒(méi)有問(wèn)題了,再用 vim 去開啟那個(gè) big5 編碼的檔案,就沒(méi)有問(wèn)題了!以上!報(bào)告完畢!


            小標(biāo)題的圖示DOS 與 Linux 的斷行字元

            我們?cè)?a style="text-decoration: none; color: blue; ">第七章裡面談到 cat 這個(gè)指令時(shí),曾經(jīng)提到過(guò) DOS 與 Linux 斷行字元的不同。 而我們也可以利用 cat -A 來(lái)觀察以 DOS (Windows 系統(tǒng)) 建立的檔案的特殊格式, 也可以發(fā)現(xiàn)在 DOS 使用的斷行字元為 ^M$ ,我們稱為 CR 與 LF 兩個(gè)符號(hào)。 而在 Linux 底下,則是僅有 LF ($) 這個(gè)斷行符號(hào)。這個(gè)斷行符號(hào)對(duì)於 Linux 的影響很大喔! 為什麼呢?

            我們說(shuō)過(guò),在 Linux 底下的指令在開始執(zhí)行時(shí),他的判斷依據(jù)是 『Enter』,而 Linux 的 Enter 為 LF 符號(hào), 不過(guò),由於 DOS 的斷行符號(hào)是 CRLF ,也就是多了一個(gè) ^M 的符號(hào)出來(lái), 在這樣的情況下,如果是一個(gè) shell script 的程式檔案,呵呵~將可能造成『程式無(wú)法執(zhí)行』的狀態(tài)~ 因?yàn)樗麜?huì)誤判程式所下達(dá)的指令內(nèi)容啊!這很傷腦筋吧!

            那怎麼辦啊?很簡(jiǎn)單啊,將格式轉(zhuǎn)換成為 Linux 即可??!『廢話』,這當(dāng)然大家都知道,但是, 要以 vi 進(jìn)入該檔案,然後一個(gè)一個(gè)刪除每一行的 CR 嗎?當(dāng)然沒(méi)有這麼沒(méi)人性啦! 我們可以透過(guò)簡(jiǎn)單的指令來(lái)進(jìn)行格式的轉(zhuǎn)換?。?/p>
            [root@www ~]# dos2unix [-kn] file [newfile]
            [root@www ~]# unix2dos [-kn] file [newfile]
            選項(xiàng)與參數(shù):
            -k  :保留該檔案原本的 mtime 時(shí)間格式 (不更新檔案上次內(nèi)容經(jīng)過(guò)修訂的時(shí)間)
            -n  :保留原本的舊檔,將轉(zhuǎn)換後的內(nèi)容輸出到新檔案,如: dos2unix -n old new
            
            範(fàn)例一:將剛剛上述練習(xí)的 /tmp/vitest/man.config 修改成為 dos 斷行
            [root@www ~]# cd /tmp/vitest
            [root@www vitest]# cp -a /etc/man.config .
            [root@www vitest]# ll man.config
            -rw-r--r-- 1 root root 4617 Jan  6  2007 man.config
            [root@www vitest]# unix2dos -k man.config
            unix2dos: converting file man.config to DOS format ...
            # 螢?zāi)粫?huì)顯示上述的訊息,說(shuō)明斷行轉(zhuǎn)為 DOS 格式了!
            [root@www vitest]# ll man.config
            -rw-r--r-- 1 root root 4758 Jan  6  2007 man.config
            # 斷行字元多了 ^M ,所以容量增加了!
            
            範(fàn)例二:將上述的 man.config 轉(zhuǎn)成 man.config.linux 的 Linux 斷行字元
            [root@www vitest]# dos2unix -k -n man.config man.config.linux
            dos2unix: converting file man.config to file man.config.linux in UNIX format ...
            [root@www vitest]# ll man.config*
            -rw-r--r-- 1 root root 4758 Jan  6  2007 man.config
            -rw------- 1 root root 4617 Jan  6  2007 man.config.linux
            

            因?yàn)閿嘈凶址约?DOS 與 Linux 作業(yè)系統(tǒng)底下一些字符的定義不同,因此, 不建議你在 Windows 系統(tǒng)當(dāng)中將檔案編輯好之後,才上傳到 Linux 系統(tǒng),會(huì)容易發(fā)生錯(cuò)誤問(wèn)題。 而且,如果你在不同的系統(tǒng)之間複製一些純文字檔案時(shí),千萬(wàn)記得要使用 unix2dos 或 dos2unix 來(lái)轉(zhuǎn)換一下斷行格式??!


            小標(biāo)題的圖示語(yǔ)系編碼轉(zhuǎn)換

            很多朋友都會(huì)有的問(wèn)題,就是想要將語(yǔ)系編碼進(jìn)行轉(zhuǎn)換啦!舉例來(lái)說(shuō),想要將 big5 編碼轉(zhuǎn)成 utf8 。 這個(gè)時(shí)候怎麼辦?難不成要每個(gè)檔案打開會(huì)轉(zhuǎn)存成 utf8 嗎?不需要這樣做啦!使用 iconv 這個(gè)指令即可! 鳥哥將之前的 vi 章節(jié)做成 big5 編碼的檔案,你可以照底下的連結(jié)來(lái)下載先:

            在終端機(jī)的環(huán)境下你可以使用『 wget 網(wǎng)址』來(lái)下載上述的檔案喔!鳥哥將他下載在 /tmp/vitest 目錄下。 接下來(lái)讓我們來(lái)使用 iconv 這個(gè)指令來(lái)玩一玩編碼轉(zhuǎn)換吧!

            [root@www ~]# iconv --list
            [root@www ~]# iconv -f 原本編碼 -t 新編碼 filename [-o newfile]
            選項(xiàng)與參數(shù):
            --list :列出 iconv 支援的語(yǔ)系資料
            -f     :from ,亦即來(lái)源之意,後接原本的編碼格式;
            -t     :to ,亦即後來(lái)的新編碼要是什麼格式;
            -o file:如果要保留原本的檔案,那麼使用 -o 新檔名,可以建立新編碼檔案。
            
            範(fàn)例一:將 /tmp/vitest/vi.big5 轉(zhuǎn)成 utf8 編碼吧!
            [root@www ~]# cd /tmp/vitest
            [root@www vitest]# iconv -f big5 -t utf8 vi.big5 -o vi.utf8
            [root@www vitest]# file vi*
            vi.big5: ISO-8859 text, with CRLF line terminators
            vi.utf8: UTF-8 Unicode text, with CRLF line terminators
            # 是吧!有明顯的不同吧! ^_^
            

            這指令支援的語(yǔ)系非常之多,除了正體中文的 big5, utf8 編碼之外,也支援簡(jiǎn)體中文的 gb2312 , 所以對(duì)岸的朋友可以簡(jiǎn)單的將鳥站的網(wǎng)頁(yè)資料下載後,利用這個(gè)指令來(lái)轉(zhuǎn)成簡(jiǎn)體,就能夠輕鬆的讀取文件資料囉! 不過(guò),不要將轉(zhuǎn)成簡(jiǎn)體的檔案又上傳成為您自己的網(wǎng)頁(yè)啊!這明明是鳥哥寫的不是嗎? ^_^

            不過(guò)如果是要將正體中文的 utf8 轉(zhuǎn)成簡(jiǎn)體中文的 utf8 編碼時(shí),那就得費(fèi)些功夫了! 舉例來(lái)說(shuō),如果要將剛剛那個(gè) vi.utf8 轉(zhuǎn)成簡(jiǎn)體的 utf8 時(shí),可以這樣做:

            [root@www vitest]# iconv -f utf8 -t big5 vi.utf8 | \
            > iconv -f big5 -t gb2312 | iconv -f gb2312 -t utf8 -o vi.gb.utf8
            

            大標(biāo)題的圖示重點(diǎn)回顧
            • Linux 底下的設(shè)定檔多為文字檔,故使用 vim 即可進(jìn)行設(shè)定編輯;
            • vim 可視為程式編輯器,可用以編輯 shell script, 設(shè)定檔等,避免打錯(cuò)字;
            • vi 為所有 unix like 的作業(yè)系統(tǒng)都會(huì)存在的編輯器,且執(zhí)行速度快速;
            • vi 有三種模式,一般模式可變換到編輯與指令列模式,但編輯模式與指令列模式不能互換;
            • 常用的按鍵有i, [Esc], :wq 等;
            • vi 的畫面大略可分為兩部份,(1)上半部的本文與(2)最後一行的狀態(tài)+指令列模式;
            • 數(shù)字是有意義的,用來(lái)說(shuō)明重複進(jìn)行幾次動(dòng)作的意思,如 5yy 為複製 5 行之意;
            • 游標(biāo)的移動(dòng)中,大寫的 G 經(jīng)常使用,尤其是 1G, G 移動(dòng)到文章的頭/尾功能!
            • vi 的取代功能也很棒! :n1,n2s/old/new/g 要特別注意學(xué)習(xí)起來(lái);
            • 小數(shù)點(diǎn)『 . 』為重複進(jìn)行前一次動(dòng)作,也是經(jīng)常使用的按鍵功能!
            • 進(jìn)入編輯模式幾乎只要記?。?i, o, R 三個(gè)按鈕即可!尤其是新增一行的 o 與取代的 R
            • vim 會(huì)主動(dòng)的建立 swap 暫存檔,所以不要隨意斷線!
            • 如果在文章內(nèi)有對(duì)其的區(qū)塊,可以使用 [ctrl]-v 進(jìn)行複製/貼上/刪除的行為
            • 使用 :sp 功能可以分割視窗
            • vim 的環(huán)境設(shè)定可以寫入在 ~/.vimrc 檔案中;
            • 可以使用 iconv 進(jìn)行檔案語(yǔ)系編碼的轉(zhuǎn)換
            • 使用 dos2unix 及 unix2dos 可以變更檔案每一行的行尾斷行字元。

            大標(biāo)題的圖示本章練習(xí)
            (要看答案請(qǐng)將滑鼠移動(dòng)到『答:』底下的空白處,按下左鍵圈選空白處即可察看)
            實(shí)作題部分:
            • 在第八章的情境模擬題二的第五點(diǎn),編寫 /etc/fstab 時(shí),當(dāng)時(shí)使用 nano 這個(gè)指令, 請(qǐng)嘗試使用 vim 去編輯 /etc/fstab ,並且將第八章新增的那一行的 defatuls 改成 default ,會(huì)出現(xiàn)什麼狀態(tài)? 離開前請(qǐng)務(wù)必要修訂成原本正確的資訊。此外,如果將該行註解 (最前面加 #),你會(huì)發(fā)現(xiàn)字體顏色也有變化喔!

            • 嘗試在你的系統(tǒng)中,你慣常使用的那個(gè)帳號(hào)的家目錄下,將本章介紹的 vimrc 內(nèi)容進(jìn)行一些常用設(shè)定,包括:
              • 設(shè)定搜尋高亮度反白
              • 設(shè)定語(yǔ)法檢驗(yàn)啟動(dòng)
              • 設(shè)定預(yù)設(shè)啟動(dòng)行號(hào)顯示
              • 設(shè)定有兩行狀態(tài)列 (一行狀態(tài)+一行指令列) :set laststatus=2

            簡(jiǎn)答題部分:
            • 我用 vi 開啟某個(gè)檔案後,要在第 34 行向右移動(dòng) 15 個(gè)字元,應(yīng)該在一般模式中下達(dá)什麼指令?
              (1)先按下 34G 到第 34 行;(2)再按下 [ 15 + 向右鍵 ],或 [ 15l ] 亦可!
            • 在 vi 開啟的檔案中,如何去到該檔案的頁(yè)首或頁(yè)尾?
              去頁(yè)首按下 1G 或 gg ;去頁(yè)尾按下 G 即可
            • 在 vi 開啟的檔案中,如何在游標(biāo)所在行中,移動(dòng)到行頭及行尾?
              移動(dòng)到行頭,按 0 ,移動(dòng)到行尾按 $ 即可!
            • vi 的一般模式情況下,按下『 r 』有什麼功能?
              取代游標(biāo)所在的那個(gè)字元
            • 在 vi 的環(huán)境中,如何將目前正在編輯的檔案另存新檔名為 newfilename?
              :w newfilename
            • 在 linux 底下最常使用的文書編輯器為 vi ,請(qǐng)問(wèn)如何進(jìn)入編輯模式?
              在一般模式底下輸入: i, I, a, A 為在本行當(dāng)中輸入新字元;(出現(xiàn) –Insert- )
              在一般模式當(dāng)中輸入: o, O 為在一個(gè)新的一行輸入新字元;
              在一般模式當(dāng)中輸入: r, R 為取代字元?。ㄗ笙陆浅霈F(xiàn) –Replace-)
            • 在 vi 軟體中,如何由編輯模式跳回一般模式?
              可以按下[Esc]
            • 在 vi 環(huán)境中,若上下左右鍵無(wú)法使用時(shí),請(qǐng)問(wèn)如何在一般模式移動(dòng)游標(biāo)?
              [h, j, k, l]分別代表[左、下、上、右]
            • 在 vi 的一般模式中,如何刪除一行、n行;如何刪除一個(gè)字元?
              分別為 dd, ndd, x 或 X (dG 及 d1G 分別表示刪除到頁(yè)首及頁(yè)尾)
            • 在 vi 的一般模式中,如何複製一行、n行並加以貼上?
              分別為 yy, nyy, p 或 P
            • 在 vi 的一般模式中如何搜尋 string 這個(gè)字串?
              ?string (往前搜尋)
              /string (往後搜尋)
            • 在 vi 的一般模式中,如何取代 word1 成為 word2,而若需要使用者確認(rèn)機(jī)制,又該如何?
              :1,$s/word1/word2/g 或
              :1,$s/word1/word2/gc (需要使用者確認(rèn))
            • 在 vi 目前的編輯檔案中,在一般模式下,如何讀取一個(gè)檔案 filename 進(jìn)來(lái)目前這個(gè)檔案?
              :r filename
            • 在 vi 的一般模式中,如何存檔、離開、存檔後離開、強(qiáng)制存檔後離開?
              :w; :q: :wq; :wq!
            • 在 vi 底下作了很多的編輯動(dòng)作之後,卻想還原成原來(lái)的檔案內(nèi)容,應(yīng)該怎麼進(jìn)行?
              直接按下 :e! 即可恢復(fù)成檔案的原始狀態(tài)!
            • 我在 vi 這個(gè)程式當(dāng)中,不想離開 vi ,但是想執(zhí)行 ls /home 這個(gè)指令,vi 有什麼額外的功能可以達(dá)到這個(gè)目的:
              事實(shí)上,可以使用[ :! ls /home ]不過(guò),如果你學(xué)過(guò)後面的章節(jié)之後,你會(huì)發(fā)現(xiàn),執(zhí)行[ ctrl + z ]亦可暫時(shí)退出 vi 讓你在指令列模式當(dāng)中執(zhí)行指令喔!

            大標(biāo)題的圖示參考資料與延伸閱讀

            2002/04/05:第一次完成
            2003/02/07:重新編排與加入 FAQ
            2003/02/25:新加入本章節(jié)與 LPI 的相關(guān)性說(shuō)明!
            2005/07/28:將舊文章移動(dòng)到 這裡 。
            2005/08/01:加入果正兄文章的參考,還有查閱 vim 官方網(wǎng)站的資料!
            2008/12/18:將原本針對(duì) FC4 版本的文章移動(dòng)到 此處
            2009/01/13:這麼簡(jiǎn)單的一篇改寫,竟改了一個(gè)月!原因只是期末考將近太忙了~
            2009/08/20:加入實(shí)作題,編輯簡(jiǎn)答題,加入 vim 指令示意圖等

            2002/01/21以來(lái)統(tǒng)計(jì)人數(shù)
            計(jì)數(shù)器
             
               

            posted on 2009-11-02 08:36 逛奔的蝸牛 閱讀(12906) 評(píng)論(-1)  編輯 收藏 引用 所屬分類: Mac 、其他編程

            評(píng)論

            # re: Mac:vim 程式編輯器 2010-09-05 04:56 MaryannHUBBARD
            The <a href="http://bestfinance-blog.com">loans</a> seem to be useful for guys, which want to ground their organization. As a fact, this is comfortable to get a short term loan.   回復(fù)  更多評(píng)論
              

            # re: Mac:vim 程式編輯器 2010-09-10 18:32 buy term papers
            School life is real various and always do not have time to work or chill! Hence, we can help you with your buy term papers. If you want to be happy, be. Regards!  回復(fù)  更多評(píng)論
              

            # re: Mac:vim 程式編輯器 2012-07-12 02:58 over here
            If You are looking for best essay editing and expecting to instantly buy an essay, all You have to do is to visit this link.  回復(fù)  更多評(píng)論
              

            日本久久久精品中文字幕| 久久97久久97精品免视看| 欧美熟妇另类久久久久久不卡| 亚洲国产香蕉人人爽成AV片久久| 亚洲国产精品人久久| 无码国产69精品久久久久网站| 久久久WWW免费人成精品| 99久久精品国产综合一区| 国产精品久久久久久久久免费| 亚洲国产精品无码久久久蜜芽| 亚洲国产综合久久天堂| 久久综合日本熟妇| 99久久精品免费看国产一区二区三区 | 99久久伊人精品综合观看| 久久se精品一区二区| 国産精品久久久久久久| 久久久国产打桩机| 久久免费视频网站| 伊人久久大香线蕉精品不卡| 国产欧美久久一区二区| 久久久青草青青国产亚洲免观| 亚洲伊人久久精品影院| 97精品国产97久久久久久免费| 久久久久国产成人精品亚洲午夜| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久精品国产黑森林| 久久99国内精品自在现线| 亚洲精品无码久久久久| 久久精品国产欧美日韩99热| 精品久久久久久无码人妻蜜桃| 国产69精品久久久久777| 久久精品国产亚洲AV久| 精品一区二区久久| 狠狠人妻久久久久久综合| 久久这里只有精品视频99| 亚洲AV无码一区东京热久久| 69SEX久久精品国产麻豆| 欧美与黑人午夜性猛交久久久| 少妇久久久久久被弄高潮| 色妞色综合久久夜夜| 亚洲国产成人久久综合碰|