Vi使用方法簡介

fsz521job發表於2005-12-08
Vi使用方法簡介[@more@]nbsp;檔案編輯器Vi使用方法簡介BR>
vi 是visual edit 的縮寫。
指令模式:
遊標的移動、視窗的移動、刪除/複製及修改指令介紹(delete change、 yank)、刪除與複製(delete、replace)、搬移與複製(delete/put、yank/put)、指令重複、取消前一動作(undo)、字串搜尋、資料的連線與分行、環境的設定、ex指令
其他方面:
中文編輯、恢復編輯時被中斷的檔案、編輯多個檔案
vi 進入:
vi filename
vi 離開:
q! 離開vi,並放棄剛在緩衝區內編輯的內容。
Wq/zz /x 將緩衝區內的資料寫入磁碟中,並離開vi
w 將緩衝區內的資料寫入磁碟中,但並不離開vi
q 離開vi ,若檔案被修改過,則會被要求確認是否放棄修改的內容。
Vi 的操作模式
Vi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入vi後,既處於指令模式下,此刻鍵入任何字元皆被視為指令。
輸入模式:a(append) 遊標之後加入資料。
A 該行之末加入資料
i (insert) 遊標之前加入資料
I 該行之首加入資料
o (open) 新增一行與該行之下供輸入資料
O 新增一行與該行之上供輸入資料
指令模式:h 向左移一個字元
1 向右移一個字元
j 向上移一個字元
k 向下移一個字元
0 移至該行之首
M 移至視窗的中間那列
L 移至視窗的最後一列
G 移至該檔案的最後一列
nG 移至該檔案的第n列
n+ 移至遊標所在位置之後的第n列
n- 移至遊標所在位置之前的第n列
顯示該行之行號、檔案名稱、檔案中最末之行號、遊標所在行號佔
總行號之百分比
視窗移動:
視窗往下卷一頁
視窗往上卷一頁
視窗往下卷半頁
視窗往上卷半頁
視窗往下卷一行
視窗往上卷一行
刪除、複製及修改指令介紹:
d(delete)、c(change)和y(yank)這一類的指令在vi 中的指令格式為:
operation+scope=command
(運運算元)(範圍)
運運算元:
d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
y 將資料(字組、行列、句子或段落)複製到緩衝區。
p 放置(put)指令,與d和y配合使用。可將最後delete或yank的資料放置於
遊標所在位置之行列下。
c 修改(change)指令,類似delete於insert的組合。刪除一個字組、句子等
資料,並插入新鍵入的資料。
範圍:
e 由遊標所在位置至該字串的最後一個字元。
w 由遊標所在位置之下一個字串的第一個字元。
b 由遊標所在位置之前一個字串的第一個字元。
$ 由遊標所在位置至該行的最後一個字元。
0 由遊標所在位置該行的第一個字元。
) 由遊標所在位置至下一個句子的第一個字元。
( 由遊標所在位置至該句子的第一個字元。
{ 由遊標所在位置至該段落的最後一個字元。
} 由遊標所在位置至該段落的第一個字元。
整行動作:
dd 刪除整行。
D 以行為單位,刪除遊標後所有字元。
cc 修改整行的內容。
yy yank整行,使遊標所在該行復制到記憶體緩衝區。
刪除與修改:
x 刪除遊標所在該字元。
X 刪除遊標所在之前一字元。
dd 刪除遊標所在該行。
r 用接於此指令之後的字元取代(replace)遊標所在字元。
R 進入取代狀態,直到《ESC》為止
s 刪除遊標所在字元,並進入取代模式直到《ESC》
S 刪除遊標所在之該行資料,並進入輸入模式直到《ESC》
搬移與複製:yank和delete可將指定的資料複製到記憶體緩衝區,而藉有put指令可將緩衝區內的資料複製到熒幕上
例如:搬移一行 :在該行執行dd
遊標移至目的地
執行p
複製一行 :在該行執行yy
遊標移至目的地
執行p
指令重複:在指令模式中,可在指令前加入一數字n,則此指令動作會重複執行n次。
例如: 刪除10行 :10dd
複製10行 :10yy
取消前一動作(undo):即復原執行上一指令前的結果。
u 恢復最後一個指令之前的結果。
U 恢復遊標該行之所有改變。
搜尋:在vi中可搜尋某一字串,使遊標移至該處。
/字串 往遊標之後尋找該字串。
?字串 往遊標之前尋找該字串。
n 往下繼續尋找下一個相同的字串。
N 往上繼續尋找下一個相同的字串。
資料的連線:
J 句子的連線。將遊標所在之下一行連線至遊標該行的後面。
若某行資料太長亦可將其分成兩行,只要將遊標移至分開點,進入輸入模式(可利用a、i等指令)在按《ENTER》即可

vi模式:
命令模式
輸入模式
Esc,從輸入模式,切換到命令模式

##################################################

I(nsert) 輸入; 在本行開頭輸入
A(ppend) 輸入; 在本行結尾輸入

i(nster) 輸入; 在游標左方輸入
a(ppend) 輸入; 在游標右方輸入

O 輸入; 輸入一行,在本行上方輸入
o 輸入; 輸入一行,在本行下方輸入

####################################################
C(hange) 修改; 修改到本行的末尾
c(hange) 修改; 與其它鍵組合使用,如:如:h,j,k,l; b,e,w; H,M,L; 0,$; G,{,},[[,]]
cc 修改; 修改一行或多行ncc; n=1,2,3...

R(eplace) 代替; 代替多個字元
r(eplace) 代替; 代替單個字元

S(ubstitute)代替; 代替一行或多行nS; n=1,2,3...
s(ubstitute)代替; 代替一個字元或多個字元ns; n=1,2,3...

#####################################################

Y(ank) 複製; 複製一行或多行nY; n=1,2,3...
y(ank) 複製; 與其它鍵組合使用,如:如:h,j,k,l; b,e,w; H,M,L; 0,$; G,{,},[[,]]
yy 複製; 複製一行或多行ny; n=1,2,3...

P(aste) 貼上; 貼上詞到游標左方,或貼上行到本行上方
p(aste) 貼上; 貼上詞到游標右方,或貼上行到本行下方
:co 貼上; 貼上一行或多行, "[開始行號,[結束行號]] co 目的行號"

#####################################################

X 刪除; 向左刪除一個字元或多個字元nX; n=1,2,3...
x 刪除; 向右刪除一個字元或多個字元nx; n=1,2,3...

D(elete) 刪除; 刪除到行尾
d(elete) 刪除; 與其它鍵組合使用,如:h,j,k,l; b,e,w; H,M,L; 0,$; G,{,},[[,]]
dd 刪除; 刪除一行或多行ndd; n=1,2,3...

######################################################
dw,p 移動; 移動一個詞或多個詞ndw,p; n=1,2,3...
dd,p 移動; 移動一行或多行ndd,p; n=1,2,3...
:m(ove) 移動; 移動一行或多行, "[開始行號,[結束行號]] m 目的行號"; 0表示檔案開頭

U(ndo) 撤消; 撤消本行上次操作
u(ndo) 撤消; 撤消上次操作

######################################################
:? 查詢; 向上查詢
:/ 查詢; 向下查詢
:N(ext) 查詢; 配合?,向上查詢上一個
:n(ext) 查詢; 配合/,向下查詢下一個

:g 替換; " [開始行號,[結束行號]] g /string1/s//string2 /gc ",把string1替換為sting2
g,表示global,全部替換; c表示confirm,確認替換

J(oin) 合併; 合併下一行或多行nJ; n=1,2,3...
#######################################################
h 左移; 左移一個字元或多個字元nh; n=1,2,3...
j 下移; 下移一個字元或多個字元nj; n=1,2,3...
k 上移; 上移一個字元或多個字元nk; n=1,2,3...
l 右移; 右移一個字元或多個字元nl; n=1,2,3...

0 左移; 左移到本行的開頭
$ 右移; 右移到本行的末尾

B(ack) 左移; 左移一個詞或多個詞nB; n=1,2,3...標點符號不算一個詞
b(ack) 左移; 左移一個詞或多個詞nb; n=1,2,3...標點符號也算一個詞

W(ord) 右移; 右移到一個詞或多個詞nW; n=1,2,3...的開頭,標點符號不算一個詞
w(ord) 右移; 右移到一個詞或多個詞nw; n=1,2,3...的開頭,標點符號也算一個詞
E(nd) 右移; 右移到一個詞或多個詞nE; n=1,2,3...的結尾,標點符號不算一個詞
e(nd) 右移; 右移到一個詞或多個詞ne; n=1,2,3...的結尾,標點符號也算一個詞

##################################################

H(ead) 移動到螢幕開始
M(iddle) 移動到螢幕中間
L(ow) 移動到螢幕最後

( 移動到句子開頭
) 移動到句子結尾
{ 移動到段落開頭
} 移動到段落結尾
[[ 移動到檔案開頭
]] 移動到檔案結尾
G 移動到檔案結尾,或移動到第n行nG; n=1,2,3...

Ctrl+B(ack) 上翻一頁
Ctrl+F(orward) 下翻一頁
Ctrl+U(p) 上翻半頁
Ctrl+D(own) 下翻半頁
z,enter 下翻到本行或下翻多行nz,enter; n=1,2,3...

##################################################
:args ???顯示編輯名單中的各個檔名

:rew????讀入編輯名單中的第一個檔案
:e#???? 讀入編輯名單內的上一個檔案
:n?????讀入編輯名單中的下一個檔案

:e File 編輯另一個檔案
:e! File 編輯另一個檔案,原檔案不儲存

:w File 儲存為另一個檔案
:r File 讀入一個檔案到本行

:!command 執行shell命令
:sh 進入shell,Ctrl+D退回vi
#################################################
:w(rite) 儲存
:w!(rite) 強行儲存,檔案如果只讀,強行儲存

:q(uit) 退出
:q!(uit) 強行退出,不儲存修改

:x(exit) 儲存退出
:x!(exit) 強行退出,檔案如果只讀,強行儲存退出

#################################################
:set num 顯示行號
:set nonum 取消行號

:f 顯示檔案行數
Ctrl+G 顯示檔案行數

Ctrl+L 重新整理螢幕顯示

:ab 變數替換; ab string strings; 輸入的 string 自動替換成 strings

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/300209/viewspace-811417/,如需轉載,請註明出處,否則將追究法律責任。

相關文章