linux vi命令

來源:互聯網
上載者:User

轉自:http://jinux.hit.edu.cn/courses/computing/linux-viMingLing77_1.html    

linux vi命令

vi 命令

Vi 簡介

Vi 是Unix世界裡極為普遍的全螢幕文書編輯器,幾乎可以說任何一台Unix機器都會提供這套軟體。Linux當然也有,它的vi其實是elvis(著作權問題),不過它們都差不多。熟悉DOS下的文書處理後,也許會感到vi並不好用;Unix上也已經發展出許多更新、更好用的文書編輯器,但是並不一定每一台 Unix 機器上都會安裝這些額外的軟體。所以,學習vi的基本操作還是有好處,讓你在各個不同的機器上得心應手。
----------------------------------------------------------------------------
Vi 基本觀念

Unix 提供一系列的ex編輯器,包括ex,edit和vi。相對於全螢幕編輯器,現在可能很難想像如何使用ex, edit這種行列編輯器(有人用過DOS 3.3 版以前所附的EDLIN嗎?)。Vi的原意是 "Visual",它是一個立即反應的編輯程式,也就是說可以立刻看到操作結果。

也由於vi是全螢幕編輯器,所以它必須控制整個終端機螢幕哪裡該顯示些什麽。而終端機的種類有許多種,特性又不盡相同,所以vi有必要知道現在所使用的是哪一種終端機。這是藉由TERM這個環境變數來設定,設定環境變數方面請查看所使用s hell的說明。(除非執行vi的時候回應unknow terminal type ,否則可以不用設定。)

只要簡單的執行vi就可以進入vi的編輯環境。在實際操作之前先對它有個概略的瞭解會比較好。Vi有兩種模式,輸入模式以及指令模式。輸入模式即是用來輸入文字資料,而指令模式則是用來下達一些編排檔案、存檔、以及離開vi等等的操作指令。當執行vi後,會先進入指令模式,此時輸入的任何字元都視為指令。

進入與離開要進入vi可以直接在系統提示字元下鍵入 vi<設定檔名稱>,vi可以自動幫你載入所要編輯的檔案或是開啟一個新檔。進入vi後螢幕左方會出現波浪符號,凡是列首有該符號就代表此列目前是空的。要離開vi可以在指令模式下鍵入:q,:wq指令則是存檔後再離開(注意冒號)。要切換到指令模式下則是用[ESC]鍵,如果不曉得現在是處於什麽模式,可以多按幾次[ESC],系統會發出嗶嗶聲以確定進入指令模式。
----------------------------------------------------------------------------
Vi 輸入模式

要如何輸入資料呢?有好幾個指令可以進入輸入模式:

新增 (append)
a 從遊標所在位置後面開始新增資料,遊標後的資料隨新增資料向後移動。
A 從遊標所在列最後面的地方開始新增資料。

插入 (insert)
i 從遊標所在位置前面開始插入資料,遊標後的資料隨新增資料向後移動。
I 從遊標所在列的第一個非空白字元前面開始插入資料。

開始 (open)
o 在遊標所在列下新增一列並進入輸入模式。
O 在遊標所在列上方新增一列並進入輸入模式。

也許文字敘述看起來有點繁雜,但是只要實際操作一下馬上可以瞭解這些操作方式。實務很重要,尤其是電腦方面的東西隨時可以嘗試及驗證結果。極力建議實際去使用它而不要只是猛K檔案,才有事半功倍的效用。(註:此段為廢話。)
----------------------------------------------------------------------------
Vi 基本編輯

配合一般鍵盤上的功能鍵,像是方向鍵、[Insert]、[Delete]等等,現在你應該已經可以利用vi 來處理文字資料了。當然vi還提供其他許許多多功能讓文字的處理更形方便,有興趣的看倌請繼續。

在繼續下去之前先來點BCC吧。電腦有許多廠牌,不同的硬體及作業系統。PC也不是僅僅只有IBM PC及其相容品而已。事實上,包括鍵盤,終端機等等往往都有不同的規格。這代表什麽?

在文書編輯軟體上會遇這樣的問題,某些電腦的鍵盤上沒有特定的幾個功能鍵!那麽不就有某些功能不能用了?這個問題在Unix系統上也一樣,幾乎各大電腦廠商都有自己的Unix系統,而vi的操作方法也會隨之有點出入。我們固然可以用PC的鍵盤來說明vi的操作,但是還是得提一下這個問題。

刪除與修改

何謂編輯?在這裡我們認為是文字的新增修改以及刪除,甚至包括文字區塊的搬移、複製等等。這裡先介紹vi的如何做刪除與修改。(注意:在vi的原始觀念裡,輸入跟編輯是兩碼子事。編輯是在指令模式下操作的,先利用指令移動遊標來定位要進行編輯的地方,然後才下指令做編輯。)

x 刪除遊標所在字元。

dd 刪除遊標所在的列。

r 修改遊標所在字元,r 後接著要修正的字元。

R 進入取代狀態,新增資料會覆蓋原先資料,直到按[ESC]回到指令模式下為止。

s 刪除遊標所在字元,並進入輸入模式。

S 刪除遊標所在的列,並進入輸入模式。

其實呢,在PC上根本沒有這麽麻煩!輸入跟編輯都可以在輸入模式下完成。例如要刪除字元,直接按[Delete]不就得了。而插入狀態與取代狀態可以直接用 [Insert]切換,犯不著用什麽指令模式的編輯指令。不過就如前面所提到的,這些指令幾乎是每台終端機都能用,而不是僅僅在PC上。

在指令模式下移動遊標的基本指令是h,j,k,l 。想來各位現在也應該能猜到只要直接用PC的方向鍵就可以了,而且無論在指令模式或輸入模式下都可以。多容易不是。

當然PC鍵盤也有不足之處。有個很好用的指令u可以恢複被刪除的資料,而U指令則可以恢複遊標所在列的所有改變。這與某些電腦上的[Undo]按鍵功能相同。
----------------------------------------------------------------------------
Vi 進階應用

相信現在對於vi應該已經有相當的認識。處理文字也不會有什麽麻煩才對。如果有興趣善用vi的其它功能進一步簡化操作過程,不妨繼續看下去。

移動遊標

由於許多編輯工作是藉由遊標來定位,所以vi提供許多移動遊標的方式,這個我們列幾張簡表來說明(這些當然是指令模式下的指令):

┌—————┬—————————————┬—————┐
│指令 │說明 │功能鍵 │
├—————┼—————————————┼—————┤
│0 │移動到遊標所在列的最前面 │[Home] │
├—————┼—————————————┼—————┤
│$ │移動到遊標所在列的最後面 │[End] │
├—————┼—————————————┼—————┤
│[CTRL][d] │向下半頁 │ │
├—————┼—————————————┼—————┤
│[CTRL][f] │向下一頁 │[PageDown]│
├—————┼—————————————┼—————┤
│[CTRL][u] │向上半頁 │ │
├—————┼—————————————┼—————┤
│[CTRL][b] │向上一頁 │[PageUp] │
└—————┴—————————————┴—————┘
┌——┬—————————————————┐
│指令│說明 │
├——┼—————————————————┤
│H │移動到視窗的第一列 │
├——┼—————————————————┤
│M │移動到視窗的中間列 │
├——┼—————————————————┤
│L │移動到視窗的最後列 │
├——┼—————————————————┤
│b │移動到下個字的第一個字母 │
├——┼—————————————————┤
│w │移動到上個字的第一個字母 │
├——┼—————————————————┤
│e │移動到下個字的最後一個字母 │
├——┼—————————————————┤
│^ │移動到遊標所在列的第一個非空白字元│
└——┴—————————————————┘
┌——┬———————————————————┐
│指令│說明 │
├——┼———————————————————┤
│n- │減號移動到上一列的第一個非空白字元 │
│ │前面加上數字可以指定移動到以上 n 列 │
├——┼———————————————————┤
│n+ │加號移動到下一列的第一個非空白字元 │
│ │前面加上數字可以指定移動到以下 n 列 │
├——┼———————————————————┤
│nG │直接用數字 n 加上大寫 G 移動到第 n 列 │
└——┴———————————————————┘
┌————┬———————————————┐
│指令 │說明 │
├————┼———————————————┤
│fx │往右移動到 x 字元上 │
│Fx │往左移動到 x 字元上 │
├————┼———————————————┤
│tx │往右移動到 x 字元前 │
│Tx │往左移動到 x 字元前 │
├————┼———————————————┤
│; │配合 f&t 使用,重複一次 │
│, │配合 f&t 使用,反方向重複一次 │
├————┼———————————————┤
│/string │往右移動到有 string 的地方 │
│?string │往左移動到有 string 的地方 │
├————┼———————————————┤
│n │配合 /&? 使用,重複一次 │
│N │配合 /&? 使用,反方向重複一次 │
└————┴———————————————┘
┌————┬———————————————————┬——————————┐
│指令 │說明 │備忘

├————┼———————————————————┼——————————┤
│n( │左括弧移動到句子的最前面 │句子是以

│ │前面加上數字可以指定往前移動 n 個句子 │! . ? 三種符號來界定│
│n) │右括弧移動到下個句子的最前面 │

│ │前面加上數字可以指定往後移動 n 個句子 │

├————┼———————————————————┼——————————┤
│n{ │左括弧移動到段落的最前面 │段落是以

│ │前面加上數字可以指定往前移動 n 個段落 │段落間的空白列界定

│n} │右括弧移動到下個段落的最前面 │

│ │前面加上數字可以指定往後移動 n 個段落 │

└————┴———————————————————┴——————————┘

不要嘗試背誦這些指令,否則後果自行負責。它們看起來又多又雜亂,事實上這敘述本身的障礙。再強調一次,實際去使用它只要幾次就可以不經大腦直接下達奇怪怪的指令,遠比死記活背搞得模模糊糊強多了。(註:若真的不經大腦而誤與我無關。另,此段為廢話。)

進階編輯指令這些編輯指令非常有彈性,基本上可以說是由指令與範圍所構成。例如dw是由刪除指指令列表如下:

d 刪除(delete)

y 複製(yank)

p 放置(put)

c 修改(change)

範圍可以是下列幾個:

e 遊標所在位置到該字的最後一個字母

w 遊標所在位置到下個字的第一個字母

b 遊標所在位置到上個字的第一個字母

$ 遊標所在位置到該列的最後一個字母

0 遊標所在位置到該列的第一個字母

) 遊標所在位置到下個句子的第一個字母

( 遊標所在位置到該句子的第一個字母

} 遊標所在位置到該段落的最後一個字母

{ 遊標所在位置到該段落的第一個字母

說實在的,組合這些指令來編輯檔案有一點點藝術氣息。不管怎麽樣,它們提供更多編輯文字的能力。值得注意的一點是刪除與複製都會將指定範圍的內容放到暫存區裡,然後就可以用指令p貼到其它地方去,這是vi用來處理區段拷貝與搬移的辦法。

某些vi版本,例如Linux所用的elvis可以大幅簡化這一坨指令。如果稍微觀察一下這些編輯指令就會發現問題其實是定範圍的方式有點雜,實際上只有四個指令罷了。

指令v非常好用,只要按下v鍵,遊標所在的位置就會反白,然後就可以移動定義範圍,接著再直接下指令進行編輯即可。

對於整列操作,vi另外提供了更方便的編輯指令。前面曾經提到過刪除整列文字的指令dd就是其中一個;cc可以修改整列文字;而yy則是複製整列文字;指令以刪除遊標到該列結束為止所有的文字。

檔案指令

檔案指令多以:開頭,跟編輯指令有點區別。例如前面提到結束編輯的指令就是:q。現在就簡單說明一下作為本篇故事的結尾:

q 結束編輯(quit)

如果不想存檔而要放棄編輯過的檔案則用 :q! 強制離開。

w 存檔(write)

其後可加所要存檔的檔名。可以將檔案指令合在一起,例如 :wq 即存檔後離開。

zz 功能與 :wq 相同。

另外值得一提的是vi的部份存檔功能。可以用:n,mw filename將第n行到第m行的文字存放的所指定的 filename裡去哩。時代在變,世界在變,vi也在變,不過大致上就這樣。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.