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

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

作者: IT_man    時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
1 Z. D1 d! m5 K  Q5 Y
9 ~* x: n7 Q5 M* g/ f- Uvi指令說明(完整版)1 ^, Q5 h$ L5 Y: B5 G' t3 `

" `* w9 Z% |5 _4 \

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



1 z/ d: @. g  [       如何進入輸入模式" D3 E" v/ M3 ]( R
                a (append)    由游標之後加入資料。9 ^2 X  o" L$ M" P
                A                   由該行之末加入資料。
  ?4 w9 w: m, X. W1 Q5 q. q0 l' \                i (insert)        由游標之前加入資料。
- @' ^4 O- X1 `2 D3 P                I                   由該行之首加入資料。- U& `, F( c$ F3 _6 h; V6 m' V
                o (open)       新增一行於該行之下供輸入資料之用。
4 W& X9 D% h2 f  `% p! y                O                  新增一行於該行之上供輸入資料之用。
2 V+ Q4 ^3 P% Z9 a- _       如何離開輸入模式1 s# q+ x" N# s: ]& y
             《ESC》          結束輸入模式。6 G$ @$ R: }. Z- e


0 p9 v: g3 i# O1.游標之移動
  q# ~/ D( T" y9 f' e5 d' u8 o              h       向左移一個字元。
2 ^) O0 B0 J! Y/ X* L2 j              j       向上移一個字元。
) U& P& Y/ K7 T- w; Y1 z0 v              k       向下移一個字元。9 y1 Y8 o* e2 H4 D$ X) ]
              l       向右移一個字元。
. ~* ]. V' P" X9 T/ B# h/ i( W              0       移至該行之首
. j, v& i* ~9 O9 C+ H( D              $       移至該行之末。- M- p, r* p% s4 b) F! s- C2 `+ E0 ]
              ^       移至該行的第一個字元處。: t5 n, s; o2 r! w* Q9 q" w
              H       移至視窗的第一列。6 p& q0 o( n- s- E9 G  K
              M       移至視窗的中間那列。
) I/ i5 K5 p9 S7 |4 w2 i              L       移至視窗的最後一列。, ~+ h( }4 U& m/ ?' V6 Z
             G       移至該檔案的最後一列。) R& N8 t' W  {
             +       移至下一列的第一個字元處。. I& R7 G( D% w% H! n9 K
             -       移至上一列的第一個字元處。( t( z7 D6 D$ @  `5 w
             (       移至該句之首。 (註一)! r; ^: l& p7 a  Y3 U1 f+ N
             )       移至該句之末。) A% c6 h$ Q" @8 N% |  e/ I
             {       移至該段落之首。 (註二)
( d! j6 h8 G; h( A0 @; e             }       移至該段落之末。
! z4 O% h- F8 X6 C/ M             nG      移至該檔案的第 n 列。7 |1 T% m- }( E$ R5 u, ?. ~- z' d/ b; T
             n+      移至游標所在位置之後的第 n 列。
' B. ]. [1 v# V9 M4 N             n-      移至游標所在位置之前的第 n 列。
6 z* T2 }, F* B, c, r9 |) K/ P            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。( V5 s+ }% F$ W/ ]
            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。5 A3 r4 p( h6 F# ^! Y
            註二:段落(paragraph)在vi中是指以空白行隔開的文字。1 O) }) k6 T0 Y3 J6 ?

. g% B, D4 L5 D( J: }6 ^3 m2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。% ^! Q) y6 h  e' [$ D+ s
           <Ctrl><b>       視窗往上捲一頁。" U! q* [. `8 J8 ~
           <Ctrl><d>       視窗往下捲半頁。& i: |- e/ H: E5 ]& b9 @
           <Ctrl><u>       視窗往上捲半頁。3 R' l, A6 e4 R& r
           <Ctrl><e>       視窗往下捲一行。) s8 ^5 X- G  |: E* n
           <Ctrl><y>       視窗往上捲一行。# ?! c9 g* E  J( _

8 g: j1 E8 s. r" L1 T* b4 E; S3.刪除、複製及修改指令介紹 (此單元較少使用)8 P6 D" s/ ^$ Q/ J2 H* f
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
1 p: S# G9 t: @       Operator + Scope = command' G* d+ r3 ?. k4 Q% t
       (運算子)   (範圍); A9 w5 K+ _9 ~! d- p; x
       運算子:6 j% F& U! B! U, y, C" y4 c/ I0 R
       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。; E: G% l5 h! O; F0 \
       y       將資料(字組、行列、句子或段落)複製到緩衝區。5 B! k) A# G& l$ ~( D
       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
  T( l+ Z0 `& v- w5 b                料放置於游標所在位置之行列下。' t, I$ ]+ s' N# e; [
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句2 j4 W, z* y; E4 H6 K, F# ]
                子等之資料,並插入新鍵資料。
  D: Z1 V9 q& l$ S       範圍:0 O2 Y9 ]6 e9 ~2 V) x3 {9 g
       e       由游標所在位置至該字串的最後一個字元。0 `$ x5 x( w' t! Z0 [+ L0 |
       w       由游標所在位置至下一個字串的第一個字元。
0 q2 k$ V6 k0 T       b       由游標所在位置至前一個字串的第一個字元。
% W- S8 x# D5 M+ _1 l4 K5 X) B       $       由游標所在位置至該行的最後一個字元。
8 F; B2 o( E9 u       0       由游標所在位置至該行的第一個字元。: l# w: t% E2 }1 `: _' {+ E& H
       )       由游標所在位置至下一個句子的第一個字元。
3 P9 a* n0 L: c! P       (       由游標所在位置至該句子的第一個字元。
  _4 v# e. [) r6 K2 I       {       由游標所在位置至該段落的最後一個字元。. J4 l% W4 ~6 H4 W" |5 Z1 r
       }       由游標所在位置至該段落的第一個字元。
6 Q7 [3 t2 J: Q. D( Y1 U       整行動作
1 z" j9 @! N# X5 `; p* U$ u" @. q1 G       dd      刪除整行。; N( H+ o4 v) `" ?/ `+ k$ ?4 v
       D       以行為單位,刪除游標後之所有字元。
: m' B, M2 Y+ w- Z8 C5 Q% w/ K       cc      修改整行的內容。
& T7 F9 D4 Z* d- Y- |# ?/ h       yy      yank整行,使游標所在該行複製到記憶體緩衝區。) T( ]3 N) t) @8 ?5 A+ p. i/ z

1 G- \2 N, s" S9 N4.刪除與修改/ ~9 ~/ D! E1 d  \
       x       刪除游標所在該字元。* U9 m" l. ~. U# s$ N2 b& s3 p8 I
       X       刪除游標所在之前一字元。' {( B" R2 k' z9 f' Q$ g( T3 |
       dd      刪除游標所在該行。. {5 z5 A' G5 L. [( F* H
       r       用接於此指令之後的字元取代(replace)游標所在字元。3 p3 J5 Q8 B3 r
                如: ra 將游標所在字元以 a 取代之。4 r, F+ e0 J+ H4 P& k
       R       進入取代狀態,直到《ESC》為止。$ u! |$ j+ L0 r% v3 C
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。6 G( h. x( R( q$ L! G
       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。! x( ~  M8 y# B# k

! b# a  K" [; i, r8 N5.搬移與複製! p1 q! @0 c0 ?& e# T
       利用delete 及 put 指令可完成資料搬移之目的。
3 G, g% y# V( u1 r0 N( Y5 E       利用yank 及 put 指令可完成資料複製之目的。9 w+ d- O& q. Q
       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令. w  k9 k* f4 x# ?, F( v! j* o
       可將緩衝區內的資料複製到螢幕上。
; I* X' W' l' _       例:" W) \6 W, _, z  k) n: o
       搬移一行        ‧在該行執行 dd
9 }1 |2 D$ z. z                        ‧游標移至目的地9 f! b, c8 S* X6 ^& I6 h! S; n1 Z* u
                        ‧執行 p/ M  E: y3 `. D$ A8 J3 h
       複製一行        ‧在該行執行 yy$ o7 n0 T# P* r( n
                        ‧游標移至目的地
! s; ^  B; u2 s8 t1 k! b: i5 y                        ‧執行 p
3 R2 S! V+ H( V
4 {1 ?! u  J. x6.指令重複
, y& _8 u: A: e. W2 `* i       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
& S  n( T" j  d6 c       次。/ @1 |- _1 t) w* _
       例:
# S- m4 V+ J% G& s- M& {4 }8 H       刪除10行                ‧10dd  f8 M8 T2 b% d& d: V. }
       複製10行                ‧10yy
$ I7 ^5 n+ {% u                                ‧游標移至目的地
5 e) A4 u' f% K. i7 w% T                                ‧p
/ D1 w3 B) |: W% T       指標往下移10行 ‧10j
4 `( X! M. E8 t8 Z! E! h! x# X" G: c! K$ C8 |) R, ?: h( `
7.取消前一動作(Undo); s/ N9 F4 _0 M0 |! m' A, n
       即復原執行上一指令前的內容。
0 Y. O7 P4 r8 k4 P) C" K       u       恢復最後一個指令之前的結果。7 H2 X' `! b2 x
       U       恢復游標該行之所有改變。
0 P5 }+ i3 s( t
- }8 @  w, S/ X) w1 b: A8.搜尋. s' S0 {3 [5 C
       在vi中可搜尋某一字串,使游標移至該處。# j- w/ C  i4 H; c" ^
       /字串           往游標之後尋找該字串。' ^4 P8 _4 b" V) j1 N6 [, `
       ?字串           往游標之前尋找該字串。
3 i" I4 W  H5 o       n               往下繼續尋找下一個相同的字串。/ J/ C. [# I0 L* U  k* L
       N               往上繼續尋找下一個相同的字串。* U5 {; S6 W  @$ g, l" x. r

# {3 |: t0 Y6 b( ?. M! E9.資料的連接
3 r6 c2 N7 p! h& P4 k       J       句子的連接。將游標所在之下一行連接至游標該行的後面。+ u/ z; C! y8 b& c; I$ D
       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式; n9 Q0 m5 Y& t9 p
       (可利用a、i等指令)再按《Enter》即可。: f! o1 A5 I  ~* O' K7 q- [) S0 J& d

$ Z4 e3 p( I& e% n10.環境的設定
' }6 ?/ Z3 b% l  ?0 Y       :setnu                設定資料的行號。& x2 M8 J6 }: L  ^. @; A+ a% y
       :setnonu              取消行號設定。
' |, A4 }8 x( o9 J3 S5 c8 ~' B  C       :setai                自動內縮。$ G9 W5 ?6 C( S# c
       :setnoai              取消自動內縮。# J- T# |6 v$ L, Z$ r0 Q' w/ Z; G
       自動內縮(automatic indentation)
9 \3 s* }6 A; \: q! i5 |- d8 V       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
' H. l0 V9 N1 R  P- s       動內縮的功能,用下例解釋之:
* [3 l. \5 s  W2 y       ‧vi test1 W% R# r) K0 V8 X
       ‧(進入編輯視窗後)
, |' L9 D2 r! L. k. u: n1 Q& e         this is the test for auto indent4 W5 t) y0 W" L" v: \  Q# V
         《Tab》start indent           ← :set ai (設自動內縮)6 d' v3 [  N" E* D% h" l) n
         《Tab》data  Q" [1 ~- V0 z$ N# ?
         《Tab》data
" v1 m/ {6 {3 C; j# t         《Tab》data                   ← :set noai (取消自動內縮)" R9 S! k) J# D4 @
       the end of auto indent." A4 A+ |) B8 G0 ?5 i
       ‧註:<Ctrl><d>可刪除《Tab》字元。2 L/ H: y+ y7 Q6 x0 w0 U- E
5 ]3 L& d% s$ [7 T4 y& _" `3 m
11.ex指令  B! O  C/ ?* `6 w
       讀寫資料
9 b9 r. M6 K6 u8 }) `/ Y  ]' `: l       :w                     將緩衝區的資料寫入磁碟中。  ^+ v1 n$ Y  a, `7 u8 h
       :10,20wtest   將第10行至第20行的資料寫入test檔案。
6 }6 w$ g& }( F       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。7 U3 n7 @( Q2 A1 M
       :rtest                將test檔案的資料讀入編輯緩衝區的最後。5 K7 m: i. G5 K7 H5 l
       刪除、複製及搬移
* _# ~% J$ K! I  W. D+ `) p       :10,20d                刪除第10行至第20行的資料。
  O" _8 X& N  o- q& f9 b; {       :10d                   刪除第10行的資料。
# E% Q/ H0 J" D0 z7 B       :%d                    刪除整個編輯緩衝區。
7 j" G8 M. h2 z; O, @# |3 v       :10,20co30             將第10行至第20行的資料複製至第30行之後。2 b3 W2 Y1 r+ s- S
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。/ r1 {$ d& a! S: {: O& C
       字串搜尋與取代% l6 G  a2 V% ?6 j5 X9 Y
       s(substitute)指令可搜尋某行列範圍。; U! C) f4 `/ W0 i( _* Q- v
       g(global)指令則可搜尋整個編輯緩衝區的資料。) z0 R$ l5 q" k, h8 {
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
1 K) j9 |( r  ]( {+ ^0 ~       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。2 o, M1 U9 z  ]% B
       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
; `# u5 V/ S. Q4 R  b% s/ z2 }       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。
  d5 r; N, H: _7 `       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。
  ~1 S' M2 e0 f. }
3 l' `: C: d! v5 E3 ?12.恢復編輯時被中斷的檔案# I( E, X1 o9 |' L# l6 }2 ]& Y
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
$ m0 q# w' g' |+ V) x1 ?. l       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前4 A7 }  J7 D% ]& A. B7 T; c
       的檔案內容。
9 X( w2 n2 _( W2 b; j: b       %vi -r filename
% [6 H7 I8 }3 w
0 Q) f7 |' n5 a13.編輯多個檔案
% ?3 ]$ Z; Q& a       vi亦提供同時編輯多個檔案的功能,方法如下:( Y5 {- c) ]' i
       %vi file1 file2 ..% v- T! `8 y  m. R
       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後  d  W8 W2 f+ C& @
       再利用 『:n』載入下一個檔案。# b8 g9 k9 T6 r( E+ e# u9 a

$ o7 N( V5 t) M* d: r* m參考:
: a/ _* r6 N3 ?8 p/ B
! W8 n2 |9 ^. P3 X) i3 s( @# nhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html. u( @  m$ O7 y% m. q7 B





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