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

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

作者: IT_man    時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
- J- Z8 E/ n% L0 ]( `7 R
- Z( a$ o: `  C4 {' Zvi指令說明(完整版)+ Z  t6 N; D' h8 `8 d1 j8 c* }" X


  d/ S: `' p7 C: [; q9 i  K

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



& f( ^' ~5 K  l       如何進入輸入模式' W6 c4 b$ H; P8 r! {) m
                a (append)    由游標之後加入資料。
; }, o" T- M, e+ M4 d% `                A                   由該行之末加入資料。. V1 s7 x1 b9 o3 [
                i (insert)        由游標之前加入資料。2 g% z3 P3 l- f' x4 z
                I                   由該行之首加入資料。" q: O; [; Z  A5 ^0 N% U1 e$ U
                o (open)       新增一行於該行之下供輸入資料之用。( R6 m9 _( u2 ?" y9 F7 g
                O                  新增一行於該行之上供輸入資料之用。5 ], P  C4 H5 W8 e5 T
       如何離開輸入模式9 P0 b1 Y2 C$ O* p9 @
             《ESC》          結束輸入模式。
* d% U+ s7 t5 x- V
+ l' L. ~: ]  h6 d/ j
1.游標之移動
" ^$ B, z: n  Q& Q/ f              h       向左移一個字元。
% @+ S- B! [2 s; g7 u/ i, M8 j3 l              j       向上移一個字元。
; |. m  \; l* U9 ^9 w              k       向下移一個字元。
% l; f8 h# V4 r% l, K8 h              l       向右移一個字元。" ^$ D# _4 l" A: N
              0       移至該行之首
- H: A: ?4 ~: n* [. k6 c; w              $       移至該行之末。
2 [1 y# m" k9 v              ^       移至該行的第一個字元處。
. K& @' S! Y' W4 o              H       移至視窗的第一列。
- \4 y, l3 H% _+ g              M       移至視窗的中間那列。
1 c, p% M7 C0 K/ p- l: ^0 f              L       移至視窗的最後一列。
' W: }. p; Q$ r( ^! F             G       移至該檔案的最後一列。, P0 w. g* e' Y8 R  y3 V
             +       移至下一列的第一個字元處。- a% W  {( Y/ J3 g
             -       移至上一列的第一個字元處。
7 L, K" E6 T5 L( A% w9 [             (       移至該句之首。 (註一)
( y+ M, Y* l( f5 m             )       移至該句之末。
% }3 o0 q/ A$ j. i- E             {       移至該段落之首。 (註二)
, B" o2 y; q' t" R1 r" G- m3 Q             }       移至該段落之末。
. i) p% S% S9 T  H; o6 H2 t' A* N             nG      移至該檔案的第 n 列。/ A4 v. x! c5 u5 z; [
             n+      移至游標所在位置之後的第 n 列。
" m, B/ `2 Z$ M& O- ^; G             n-      移至游標所在位置之前的第 n 列。
3 m9 x+ E# N. C# e1 A( i            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
& f* ?8 {2 |/ s! P            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
+ l2 K! _3 _! s2 w  H+ ~' ~            註二:段落(paragraph)在vi中是指以空白行隔開的文字。% b* |  `5 Q  e9 ~8 K- n
7 ~6 n9 J! \$ o  S
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。
8 Y, E6 a# d6 }  ^$ X           <Ctrl><b>       視窗往上捲一頁。
) s) f: Q& g/ ~) _, S5 ?$ f& a# \8 \           <Ctrl><d>       視窗往下捲半頁。
1 k6 S2 V: H& G7 N" I, v' U           <Ctrl><u>       視窗往上捲半頁。9 ]% _/ M; M' \
           <Ctrl><e>       視窗往下捲一行。
; D8 S+ h& z; l4 m& Z; k* l           <Ctrl><y>       視窗往上捲一行。; |  a0 h, F; A: ?; m* a

) m. c* j7 h% g% E- \& S0 u4 |3.刪除、複製及修改指令介紹 (此單元較少使用)6 [- _7 H* o1 f2 ^7 S
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:6 D6 A1 J6 S1 Q" l
       Operator + Scope = command
) B5 e, y2 X4 i# b" k       (運算子)   (範圍)
. ]* `+ h( Z) d% V6 N7 S: k/ X       運算子:
. _' Z4 f& P$ R) O  q0 Q8 J: j9 [* }; B. u       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
& F8 Y9 i' A7 L/ |( X3 B6 T; Q" k3 t       y       將資料(字組、行列、句子或段落)複製到緩衝區。
  z% Y' w" b. O1 P: m: S8 B       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
: T* J! o2 g( m5 Z                料放置於游標所在位置之行列下。& ]# V7 Q; m+ o- p0 I
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句! ^# T  k) l/ c4 x% I( Y
                子等之資料,並插入新鍵資料。# p- O$ `$ _4 ]  g2 b: H: ?
       範圍:* B4 L. t8 t6 r# L( U0 F+ V
       e       由游標所在位置至該字串的最後一個字元。
& g# d/ i4 N5 q+ u, L2 @6 k/ S8 R       w       由游標所在位置至下一個字串的第一個字元。2 x: Z- T7 L" M1 I' E
       b       由游標所在位置至前一個字串的第一個字元。  p3 g  A. d5 I
       $       由游標所在位置至該行的最後一個字元。
2 p2 e2 s! l3 y+ [# S8 R       0       由游標所在位置至該行的第一個字元。
6 C' z. n/ V$ ]9 \, z8 k: c. p       )       由游標所在位置至下一個句子的第一個字元。
  [% H! \4 B  o. C- _- y9 g       (       由游標所在位置至該句子的第一個字元。5 p, j9 K# }( d3 r
       {       由游標所在位置至該段落的最後一個字元。
& H) k9 c: a- ?* s       }       由游標所在位置至該段落的第一個字元。
. C) D" x1 E6 J9 w       整行動作7 q5 T% K5 r( ?! a0 O
       dd      刪除整行。
7 i4 R2 L( Z- x0 ^       D       以行為單位,刪除游標後之所有字元。7 n0 I5 O8 c8 l6 K4 h
       cc      修改整行的內容。
' `( G2 x8 o1 z% w, o( l       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
# @/ F4 U; q; ]. M. I; z8 T, b0 o1 ]7 v! u4 v
4.刪除與修改
$ M) h8 l8 c0 s! ~' s       x       刪除游標所在該字元。
9 Y; R8 a9 T  A8 i% f       X       刪除游標所在之前一字元。
, [  q2 X9 F9 }8 B       dd      刪除游標所在該行。
9 V& |" {5 P' ^. C/ h       r       用接於此指令之後的字元取代(replace)游標所在字元。
/ n0 |; T1 R$ f; J5 _. Z+ q                如: ra 將游標所在字元以 a 取代之。2 n; {8 L, @0 H/ R1 s
       R       進入取代狀態,直到《ESC》為止。  q/ L# `" W3 N6 J6 W5 q/ A
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
7 ]( e& T) p0 m8 V       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。
2 u* t4 G) D/ V* O3 {2 k
1 a$ A/ b# q* I2 Y1 c& m/ Z9 S5.搬移與複製
- b1 f; e& p4 h+ |4 p7 F       利用delete 及 put 指令可完成資料搬移之目的。
/ t) I- x' z! c9 N       利用yank 及 put 指令可完成資料複製之目的。% M) m- Z* ^8 \$ [  [
       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令: Y8 w1 N# B0 L* z* p* Q* u
       可將緩衝區內的資料複製到螢幕上。
9 y( y9 \# i3 U9 a" [8 ~: r3 v       例:
, @9 I7 u1 V1 k8 T# T       搬移一行        ‧在該行執行 dd
$ x, J2 [8 `7 R                        ‧游標移至目的地
, i% r; p& J2 h  E, [( A                        ‧執行 p
( k/ z/ F0 q: S6 Q& T& o/ g! i       複製一行        ‧在該行執行 yy8 M3 d5 `6 k9 ^, H8 f5 I) i! l7 `
                        ‧游標移至目的地
1 Y: a! N4 P2 |6 A                        ‧執行 p
0 Y# i2 a* P  D  Q+ O1 P+ ]! X
6.指令重複
; l' o/ A, k% y, T  A- B8 \       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
) Y0 o/ T1 H: Z" h! E3 w       次。
/ \# _* w+ C$ M1 j- x       例:* {* T) Y) j* {& ?5 H
       刪除10行                ‧10dd7 ~- o) V6 }. p' y
       複製10行                ‧10yy5 r3 D: y$ }& {; b5 C
                                ‧游標移至目的地# p- C/ w; o8 U
                                ‧p& i( W6 P: I' N  C, z1 @
       指標往下移10行 ‧10j
1 K$ J$ R9 ]- f% q7 G, I# G  _- h' w
7.取消前一動作(Undo)
3 V3 F( B' q* Z5 p       即復原執行上一指令前的內容。
0 S8 J% s9 Y1 @       u       恢復最後一個指令之前的結果。
( M8 b/ w/ R9 U: |) ^& c. ]9 T       U       恢復游標該行之所有改變。
, J9 E0 \' c2 c' V( g7 J: O8 T% F
3 w2 e' p! F6 H$ v0 J7 g8.搜尋
' x6 U) R$ I" n  [% V8 B       在vi中可搜尋某一字串,使游標移至該處。" p' X+ }# E1 e4 ~1 S: S, F  a
       /字串           往游標之後尋找該字串。
6 a! X: [) q* |" y6 w* F) |* l, E       ?字串           往游標之前尋找該字串。: l0 b: L7 {+ u
       n               往下繼續尋找下一個相同的字串。/ X  ^4 O; l( c, h3 @
       N               往上繼續尋找下一個相同的字串。
, l, b( t  H) ^% w( B7 {8 i- m" S
9.資料的連接
9 a, Q- I2 A" b1 W* C       J       句子的連接。將游標所在之下一行連接至游標該行的後面。
* Q: k5 V3 N1 m! p1 R' i. p       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式; r, J1 {5 l+ Z: j& R4 [
       (可利用a、i等指令)再按《Enter》即可。% P3 L* h" A" ?- P/ {$ ?. W, e

6 J) ?8 \. C5 t10.環境的設定
0 M$ J0 f1 ^2 Y6 {4 H1 G6 w2 i- y       :setnu                設定資料的行號。1 @$ |$ I) n; I' M& f8 e
       :setnonu              取消行號設定。
4 b: m, r5 R/ z# y" S7 G       :setai                自動內縮。
4 {9 o% ?0 Y1 H/ m1 t       :setnoai              取消自動內縮。
( }2 b; p/ w0 V( h, k9 q5 j, a       自動內縮(automatic indentation)
$ u5 L# D3 W6 h( d4 O* y       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自# ]4 u+ H6 z2 c# j5 F
       動內縮的功能,用下例解釋之:
0 h7 L. E& X' l% l( l4 t       ‧vi test
' u) b/ M: y0 e  T       ‧(進入編輯視窗後)8 q* c( j% A9 K5 N7 ]: u
         this is the test for auto indent+ J9 `+ [8 U2 ~7 c7 S# F
         《Tab》start indent           ← :set ai (設自動內縮), h4 ]- T7 w% ^; U
         《Tab》data
7 ]1 B- |: b5 D         《Tab》data
8 |# m/ s: ?6 k  E         《Tab》data                   ← :set noai (取消自動內縮)1 y  Y( O/ ?; p4 ~  c
       the end of auto indent., ~6 g! H, J' F; ^3 \% A9 ?
       ‧註:<Ctrl><d>可刪除《Tab》字元。
- b. W4 s9 B' ~+ a
* |! a% T+ \* }11.ex指令5 P+ z; A$ ~# {! S5 M- t) S1 f
       讀寫資料7 a9 u- J/ a$ _3 c7 Z  J( j* h) l/ W
       :w                     將緩衝區的資料寫入磁碟中。1 L8 }* s: }- }0 E) U
       :10,20wtest   將第10行至第20行的資料寫入test檔案。" w/ b, B; T( U4 w/ z
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。2 }4 P7 h  @, O- h
       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
6 N5 q. O4 @. ^" U: l+ t8 i+ n) n       刪除、複製及搬移
5 k9 \" w8 I& R9 g       :10,20d                刪除第10行至第20行的資料。
( \, I+ D+ |2 w3 s9 @! a: S       :10d                   刪除第10行的資料。
* B+ {& s9 P6 Q& z0 r       :%d                    刪除整個編輯緩衝區。- ^3 p  B+ y! S" u
       :10,20co30             將第10行至第20行的資料複製至第30行之後。! |/ L( Q2 v" K
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。' @7 t3 E$ Q9 _( U/ ], k4 n
       字串搜尋與取代
" d7 B; {  J! G# M9 Q) @       s(substitute)指令可搜尋某行列範圍。3 i2 q- o& c( J! w: [3 W5 O8 g. S
       g(global)指令則可搜尋整個編輯緩衝區的資料。
( }" b+ ~0 s' t% E       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條# r& z3 U, l0 U: h8 `  {8 `, F4 b
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
; e4 c1 F/ ?8 \/ a0 s8 M       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
4 ?: S9 O! a; A3 a7 }$ S       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。
# k4 z; Y* V+ {3 ?) S2 P$ i       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。
# Y- f+ k5 F$ y" f! a
. B  E) N* z+ F12.恢復編輯時被中斷的檔案3 }. V: C+ c, j8 s' c
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
% v* W5 R/ X- t, [1 R& _       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前2 Y3 L! w) \/ d' W
       的檔案內容。9 ?& W; {' u, {- V
       %vi -r filename. G4 x, \7 J6 ]) g6 L. c
( s% c5 j+ W* F7 q
13.編輯多個檔案
4 G% f& p* C) e1 A9 k1 @( `       vi亦提供同時編輯多個檔案的功能,方法如下:
" G+ q: O/ ^- E) y, k       %vi file1 file2 ..
( P  {2 Z% a5 F  N: d3 j       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
* A- Z5 C3 ~8 ]: ?& z$ Q& W       再利用 『:n』載入下一個檔案。
% A; b% K8 T3 j# T9 n2 W8 _& M. Z0 _; S
參考:
. w3 R3 L5 Y5 T$ e; N- Y+ }
8 X8 s$ E, A' Y0 p) ]! u. W( p% Lhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html! V, U/ s3 G4 k1 _





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