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

/ m% p) H% C7 m8 C, D* ?. Y( \

vi 提供兩種操作模式:輸入模式(insert mode)指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。



- 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