2010年11月29日 星期一

linux 傳統 vi 編輯器

懶得自己打字敘述過程,因此 COPY別人的講解。

 CDrouter 內建的 vi 指令對「初學者」的困難度非常高,需要特別去適應,才能夠分辨。

以下 vi 文章取自「https://www.daemon-land.idv.tw/phpBB2/viewtopic.php?p=331&sid=48922c6804fe4c82efb65eca9e2423cc 」

vi是一種文字模式全螢幕文字編輯軟體(Text Editor)。
對初學者來說,CDrouter 內建的這款「古老 vi 版本」是個很難用的工具,一般花些時間熟練,才能得心應手。之所以介紹「vi」因為下章節?將會用到,而不熟悉的人?將會無法繼續。

1. vi是Unix上的標準文字編輯軟體,不管哪個版本的Unix系統都會提供。想靠開發Unix的軟體混飯吃,必須熟練vi。

2. vi難用的原因之一,是只有文字模式,不能使用滑鼠。但也正因為如此,熟練者不用移動手去操作滑鼠,寫起程式來特別快.

3. vi難用的原因之二,是同一個畫面分成三種操作模式,每種模式又可下達複雜指令,初學者常會搞混。但vi所提供的複雜指令,對寫程式特別好用,一經試用便覺威力無窮。

另一個跟vi很像的軟體叫vim,算是vi的加強版,vi有的功能vim都有,還可以使用游標鍵。此處只介紹vi。


vi在操作上分成下面三種模式,你若搞不清楚現在在哪種模式,只用按鍵盤左上角的ESC鍵,就可以跳到Command Mode

1. Command mode( c-mode):

您一進入 VI 就是處於 c-mode,只能下按鍵指令,不能輸入文字。

這些指令可能是游標移動的指令,也可能是編輯指令或尋找替換指令。

2. Input mode(i-mode):

按 i 就會進入 i-mode,此時才可以鍵入文字,寫您的文章,按 Esc 又會回到 c-mode。

3. Ed mode(command-line mode,e-mode):

按冒號:(別忘了 Shift 鍵)就會進入 e-mode,左下角會有一個冒號:出現,可下 ed 指令。ed是Unix裡另一種非常古老的行模式Text Editor。所謂行模式,是一次只能觀看編輯一行文字,之所以會有這種模式,是因為遠古時代終端機的游標只能往下走(就像DOS視窗!),所以編輯軟體 就只好這樣設計了。vi是由ed改良來的,因此保有ed的指令。

也是按 Esc 回 c-mode。反正正常狀態都是處於 c-mode,這樣才不會把您辛苦打字的文章給隨便搞亂掉。

4. 開檔:

vi test.txt

或進入 vi 後,使用冒號命令 :e test.txt,就可以編輯 test.txt 這個檔。

如果 test.txt 不存在的話,就會開一個以 test.txt 為名的新檔案。


5.游標移動:

c-mode之下:h向左,j向下,k向上,l向右,Ctrl-F下一頁,Ctrl-B上一頁,Ctrl-G顯示檔案的狀態,$到行尾,^到行頭

e-mode之下:輸入數字n就會移到第n行

6. 編寫文件:

在c-mode底下可用的命令:

u: undo上一個命令

o: 在此行的後面新增一行

O: 在此行的前面新增一行

i: 在游標的前一個位置插入字元

I: 在此行的開頭插入字元

a: 在游標的後一個位置插入字元

A: 在此行的最後面加入字元

r: 更改游標所在的字元

R: 覆蓋游標後的字元(一直打字就一直蓋掉,直到按ESC)

cl: 改掉一個字元

cw: 把游標所在的一整個字改掉(此字最後一個字母會變成$, 直到按ESC前的所有輸入都會用來改掉這一個字)

cc: 改掉游標所在的一整行

x: 刪除一個字元

dw: 刪除一整個字

dd: 刪除一整行

D: 刪除到行尾

yy: 複製一整行

yw: 複製一整個字

Y: 複製一整行

p: 貼在游標後(下)

P: 貼在游標前(上)

.: 重複上一個編輯命令

/: 向下搜尋(會在螢幕左下角出現/符號,只要輸入要找的字然後Enter即可)

?: 向上搜尋

n: 搜尋下一個

N: 搜尋上一個

以上命令除uoOD以外,前面都可以加上數字,表示此命令執行的次數,如5dd表示刪除五行,5yw複製五個字

7.e-mode下面的命令:

如果您寫好您的文件,就可以按Esc回到 c-mode,然後按:到e-mode,在e-mode底下的命令為

w: 存檔

w 檔名: 另存到檔名

q: 離開vi

wq: 存檔然後離開

q!: 強迫離開vi

w!: 強迫存檔

x: 存檔後離開, 但若檔案沒有修改,則不會存檔

!gcc test.c: !可用來呼叫shell執行命令, 此例中呼叫gcc編譯test.c

shell: 呼叫shell(回到命令列), 在shell中打exit則回到vi

r 檔名: 將檔名的內容讀到游標所在的行後

1,$s/abc/def/g: 由第一行到最後一行將所有的abc取代成def,若最一個/g不打, 則只取代每行的第一個

1,10s/abc/def/g:由第一行到第十行將所有的abc取代成def

五、vi 的使用

簡易的 vi 使用法:

vi 有兩個 mode , command mode 與 insert mode 。平常我們在輸入時所使用的
是 insert mode , 而下特殊指令如複製和刪除則是採用 command mode 。

由 command mode 進入 insert mode 有四個常用的指令: i , a , o , 跟 O 。
i 是由游標的前面開始做 insert text 的動作。 a 是由游標的後面開始做 insert
text 的動作。 o 則是在游標下方開啟新的一行來編輯,同樣的,O 是由游標的上
方來開啟新的一行來編輯。結束一個編輯動作可以用 Escap 來回到 command mode ,
此時可以做移動,刪除,複製,搜尋等編輯指令。

vi 的移動一般用上下左右鍵便可達到,然而它也有其自己的指令鍵:

h : 向左移一個字元
j : 向上移一個字元
k : 向下移一個字元
l : 向右移一個字元
0 : 移至行首
$ : 移至行尾

vi 的刪除指令有幾種,如下:

x : 刪除游標上的字元。
X : 刪除游標的前一個字元。
dd: 刪除該行。
dw: 刪除游標所在之單字。
d0: 刪除自行首至游標所在之所有字元。
d$: 刪除自游標至行尾之所有字元。

vi 可以使用 yy 來將游標所在行存起來,然後將游標移至所要貼的行之處按
p , 則剛才 mark 的行會被複製出現在游標之下。( 如果使用 P 則會出現在
游標之上。)

在指令模式中,你可以在任何前面提到的指令前面加上大於零的數字 n,則你
所做的動做將會被重覆 n次,如要刪除十行可以按 10 dd , 要複製十行可以用
10 yy , 要將同樣的文字重覆寫十次可以用 10 i ,然後離開 insert mode 之
後就會將剩下的九次重覆寫出來。

在 command mode 要存入一個已寫好的檔案可以使用'ZZ' , 則它將會把你編好
的檔案寫入後離開 vi .

在 vi 中搜尋一個字串可以使用 / , 在斜線後跟上你所要搜尋的字串,它就會
找到你所要的字串,如要在搜尋相同字串按 n 即可。使用? 來搜尋可以使vi往
回找出你所需要的字串。

ex 的指令

在 vi 中亦可使用 ex 的指令,只要在 command mode 時以冒號 : 做開頭,
即可使用 ex 的指令。常用 ex 指令如下:

:l1 , l2 d 刪除自行l1至行l2的文字。
:l1 , l2 s /patern1/patern2/[g] 將自行l1至行l2的文字中,有 patern1 的字
串改為 patern2 的字串,如無 g 則僅更換每一行所 match 的第一
個字串。如有 g 則將每一個字串均做更換。

:l1 , l2 co l3 將自行l1至行l2的文字 copy 到行 l3 。
:l1 , l2 mo l3 將自行l1至行l2的文字 move 到行 l3 。
:w [file] 將編輯的文字存入檔案中。
:n [file] 引入下一個檔案。
:q 離開

HR , NO!Human Resources,NO!

※※ 這樣內容,上手會困難嗎?※※ 我想到什麼?就寫什麼!※※

※對於資訊!我想到什麼?就寫什麼!

如果困難的話?
歡迎來信討論或發表意見,我會儘快回覆。

也歡迎來 YAHOO 知識家,集思廣益!

我的YAHOO 知識家 首頁:
Yahoo 知識+ 2013年改版前 (網域似乎已作廢)
YAHOO 知識家+ 2013年改版後

有需要技術文件 DarkMan 蒐集了不少!
存在FTP共享。想下載?請洽DarkMan信箱取得下載帳號。※

上句:不修一切法,如如是己身。傳其法,授其使,說其名,淪為其用。
下句:你寫得出來其意就傳你【大神威、大魔法,無上魔道。】