52AV手機A片王|52AV.ONE

標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]

作者: IT_man    時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
/ t4 `4 m3 R# @6 E* o
+ U5 ]- {) E- n  Z& s4 C& rvi指令說明(完整版)
8 M8 C/ ]. u% `6 T3 b% {
4 D( c9 F# B% U# }3 _& @

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


) b; {) g; O* j
       如何進入輸入模式
; Y, L* y8 [# T# f                a (append)    由游標之後加入資料。
; q/ T1 ?' @! J2 x" F                A                   由該行之末加入資料。
9 {7 v; Z; v: j8 U/ z4 |. j, f                i (insert)        由游標之前加入資料。
& B3 }* I6 o$ N. l; t. `; A                I                   由該行之首加入資料。
9 W5 h  k- n& Q8 E! B8 v                o (open)       新增一行於該行之下供輸入資料之用。
- {. Z5 g2 i+ p& D                O                  新增一行於該行之上供輸入資料之用。" T6 F8 A  h4 y6 [% r
       如何離開輸入模式
5 u1 e3 g4 g' q5 [0 X+ C6 W             《ESC》          結束輸入模式。
7 }7 V' l1 q$ L  @4 ]0 r) Q2 |
: c" u6 N, `$ L( @0 U5 W: o9 g
1.游標之移動
& ]0 |6 O  I" L3 \/ C1 x              h       向左移一個字元。, q: A; n9 l2 p' G) t: l
              j       向上移一個字元。, o; Q. i, v2 F0 f
              k       向下移一個字元。
2 F8 n% }2 j  ]! Y7 y. w              l       向右移一個字元。
. x; y4 B( Q8 A( b$ }  U! K              0       移至該行之首9 H0 N7 ]2 L# E  s1 q0 }# o
              $       移至該行之末。
! F# ~3 j# A: X- b6 {              ^       移至該行的第一個字元處。% h# H4 w9 l$ r
              H       移至視窗的第一列。4 b5 x/ M6 h% a% L* C
              M       移至視窗的中間那列。9 _8 f8 b7 v" O/ \" M! M
              L       移至視窗的最後一列。$ J$ w* l+ G: y
             G       移至該檔案的最後一列。
& c& ^, Q% v: |; u             +       移至下一列的第一個字元處。
; q+ x2 H1 j$ k: g             -       移至上一列的第一個字元處。
- ]+ v9 v  N( s. A4 D             (       移至該句之首。 (註一)
( ^; r3 [, w0 Y. ^& a& a/ E2 u             )       移至該句之末。& E, X6 Q# e/ y% q( l7 n8 U
             {       移至該段落之首。 (註二)! b' F' d) l" e8 o
             }       移至該段落之末。( A" K% {0 b9 I2 z0 M& e) O& n
             nG      移至該檔案的第 n 列。
! `5 c9 X" P5 ]9 t- d8 K$ x7 Q             n+      移至游標所在位置之後的第 n 列。
/ G* ?' a8 N" H  R  \             n-      移至游標所在位置之前的第 n 列。0 y, K9 U; H6 K6 E% F8 f
            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。8 K% Y4 V! [5 {# g- P& W5 g# _, {2 M* }
            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。7 ^8 ]1 H  p- K9 h- s
            註二:段落(paragraph)在vi中是指以空白行隔開的文字。! y0 u6 R: L3 E& X5 X, A
/ [" u' t% E- o, f  t* q' X
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。% Z/ V" ~* C+ F- z/ _$ \# \. N
           <Ctrl><b>       視窗往上捲一頁。+ n& q3 ?! Q6 G: X9 ~
           <Ctrl><d>       視窗往下捲半頁。
) C& v' b( E* l# v; x! p- i           <Ctrl><u>       視窗往上捲半頁。
5 {; O2 o" Q5 ~           <Ctrl><e>       視窗往下捲一行。
; f; z! o- J4 z           <Ctrl><y>       視窗往上捲一行。( V5 y! a* @! d# M' @7 `4 O
: W/ l3 Z; m' [* [! j
3.刪除、複製及修改指令介紹 (此單元較少使用)( j% S) F8 w  a# r3 k2 M
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:# |3 P: Y9 G) v. P5 ?/ t0 ~
       Operator + Scope = command1 t! @% C5 y) H
       (運算子)   (範圍)
: i! R  ~( O8 {0 a! G7 h       運算子:
6 P2 F% D# s5 N. d0 f       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。( p- j! w  l! k+ ^
       y       將資料(字組、行列、句子或段落)複製到緩衝區。
7 W0 o. j0 I- T) t+ b* l3 o       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
2 J$ w% D8 X# \' P5 s                料放置於游標所在位置之行列下。, `: ~+ K# ?  g9 q* a. \
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
* |9 A+ S# t; |, d                子等之資料,並插入新鍵資料。* k0 d  j$ b% K8 V# D
       範圍:
$ S2 l2 Q2 H- ~, Y, l       e       由游標所在位置至該字串的最後一個字元。
. f0 e1 h4 c( E5 n% N& X       w       由游標所在位置至下一個字串的第一個字元。5 y. `7 G% }* e* D& n  J
       b       由游標所在位置至前一個字串的第一個字元。1 v9 U, `- `$ X$ ~3 b+ M
       $       由游標所在位置至該行的最後一個字元。+ ]2 y" k' Q: ]! e
       0       由游標所在位置至該行的第一個字元。
5 _  K3 g8 R" l' s  ]       )       由游標所在位置至下一個句子的第一個字元。" J( M% w2 s, e/ K
       (       由游標所在位置至該句子的第一個字元。
  z5 i& ^7 t' o* @8 Q! w3 ?$ T' h, v       {       由游標所在位置至該段落的最後一個字元。% H. Q) D0 V" g1 p
       }       由游標所在位置至該段落的第一個字元。- i4 _/ V2 o- H! t6 ^
       整行動作
$ ?* x4 S1 B) I$ d  t, v  c2 I& ~       dd      刪除整行。7 D  S- j$ l, o! _/ S" Z7 N
       D       以行為單位,刪除游標後之所有字元。
9 S, q7 @. ~. R1 Q: g7 g' J       cc      修改整行的內容。8 T4 F8 u- v" f
       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
4 Y6 Z/ N- R6 \1 U
3 e' a- ]* N7 _/ R* R4.刪除與修改: K% c2 e) y5 ^& t% P
       x       刪除游標所在該字元。
  N( v% f0 }5 [) l% h       X       刪除游標所在之前一字元。
! _1 q# f) l: \       dd      刪除游標所在該行。
1 O4 J% @4 l# V+ v       r       用接於此指令之後的字元取代(replace)游標所在字元。
9 r  \* M- r. `                如: ra 將游標所在字元以 a 取代之。, O) L; V" q' {1 Q" S3 K. L' M
       R       進入取代狀態,直到《ESC》為止。" \* k1 I8 s3 L8 K2 h
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
: J, |5 |2 B: ^       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。* Y: o. k) M4 u# [, S  ~
3 W( g& A. h7 o6 X
5.搬移與複製
1 T3 w4 h( H- X3 @, f( _       利用delete 及 put 指令可完成資料搬移之目的。
' u# c0 m. C+ d% i5 W$ k       利用yank 及 put 指令可完成資料複製之目的。
# N! f9 o& v" P# Q  x' O" o2 _  e       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
7 I9 R/ Y. E- n9 M; P: @, m: w4 |       可將緩衝區內的資料複製到螢幕上。* O" `6 ^4 P$ n4 @' @! W! S
       例:
$ d# o0 g0 U/ l9 j3 M. i* K       搬移一行        ‧在該行執行 dd- @" z, M5 b) c3 C
                        ‧游標移至目的地5 e* A9 J$ T& ~- c
                        ‧執行 p
6 S. R" s: D) j! t% R       複製一行        ‧在該行執行 yy
7 z- _* Q$ r. Z0 ?( x                        ‧游標移至目的地
/ g) p0 Z: N0 \* V* A1 L                        ‧執行 p' q8 j$ e7 o* Y3 a3 ?) L

& x( L" x  d2 S, ?6.指令重複
+ e' h# v' Q0 Q% B1 \       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n! F- D* _( w8 o: A5 ?0 d  f7 x
       次。
0 M7 d8 H/ ^& ]6 E+ i; U7 r       例:% M3 g$ U5 T: a+ y' I7 {
       刪除10行                ‧10dd% x& R  c! U, P' I" `
       複製10行                ‧10yy
7 @1 A; M: z0 X* v2 s                                ‧游標移至目的地; a3 h0 C: h/ u
                                ‧p
" H& S2 b( z" t& D       指標往下移10行 ‧10j
  P- }7 J, \1 \7 y2 C/ j* Y' U/ P* v4 J/ Y# N
7.取消前一動作(Undo)
1 s! x, i1 l$ R# ^3 K3 H       即復原執行上一指令前的內容。
& J8 m; I+ ^0 i5 _# q       u       恢復最後一個指令之前的結果。- m9 P5 X8 C( h
       U       恢復游標該行之所有改變。" u0 m' R5 ?1 k, ?. ]4 x; ]( Y
0 L. ?7 R+ ]/ F. y; a/ m$ A
8.搜尋, j& W$ |* r8 C2 J- Z
       在vi中可搜尋某一字串,使游標移至該處。; X; q. V: i8 ]- P$ d5 r* U
       /字串           往游標之後尋找該字串。
3 [5 d+ O- \" @* G1 E& j       ?字串           往游標之前尋找該字串。/ a; i2 R1 e9 l) j
       n               往下繼續尋找下一個相同的字串。
" U: }9 v9 H) g2 n0 L8 x       N               往上繼續尋找下一個相同的字串。1 Y! W4 d* ]1 ]( n' Y6 Q

; X" E9 a! S! o; f" c0 Y1 `9.資料的連接
- q, ]  U  Q# ?: u8 t- q4 X# ^, |       J       句子的連接。將游標所在之下一行連接至游標該行的後面。
4 h5 E2 s! B4 u7 ?; F+ X       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式3 J& T$ D; Y& L: K9 n, ~7 |, I
       (可利用a、i等指令)再按《Enter》即可。3 J- |8 b7 l5 i' h

( f: x, `, W& V. S10.環境的設定" e* l& C6 D( u9 @7 _
       :setnu                設定資料的行號。
$ u5 r/ X7 m/ r; E/ h* O2 H3 n       :setnonu              取消行號設定。3 {2 h+ Q' {2 z% ?  \- G* E4 b! m
       :setai                自動內縮。7 O8 J: O  I9 V' [. L  X9 Y+ F
       :setnoai              取消自動內縮。! g( M; T9 G: D7 T+ G; I3 h* N; g
       自動內縮(automatic indentation)
3 ~# S" y  f/ x8 Z       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自$ A& B/ z- V7 N6 g; C& B! j
       動內縮的功能,用下例解釋之:
+ H3 X5 s! \) O5 D# s6 Y  i9 N       ‧vi test* r5 ]8 @$ C/ r, S5 w* Q
       ‧(進入編輯視窗後)- Z/ ~6 a$ I, S8 x2 o
         this is the test for auto indent, V3 ~6 X/ Y$ B$ l9 P
         《Tab》start indent           ← :set ai (設自動內縮)
& J/ X( I$ j1 g( b$ X+ f* [! i1 q         《Tab》data" Y4 F1 k! h2 M, C7 N' O( n. q2 Y' C
         《Tab》data. r. V5 a$ u+ N% u; b; S) S4 W9 {
         《Tab》data                   ← :set noai (取消自動內縮)' z. p% r4 f- l2 b! h3 r8 K
       the end of auto indent.
3 b# Q+ M" K" U( W" @: B) z       ‧註:<Ctrl><d>可刪除《Tab》字元。6 r5 B2 [9 S1 S. W- x

9 S4 p1 O8 c, t1 z11.ex指令
. N/ Z- j9 K( P* i) d: `/ e       讀寫資料
% r: _( [- V) {       :w                     將緩衝區的資料寫入磁碟中。
. ?) z5 D4 I' A% t4 n. E       :10,20wtest   將第10行至第20行的資料寫入test檔案。
' K  O' `+ l0 \2 ^       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。
( t& T" G+ H% H       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
' a  e  A. W' q# b! u/ s) l       刪除、複製及搬移6 @! h) ~- j2 y! B/ x( {2 c
       :10,20d                刪除第10行至第20行的資料。# g: K% W. G& ~0 O. h4 Y
       :10d                   刪除第10行的資料。2 l: C/ v+ D3 |( r' y; B/ ?5 |
       :%d                    刪除整個編輯緩衝區。# i  ]/ @( s) A
       :10,20co30             將第10行至第20行的資料複製至第30行之後。5 r& K/ S8 E% S. t! ]
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。
$ z% S) s6 `! d, ^       字串搜尋與取代# w* v7 ^. S: p4 b  ?, K7 ]
       s(substitute)指令可搜尋某行列範圍。6 Z& v! A" e' m( J( n
       g(global)指令則可搜尋整個編輯緩衝區的資料。% ^5 b! u6 ~' Q9 g# j7 w- @
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
: b4 ?3 R% L) g( L& H! X       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。7 N/ |8 U+ n$ B( P" r- r2 Y
       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。5 B* Z: F% R! x% F' ~3 @
       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。; T. R/ d* q( o7 H- K' x
       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。& s, G# @# d8 E7 r/ v
% f& G% m5 ^; @9 m% w  a
12.恢復編輯時被中斷的檔案" W2 c1 r3 ~: ]
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
1 P6 c# ]& Q& W3 \( K1 q: I9 |, ]       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前3 x/ r' g9 u( P* q
       的檔案內容。
; A  s) ^7 x# ]& v       %vi -r filename
2 s' L* R( p1 h# Q7 u
- Q6 E$ t6 E7 L: ]3 z3 X! `13.編輯多個檔案
- Q7 ^- f& S1 f" y9 [       vi亦提供同時編輯多個檔案的功能,方法如下:; b# o- n& w! h& a- c+ l' z
       %vi file1 file2 ..% q1 Q1 Z% y- h! {7 m! [2 j
       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
2 h7 ~4 ]" O5 t       再利用 『:n』載入下一個檔案。0 s! J8 \/ C. y+ E* l% d5 D9 r

- o5 ~& r7 V' c% G8 e( n) j  i9 B參考:
# F9 n8 q+ U6 E! h2 N$ M" W% Y+ |2 Q) q$ S4 z8 x1 D7 q% q; x/ D( m
http://chunchaichang.blogspot.tw/2010/08/vim-s.html
2 b7 K7 p& C+ s+ n2 b+ u& V( B5 B




歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/) Powered by Discuz! X3.2