52AV手機A片王|52AV.ONE
標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]
作者: IT_man 時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
. t" G- b7 c4 N& R' `" J M$ X
vi指令說明(完整版)8 [% y1 r6 G; g l1 W+ c
- vi 的操作模式
1 d+ D5 {/ S( e2 ^4 O
/ m% p) H% C7 m8 C, D* ?. Y( \
vi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
- 輸入模式
% N6 C7 ~: B |4 ?! C) O9 H& K
- a$ J3 |9 q) g/ F# p6 R2 o 如何進入輸入模式
8 C1 [, v* K8 @, G3 ], H7 P a (append) 由游標之後加入資料。
$ [' Z4 @" r; z6 p9 l A 由該行之末加入資料。
* @& Z% m0 t0 Q4 a& H$ J i (insert) 由游標之前加入資料。# r0 b. @6 o6 N: ]: o: ~: v
I 由該行之首加入資料。 O' k7 ^6 V) i. Z0 L
o (open) 新增一行於該行之下供輸入資料之用。; r( s" B: F5 ^) D
O 新增一行於該行之上供輸入資料之用。3 n; [. p; Y. c# C
如何離開輸入模式' A' c' g& S! M. H
《ESC》 結束輸入模式。4 Q# z! P( O `. z" V& o
. F) X1 P* K# O: g, i! }9 t" q/ I1 N1.游標之移動
$ i9 l( N7 R' o h 向左移一個字元。
2 _& W% g- Y& i, f: b7 k4 m j 向上移一個字元。
. p2 o# { d* P' V, V& C k 向下移一個字元。
* l; p8 c+ a) S3 @* N& C/ V l 向右移一個字元。) c# D$ y; X, t1 C5 O3 x) w4 @
0 移至該行之首
$ j; e" Q' L) V9 V& M( _ $ 移至該行之末。
+ ~+ F# I7 Z; N" t ^ 移至該行的第一個字元處。
& d; {2 B T. v) z) I H 移至視窗的第一列。
9 ^4 w1 A w2 [2 S M 移至視窗的中間那列。
1 f7 j8 V9 g( F4 B1 f+ q L 移至視窗的最後一列。
% n/ H0 x6 ~0 s2 ~1 j+ \0 i3 D1 a G 移至該檔案的最後一列。) c% S/ T, @) C% d5 f* i
+ 移至下一列的第一個字元處。 s$ V2 q" U, W( {* |( |
- 移至上一列的第一個字元處。
0 ?9 t- H9 K3 F9 \ ( 移至該句之首。 (註一)) M6 \, C5 N0 ^& O; e# z9 E
) 移至該句之末。4 Z9 l& k# j# I' v9 p. y
{ 移至該段落之首。 (註二)! T `2 S8 x" H2 Y0 L" m1 L
} 移至該段落之末。
1 z3 d/ F9 z' d" M7 Q nG 移至該檔案的第 n 列。# u: U2 t, b& _
n+ 移至游標所在位置之後的第 n 列。
5 l f, h2 D* H8 v8 _$ | n- 移至游標所在位置之前的第 n 列。
. {0 _5 x- a( ^% a# P <Ctrl><g> 會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。0 _0 m( y4 f9 Q8 c
註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。2 S7 Z4 i# ?! N l; A8 u: V+ T. A5 _& m
註二:段落(paragraph)在vi中是指以空白行隔開的文字。9 E2 n. {( h. V; @9 C
6 G0 t0 s8 r2 o" c E! o2.視窗的移動 <Ctrl><f> 視窗往下捲一頁。
, J0 L3 W8 l$ B, L \' `* M <Ctrl><b> 視窗往上捲一頁。' m+ R) j2 R/ _" S
<Ctrl><d> 視窗往下捲半頁。
; E) K* r3 t; ^ <Ctrl><u> 視窗往上捲半頁。
$ s4 A! D! q" Z- ^ <Ctrl><e> 視窗往下捲一行。7 W" z, C7 u$ B* U9 k& I
<Ctrl><y> 視窗往上捲一行。5 q3 p5 r, D" R6 i
" n% m6 i+ n+ D5 H& _# V
3.刪除、複製及修改指令介紹 (此單元較少使用)
6 R4 M4 f5 S9 T5 j3 m8 E d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:5 D J8 u3 u g3 K1 _# a
Operator + Scope = command* r w) Y s" {
(運算子) (範圍)0 z* ?- u4 N4 }7 F. j/ z& b
運算子:5 w; }, Q4 {3 C' p
d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
& N9 D& N k% o y 將資料(字組、行列、句子或段落)複製到緩衝區。0 e$ d g$ H/ a8 e, ?
p 放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資& r* r! Z& f" p3 ]! P7 o
料放置於游標所在位置之行列下。
- \, a1 ]2 ^6 ` c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句# M1 s# T" s6 O( Y* M7 k9 l. {& w( [
子等之資料,並插入新鍵資料。
, M Z8 r9 m! |, y# Y l& X3 ]) E f 範圍:
5 y" W# u1 o, a& m* r$ o: G e 由游標所在位置至該字串的最後一個字元。0 E, ?3 T$ p/ A" n( F
w 由游標所在位置至下一個字串的第一個字元。
; e' j" L: q- I ], \ b 由游標所在位置至前一個字串的第一個字元。4 r- L# K6 F7 F( d8 [
$ 由游標所在位置至該行的最後一個字元。, }7 W) x+ d8 k3 u) `9 `% c) U) w
0 由游標所在位置至該行的第一個字元。: f2 Q' N' w$ ~9 \6 [6 n
) 由游標所在位置至下一個句子的第一個字元。8 D1 m# ?/ [# k8 G0 f
( 由游標所在位置至該句子的第一個字元。+ H& l5 B/ X" H: x/ G4 C- d
{ 由游標所在位置至該段落的最後一個字元。
& k1 g* a! I2 w } 由游標所在位置至該段落的第一個字元。8 T, h" `" `3 ~
整行動作
6 F( _3 o# z) }. r" l6 m2 Q% x- v$ l: ` dd 刪除整行。
6 X2 ^) e6 H$ v+ U4 ?) N D 以行為單位,刪除游標後之所有字元。& ]8 S& H& w* l
cc 修改整行的內容。
1 b. j; E7 T5 {0 m: C2 W A' |) }& [ yy yank整行,使游標所在該行複製到記憶體緩衝區。
7 U" W! y9 x# A. z6 z* U+ ]$ @
' g6 t( N$ f; f% R4.刪除與修改8 L2 ?4 F6 p: j$ \- o$ g. I6 B
x 刪除游標所在該字元。
, n* c6 ^- h K/ i X 刪除游標所在之前一字元。
. m: g7 c+ v" E5 B$ o dd 刪除游標所在該行。- }: L }; Q+ W* k8 S: _
r 用接於此指令之後的字元取代(replace)游標所在字元。
7 a3 ~& T1 _+ O K8 O3 A( P* Q 如: ra 將游標所在字元以 a 取代之。! T: R! L4 T& g6 p) \ e6 i! T, [
R 進入取代狀態,直到《ESC》為止。
6 f! L0 u: v$ H0 v7 N s 刪除游標所在之字元,並進入輸入模式直到《ESC》。7 R3 C* \" t k* B
S 刪除游標所在之該行資料,並進入輸入模式直到《ESC》。
" {! _( f! z% K
% F& `% [7 _, h6 a) |# ]3 v5.搬移與複製+ x* c7 e- e/ w2 @4 Z& k
利用delete 及 put 指令可完成資料搬移之目的。
7 J8 q& h. \, X7 b; p0 _& m* L, G+ j% a" u 利用yank 及 put 指令可完成資料複製之目的。
& e+ `: `- D) W4 ^" F I5 y9 c yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令' Y. u9 \0 ~" q8 G1 k
可將緩衝區內的資料複製到螢幕上。! d% \" y# t% |; T" N' c- M
例:
) t6 ~% s$ y, o* S% |! ]' s 搬移一行 ‧在該行執行 dd
$ E8 {( e' @' N g. g! [ ‧游標移至目的地
8 b' T9 X, C3 R. Y) U% E. X, _2 j ‧執行 p9 o# H( q& o: [- |* l2 X
複製一行 ‧在該行執行 yy8 }* ?' k; ~5 O
‧游標移至目的地
9 b! ]7 l0 B1 r( E ‧執行 p
; _( I3 x- M( ]
" e- \/ y! F, B/ z3 d6.指令重複3 ^4 n; X; d; [5 X$ \7 r& K2 S1 n
在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n5 O" v5 Y/ C, d5 P- I
次。
) O% {# O! h2 o- [& N+ Q( U 例:
4 |( ]5 @/ Q- m( B' J 刪除10行 ‧10dd# X3 l, ` U9 a8 @1 F1 B3 \1 C
複製10行 ‧10yy
5 X: S: n' ?" N9 b9 S ‧游標移至目的地
9 c9 J0 L( A+ w! r' L$ Z8 K ‧p4 M! a2 o Z& n' A2 G8 w
指標往下移10行 ‧10j4 X" ]) o: ^: G( j4 C( f
( b0 X% y6 o& }& \7.取消前一動作(Undo)
4 C, v& W8 n: H, w' R1 w& t V8 M& A 即復原執行上一指令前的內容。( h' H3 L" W( C g
u 恢復最後一個指令之前的結果。
# {- X3 H0 r/ N. a U 恢復游標該行之所有改變。5 {5 g7 P( _+ B& d4 v0 [7 b
* L: ~+ f M' e8.搜尋, @# P. P- G/ U; u3 B) x2 c1 _
在vi中可搜尋某一字串,使游標移至該處。
' L( \# ?$ h% }8 ^; I. P& u7 Y /字串 往游標之後尋找該字串。7 ?: {& f( d; x
?字串 往游標之前尋找該字串。' F) D. ?7 `, x9 J5 D% r' X) T& R0 `
n 往下繼續尋找下一個相同的字串。
( X, e# l T# S9 X N 往上繼續尋找下一個相同的字串。* t( X. x) f4 v* W$ w. S+ ^
e5 i* T/ ] N$ A8 Y9.資料的連接
3 q* `( A# a. a- c6 k$ a J 句子的連接。將游標所在之下一行連接至游標該行的後面。. ?5 b- |6 u. {+ m2 J( \7 P: \
若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
3 E4 ?5 ]8 d4 j L (可利用a、i等指令)再按《Enter》即可。
6 a) |! g1 D+ H- A2 `
. Y# V$ ^+ k& W M) p4 u& x10.環境的設定, X0 W) L, r$ T9 O( A
:setnu 設定資料的行號。
7 W% l0 W+ r/ B- I :setnonu 取消行號設定。
( j% _* T7 d0 I; @1 K :setai 自動內縮。1 d; g. \+ v6 W9 v
:setnoai 取消自動內縮。
: } B) m5 @( T% t* K 自動內縮(automatic indentation)
4 Q: H$ Q: o* f$ a 在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
+ g( K* r" W+ N- f* Y7 S 動內縮的功能,用下例解釋之:" L/ w1 L4 [$ Z* X; W8 W7 }
‧vi test# j9 p. ^4 P8 \3 M# r/ I8 X
‧(進入編輯視窗後)
7 @9 c: P! R4 m) X+ H2 b7 X this is the test for auto indent+ ~: l! N! \/ z% r: q, c
《Tab》start indent ← :set ai (設自動內縮)
# ~7 B/ Q& |6 C b1 _( Y7 t1 n8 Q' l 《Tab》data, Y0 z) q/ d+ z
《Tab》data
4 U* i# T1 w* }. u" I4 c0 V2 C5 I6 `8 t 《Tab》data ← :set noai (取消自動內縮)
& g4 M* i" X+ n @ E the end of auto indent.+ M- E+ }* z# r1 {7 F
‧註:<Ctrl><d>可刪除《Tab》字元。 z! U! ^2 U! F0 _. b! H
' R2 U* x9 L- f* R6 s9 S11.ex指令 o8 l* q$ d" C+ q( x
讀寫資料0 k$ @* x, I) U
:w 將緩衝區的資料寫入磁碟中。
8 Y: Y& r9 M4 e, |9 u2 \ :10,20wtest 將第10行至第20行的資料寫入test檔案。
. i- u5 O& V5 M) I- C5 O :10,20w>>test 將第10行至第20行的資料加在test檔案之後。
9 E8 g# F7 h1 C' A% F( ?4 _ :rtest 將test檔案的資料讀入編輯緩衝區的最後。, g5 r \7 J# A
刪除、複製及搬移2 w1 g9 c n& L* p+ l
:10,20d 刪除第10行至第20行的資料。
, U0 v6 i4 s4 L; q :10d 刪除第10行的資料。
; b7 _ ]& v* w3 Q5 \ :%d 刪除整個編輯緩衝區。
# D h W' \" T/ v9 Y :10,20co30 將第10行至第20行的資料複製至第30行之後。8 D. d. x) h6 s) @% \4 a$ g
:10,20mo30 將第10行至第20行的資料搬移至第30行之後。
: j/ f& x& j9 Q+ \ 字串搜尋與取代
+ l0 b% _# N' P/ l- P9 Y s(substitute)指令可搜尋某行列範圍。
2 k, T! h- ]/ S w8 X+ j+ { g(global)指令則可搜尋整個編輯緩衝區的資料。
* `' f6 w$ b% n( W( }) P s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條$ x0 H9 I: E5 C1 | t e, N P. L( @
件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。/ x5 I! g* |1 I8 h+ G) h
:1,$s/old/new/g 將檔案中所有的『old』改成『new』。* U, M' d' _2 M
:10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。
+ ^+ J+ K) K8 G :%s/old/new/g 將編輯緩衝區中所有的『old』改成『new』。/ I% t; Z( D9 N4 i W$ L% m
. {& Z! o, H! T1 |; F# g: B( y2 `% o
12.恢復編輯時被中斷的檔案
& w W7 V/ u0 s8 P3 |! }, v$ w( [ 在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
; q3 V( p. o4 I* f, V+ R4 c 被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
* y) G& s; g, _3 I 的檔案內容。
2 K6 s+ `7 k6 Q! v% U! \ %vi -r filename8 d6 m% _2 F/ ]( M
: G2 i3 \' O; _+ m1 s' ]6 H
13.編輯多個檔案0 E5 z. X" m3 F# F& n' x0 N9 y
vi亦提供同時編輯多個檔案的功能,方法如下:1 p2 ~! I' C+ C% P$ Z1 e
%vi file1 file2 ..
1 z- e6 F+ m9 U' m/ Z 當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後; |; g" y- |2 R; x0 H' |3 c1 p
再利用 『:n』載入下一個檔案。! ?) C3 c, l( |" |( v1 @7 P' \
! t! E; \2 R! y* j- q參考:5 N# T) z' M# O& o7 `* J1 L5 K
2 S3 Y0 L# L- v/ V: u
http://chunchaichang.blogspot.tw/2010/08/vim-s.html
" p0 [4 _2 \! ?# Q% m& X" i0 @
| 歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av.one/) |
Powered by Discuz! X3.2 |