52AV手機A片王|52AV.ONE
標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]
作者: IT_man 時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
/ `7 U5 L0 k, C9 I, f* C5 K! c' B+ [% @5 b
vi指令說明(完整版)
& h+ R. R1 y- S9 C/ _- vi 的操作模式2 }$ G" s2 }! P; S
' {+ Z6 N3 W! O" K+ Q+ Dvi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
. }" @& p3 F8 z) u7 t 如何進入輸入模式' n& U9 V. w+ R* A, c9 D9 m
a (append) 由游標之後加入資料。9 ?' H. ]' x" s( ~" s E7 |! s3 G6 |
A 由該行之末加入資料。; l) b1 J5 {$ c5 q, F
i (insert) 由游標之前加入資料。
6 R. q. m; H. g& D4 s( A; @5 x6 c I 由該行之首加入資料。# S8 I! Q- Q. |& K6 u! l
o (open) 新增一行於該行之下供輸入資料之用。
+ \ @5 L3 ~+ q1 g O 新增一行於該行之上供輸入資料之用。6 \" X3 T( |* \+ `# a& o
如何離開輸入模式
5 u/ O7 n$ w/ s7 i: Z) z& B7 g4 K+ x 《ESC》 結束輸入模式。3 t& v% c7 r6 W$ z
- 指令模式1 |& b! @; x5 }$ {+ r
O0 C0 D$ ?; X# W! D" }9 N
1.游標之移動& ~' c# d8 }. y2 G4 q$ P
h 向左移一個字元。
9 X) n9 H& T, G+ w Q/ H3 E j 向上移一個字元。7 X9 J/ ~1 w4 M# ^4 e" ~( W
k 向下移一個字元。
* h( b. L! @4 J1 f3 t l 向右移一個字元。
; [1 N( ^4 ?* V( K( ]% V) S+ J 0 移至該行之首
- v# d e* ~$ `1 \. G/ J: v $ 移至該行之末。+ T! S& n% ~: x( V- e3 R! a# n( q
^ 移至該行的第一個字元處。
/ S; I2 r' J/ a H 移至視窗的第一列。
! W* C7 Y9 ?4 m5 a* \5 }3 q M 移至視窗的中間那列。! k8 O4 m0 t) l: i& Z1 y% V+ r' _
L 移至視窗的最後一列。
: k( v3 P+ @9 t G 移至該檔案的最後一列。
* j1 {6 j( B/ U0 d + 移至下一列的第一個字元處。& U( e( O* t$ \1 U0 V. r
- 移至上一列的第一個字元處。* e: Y2 I0 V, D/ p4 O, h: X: ?8 n& M
( 移至該句之首。 (註一)
5 t& T) `( A9 d9 l& O$ `- S ) 移至該句之末。
! q1 d1 z0 Z# Z6 |& i { 移至該段落之首。 (註二)8 E1 E% [! ^ h5 a# J
} 移至該段落之末。; `( `4 g( `% ]6 R& h: T2 a
nG 移至該檔案的第 n 列。
7 d: U# l0 N6 N% k: V n+ 移至游標所在位置之後的第 n 列。
' C0 f+ |* t* c* R6 p9 [ n- 移至游標所在位置之前的第 n 列。2 U, D% R9 O+ L/ ` b: w* D1 }. @1 ~$ X- w
<Ctrl><g> 會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
4 V( |6 t) s6 M 註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
0 e) `4 o4 Z# k8 g 註二:段落(paragraph)在vi中是指以空白行隔開的文字。! {0 B3 @8 H3 B' |& ~
, D& u0 X' b6 T% ^/ |5 z% Y- v; r2.視窗的移動 <Ctrl><f> 視窗往下捲一頁。( j9 o9 w8 A! A9 |/ h; H' R& I+ c
<Ctrl><b> 視窗往上捲一頁。9 y6 [) A) }0 g8 T/ O/ D+ p8 ^
<Ctrl><d> 視窗往下捲半頁。
7 u) L- l. a3 } <Ctrl><u> 視窗往上捲半頁。
# p' c/ x6 L# ]9 `! @, n* l5 P: |5 { <Ctrl><e> 視窗往下捲一行。
) c: X$ F* N! J4 }' l# Z2 }# k <Ctrl><y> 視窗往上捲一行。
6 X$ a4 g! x3 Q) K
$ t! a/ o4 I( {7 t9 ]9 l( `3.刪除、複製及修改指令介紹 (此單元較少使用)
: ?7 e5 W' u% p6 D d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
0 p! r$ W. ^; g. n Operator + Scope = command& Y$ |! F6 D1 T, D
(運算子) (範圍)1 T1 D" b2 M4 |' \% {1 V
運算子:
1 H, }3 ~. J0 A' S3 f d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
. ~8 K/ f8 m% E# P9 C9 J, c y 將資料(字組、行列、句子或段落)複製到緩衝區。" V/ y, R) |- x& z7 P' [
p 放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資, i) T3 b; U$ H$ O l' e4 D, i
料放置於游標所在位置之行列下。" X! y+ a0 f3 |. y3 W
c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句
: U7 o1 d/ F! r1 V8 J 子等之資料,並插入新鍵資料。. S4 e. d1 k, P$ z8 S8 q
範圍:
" {, R( {# ^) q e 由游標所在位置至該字串的最後一個字元。: x& t q! {5 R9 j0 P+ {
w 由游標所在位置至下一個字串的第一個字元。; R) j* u7 L3 _& b2 p: E7 O2 a
b 由游標所在位置至前一個字串的第一個字元。
! w& @0 [% r6 \7 R) j $ 由游標所在位置至該行的最後一個字元。
+ X- {( @& p1 d7 |0 ^ 0 由游標所在位置至該行的第一個字元。
2 c( J8 l1 L6 c+ a, W; l ) 由游標所在位置至下一個句子的第一個字元。
& k% h. w- t) j* { ( 由游標所在位置至該句子的第一個字元。& X, p: A6 L2 X- r& y6 z2 [7 V' c$ G
{ 由游標所在位置至該段落的最後一個字元。
* T# x% \4 \1 B7 {% T& w7 _ H: T y } 由游標所在位置至該段落的第一個字元。
. h0 ^9 f. i8 o4 M7 u. l 整行動作6 }/ h% U" v, Q8 L( q2 h( M2 L
dd 刪除整行。4 ~* E* r6 \4 S( L/ b) r: @7 l: F
D 以行為單位,刪除游標後之所有字元。" z' l* v. k+ a3 s/ _
cc 修改整行的內容。' Z7 e2 D" b6 D, Y8 W4 w
yy yank整行,使游標所在該行複製到記憶體緩衝區。
% J( G. R- k2 J
' x0 K$ d4 n. D8 R" U7 d) K4.刪除與修改
8 i' I) B. m9 j. b4 s( F8 M x 刪除游標所在該字元。2 s4 Q( {6 o h; t% y$ O/ g
X 刪除游標所在之前一字元。! E1 ?9 |7 K! R0 Z! E; P
dd 刪除游標所在該行。- J( m5 _- k" G
r 用接於此指令之後的字元取代(replace)游標所在字元。! c+ H6 q6 K! p% d9 s4 \0 l
如: ra 將游標所在字元以 a 取代之。" Y* V4 B' G, O8 Q
R 進入取代狀態,直到《ESC》為止。; `+ s) j2 x1 ?# Y7 E" Z& F3 D
s 刪除游標所在之字元,並進入輸入模式直到《ESC》。5 w/ w& C, I4 x+ B: k
S 刪除游標所在之該行資料,並進入輸入模式直到《ESC》。( E; O( O4 F/ V
7 w. k$ @$ `9 W" u' D$ T
5.搬移與複製
, ]" y8 {. _9 A: W0 m 利用delete 及 put 指令可完成資料搬移之目的。 M8 i- l$ i8 q' c
利用yank 及 put 指令可完成資料複製之目的。
7 @/ B- f/ g% Y( I yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令. B% U+ X+ b3 n) T
可將緩衝區內的資料複製到螢幕上。
/ u) S* Z8 Q+ K+ J 例:) X, l! h& \) a# A& b
搬移一行 ‧在該行執行 dd
+ X5 E; r% X; f4 @, ^$ t' [ ‧游標移至目的地% ~/ o7 ?, k' e$ S
‧執行 p+ f* P. `/ I5 ]+ M4 p; p1 C
複製一行 ‧在該行執行 yy
- r5 m9 `$ f5 y2 _; z9 j. ^, D9 _ ‧游標移至目的地
% g& v; n4 m. O2 t S ‧執行 p# a6 h! j6 \0 v# S8 n
# t" R2 V R) a3 m+ [6.指令重複
. T8 f! d% T! q: n, B 在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
: _% i0 V" @% { 次。
. P4 P( O$ n2 c# Q% R 例:" @* b) {+ ]8 [ k9 O3 J4 ^
刪除10行 ‧10dd3 z# u5 R0 i8 g$ @1 ?
複製10行 ‧10yy7 \: l( L7 p5 ~3 D* i! h; }
‧游標移至目的地
0 T# s+ z8 _$ m8 U( @& T ‧p- I" ~+ B8 K$ w3 X! I1 k) k
指標往下移10行 ‧10j" K* e: D+ `" l
& v9 {) l% u) ~! x' ]
7.取消前一動作(Undo)& t% B9 S$ P% O0 H# J3 ^
即復原執行上一指令前的內容。% d& s# T+ z" t4 R2 w$ _
u 恢復最後一個指令之前的結果。
# M3 ^1 _. o: Z; T4 M4 p) o U 恢復游標該行之所有改變。0 L$ S2 \- f2 T, ^: V
; r3 ?- p) \; x1 K' h- R
8.搜尋% N2 J- F- x& I$ A- N8 j! j
在vi中可搜尋某一字串,使游標移至該處。
0 p; a5 m7 g% R: \! U6 h% Y5 G6 k /字串 往游標之後尋找該字串。
( Z) D9 ^6 h0 b/ p: \/ E+ } ?字串 往游標之前尋找該字串。 q+ f# Z8 {1 l7 y4 f
n 往下繼續尋找下一個相同的字串。4 A# y9 I! d- t, k j) c. @' w
N 往上繼續尋找下一個相同的字串。* c; y' M" T: D7 m4 p& ~
! ]' }1 t% T, S# `. X( t# ?' j9 c/ }9.資料的連接. v# U- G0 s( P
J 句子的連接。將游標所在之下一行連接至游標該行的後面。
* v2 y: `7 H. b9 F3 y. ^ 若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式' O9 X% g: H. |- \
(可利用a、i等指令)再按《Enter》即可。
/ q1 {/ g+ G: k$ R) C( l3 ~( c* e0 t" z
10.環境的設定" \3 S( N9 ~) T, M3 C+ b
:setnu 設定資料的行號。/ u7 ]. w9 B# x
:setnonu 取消行號設定。; y$ p5 f# E& T
:setai 自動內縮。
) q3 A% I0 w3 v0 }% o :setnoai 取消自動內縮。
0 B" ~* q: }2 I) }' z$ G4 Q 自動內縮(automatic indentation); \- r' U2 x9 N, ^: t
在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自4 C# K. s# ~' L
動內縮的功能,用下例解釋之:, ^3 i4 N: A3 f- O$ }+ s5 p! V
‧vi test! X% D& y$ E; B9 \# S% F0 u
‧(進入編輯視窗後)
- L- r k4 c* b$ K2 ]- M this is the test for auto indent
7 O7 o$ T% L0 f0 c! o! M 《Tab》start indent ← :set ai (設自動內縮); S! I8 S/ ]1 j ?7 q+ {& d/ ^
《Tab》data! Z9 y9 I' h8 h* e" L a6 U8 V
《Tab》data; q8 D& O* D$ ~% Q3 I- R4 a+ @
《Tab》data ← :set noai (取消自動內縮)! Z j0 F" R, w
the end of auto indent.
9 [4 k8 v+ v0 [ ‧註:<Ctrl><d>可刪除《Tab》字元。4 p/ n5 O% @* y/ p9 m+ Y2 h
! ~) o( F/ c; ]4 c+ G% H* w
11.ex指令
$ x! a8 N" e( |5 H 讀寫資料
7 K5 l' {4 r6 T2 [5 }# D1 `2 I :w 將緩衝區的資料寫入磁碟中。
% N! Q( f' X' u. L/ L :10,20wtest 將第10行至第20行的資料寫入test檔案。
; a+ [+ g5 Z, e' q: R3 D :10,20w>>test 將第10行至第20行的資料加在test檔案之後。+ Q7 Y, H/ f* X! g- I/ s* C( Z
:rtest 將test檔案的資料讀入編輯緩衝區的最後。
& }. N) V: ~% Y/ V# K5 e 刪除、複製及搬移
( O' ]3 K9 R7 m :10,20d 刪除第10行至第20行的資料。4 S$ W K5 {( x9 h
:10d 刪除第10行的資料。3 I; _, d( I1 r3 r- }5 }) _) w' p
:%d 刪除整個編輯緩衝區。! [, D/ h3 u1 c4 _" @! z
:10,20co30 將第10行至第20行的資料複製至第30行之後。# n3 r5 b \4 ~& Y8 R. E! T
:10,20mo30 將第10行至第20行的資料搬移至第30行之後。
% ~5 Y2 R w d) Y/ m3 F 字串搜尋與取代
2 Q: X! @: C3 N7 N% Z/ A s(substitute)指令可搜尋某行列範圍。1 l6 k l0 n8 A6 H. G
g(global)指令則可搜尋整個編輯緩衝區的資料。
. J* W* |" r) e1 Z1 h; J" X s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條# ^9 R" Q0 ~# l0 @* J7 Z
件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
5 L% d( O7 s( n :1,$s/old/new/g 將檔案中所有的『old』改成『new』。
4 B' ^5 S: O1 d% L6 j :10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。
$ l% `. i( a5 D3 R; p. r. l :%s/old/new/g 將編輯緩衝區中所有的『old』改成『new』。
: \3 N8 ]' y, k+ p" V
2 l% B& d L6 q9 x12.恢復編輯時被中斷的檔案
$ e! T& C( Y$ W, q. R9 y; i" V 在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未( f* t \5 I t
被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前 K5 f- Y& Y1 _
的檔案內容。( Z, S+ ~! Q c1 l$ Y3 d' g
%vi -r filename: q1 ~* o$ j8 N. |6 Z( V6 t
/ t! M Y+ q1 F13.編輯多個檔案) q' T2 q4 d; p7 E: z V$ I
vi亦提供同時編輯多個檔案的功能,方法如下:
! D9 \, B& }# K% d/ D! q, I %vi file1 file2 ..
, _* W' L4 [' d6 L 當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後* F) b1 `( R7 ~4 [8 h) t
再利用 『:n』載入下一個檔案。% ~$ P, ~. k2 C0 s7 t
- R6 B s7 L* x0 ~$ `. G( M參考:: V1 z. d; \4 h: Q% ?* R( Y0 u
7 i* l9 n3 m% R6 z$ W0 m$ }- P9 |
http://chunchaichang.blogspot.tw/2010/08/vim-s.html7 X' b3 X9 Y0 {) f$ ^; @& X
| 歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/) |
Powered by Discuz! X3.2 |