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

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

作者: IT_man    時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
  C& R. G( Y3 E* ?' l
( m& [/ T( P5 _2 Nvi指令說明(完整版)
7 M. Y+ A& ?) n4 t1 P& z
) C$ ~4 A5 h( O- P7 [3 o  z1 }

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



& y3 `7 r6 n0 B8 S: m       如何進入輸入模式
8 [0 _. m) [& S5 X                a (append)    由游標之後加入資料。
. G3 N% R9 T. _& I                A                   由該行之末加入資料。8 m1 x& J" _) s  ]8 y6 Q
                i (insert)        由游標之前加入資料。! y" o6 P- a! h8 W, A
                I                   由該行之首加入資料。
% V$ t6 M% ]7 |; a( K                o (open)       新增一行於該行之下供輸入資料之用。
6 f  s8 k) k, _/ f                O                  新增一行於該行之上供輸入資料之用。
( v2 Y, D% n0 M       如何離開輸入模式
, A& w" V% Y/ `1 @             《ESC》          結束輸入模式。2 F% t& g6 X+ z8 c. S9 U" t$ N4 R

* e% C6 `1 s% v$ M- G" V! U
1.游標之移動
* r$ M  c( u1 ?" c# k              h       向左移一個字元。
2 E% H+ s( ]/ G              j       向上移一個字元。
8 v: n# O7 f! b8 D! `) W              k       向下移一個字元。/ W4 W( A% i; A# S. w
              l       向右移一個字元。* S3 J3 r% Q5 S$ m9 g
              0       移至該行之首. v' L2 m& u/ i! i
              $       移至該行之末。! ~* w- N9 b. J% d! H- w0 I
              ^       移至該行的第一個字元處。
" ~1 Z: Q- D3 K0 ^8 ?0 [              H       移至視窗的第一列。
9 d0 z- ^1 d% L! _4 O% z              M       移至視窗的中間那列。( S/ V/ I9 ]1 `/ S, l5 h* V2 R
              L       移至視窗的最後一列。
( h  R- v0 c9 C5 J: H6 H5 J6 K2 A# Q             G       移至該檔案的最後一列。2 R3 N+ M, j8 b3 a6 m8 @4 F- Y
             +       移至下一列的第一個字元處。) g/ P3 U8 d( X, c) F  S5 e
             -       移至上一列的第一個字元處。
, E1 m% z9 E+ Q7 b* @+ O& d% p             (       移至該句之首。 (註一)9 C9 I* C0 Z) f. w6 }4 A9 D
             )       移至該句之末。
- s7 A5 s7 ?7 o8 P3 T- U" ]0 k2 ~             {       移至該段落之首。 (註二)9 }& W$ [& S7 H1 ?- \
             }       移至該段落之末。- n+ O2 u/ e4 K! J* r! I
             nG      移至該檔案的第 n 列。  S; u8 V+ j0 S" F
             n+      移至游標所在位置之後的第 n 列。- E# `+ k  C- k" |
             n-      移至游標所在位置之前的第 n 列。
5 y) Z  _* A  G( \5 u            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
2 b- `* Z. _+ ]- S  y% U7 h            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。$ q; Q! C4 j, C. G' g" `
            註二:段落(paragraph)在vi中是指以空白行隔開的文字。: K- W/ y5 u; t, x6 x- ^

6 l9 B+ q% R$ S/ n& u$ D. u: k2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。
! g- Y! s: y" |9 F6 R7 m$ W           <Ctrl><b>       視窗往上捲一頁。
2 C  B& r3 h" H. i           <Ctrl><d>       視窗往下捲半頁。
5 n- K2 F1 p5 y; E4 g           <Ctrl><u>       視窗往上捲半頁。- L' u1 W8 P) l
           <Ctrl><e>       視窗往下捲一行。
  n1 n& @4 x! Z  L6 K9 L! `           <Ctrl><y>       視窗往上捲一行。
: Q; O: V. [: N8 q, e. p- T, ^
3 K# ?. ~1 D) [% W# U8 M& K3.刪除、複製及修改指令介紹 (此單元較少使用)( S/ t: X4 \& J. u: g( l
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:; P: A0 f  e; S3 J' r' m
       Operator + Scope = command0 O& q0 k9 K, z+ C; {1 i2 X
       (運算子)   (範圍)
" V- o" ~. e+ v       運算子:( e& ?& E( t) E3 l; O9 C1 J, V
       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
9 U$ F) H6 E1 O1 k2 w. \7 u. o       y       將資料(字組、行列、句子或段落)複製到緩衝區。
% S7 y0 W+ q9 p0 }+ j' e       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
. {8 W% C% P& z( R                料放置於游標所在位置之行列下。- b# S/ g/ k* J5 C2 t8 U) I4 U
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
9 ?+ \- F8 b. N+ I% V                子等之資料,並插入新鍵資料。# ?# n8 U1 B' ~" ]
       範圍:
, R# |$ K; B7 A  K& \! ^       e       由游標所在位置至該字串的最後一個字元。$ P9 `/ l1 ^5 P, {2 o! \
       w       由游標所在位置至下一個字串的第一個字元。
" U! k$ U; ]. t' K       b       由游標所在位置至前一個字串的第一個字元。3 D' x4 {/ E3 d1 ]  t( @, K; |) h
       $       由游標所在位置至該行的最後一個字元。" {, v9 f* i2 J! A: {
       0       由游標所在位置至該行的第一個字元。) p. b% F9 F0 ?+ j( j: o
       )       由游標所在位置至下一個句子的第一個字元。" p$ w* d! n& A
       (       由游標所在位置至該句子的第一個字元。
2 q% U! o; L" w, H. t2 J       {       由游標所在位置至該段落的最後一個字元。
' E$ H+ E& Y8 i# B1 i) o" q       }       由游標所在位置至該段落的第一個字元。. A0 ^: l/ I/ M5 Z1 l0 p  q. g
       整行動作- P# S( q9 z' O7 ^5 T0 @
       dd      刪除整行。( R! Q; J! u! M
       D       以行為單位,刪除游標後之所有字元。1 K. Q8 K$ V1 _! ^- Q4 F5 z
       cc      修改整行的內容。
3 q+ q9 d$ t$ ]( y8 c1 [       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
" w! ^  N" Q+ D3 s" R5 f
8 P# @/ G7 l3 h4.刪除與修改
+ q$ ?$ J. S* T) r3 Z       x       刪除游標所在該字元。
0 U+ ?! Y0 U, L: z5 c       X       刪除游標所在之前一字元。6 [7 ]/ e3 G, [6 `
       dd      刪除游標所在該行。
" H/ L. Y( F5 c" H* _       r       用接於此指令之後的字元取代(replace)游標所在字元。7 z4 C, a' F; H" b! k# C- @8 V' K
                如: ra 將游標所在字元以 a 取代之。/ ~# @2 l6 K3 I. @) L! C, @, n  y
       R       進入取代狀態,直到《ESC》為止。9 K  N+ p1 L3 ~1 D( h
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。5 j2 w  Z9 s1 Q& d( f$ L
       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。: H& P' {4 T' {% U$ C8 y$ K

7 B# ~( b, K4 W& B9 s; |) y  A% D5.搬移與複製; s8 N7 a3 z  X6 y7 j2 L
       利用delete 及 put 指令可完成資料搬移之目的。
* r3 }% D9 S3 j+ E       利用yank 及 put 指令可完成資料複製之目的。
: ~0 t) t; A3 F( h  @1 r  B       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
9 ~, |7 k  d6 Z, G: g       可將緩衝區內的資料複製到螢幕上。
$ O1 |7 E5 I6 t       例:
1 ^4 @, i( p' p# F4 x       搬移一行        ‧在該行執行 dd
' M$ Z% \8 }5 I+ r. h! f/ \                        ‧游標移至目的地1 H5 ~" E( {! N5 G2 c$ z8 E% ^
                        ‧執行 p/ P  q6 w/ g3 H, L! ^2 y  R% T9 o. ?
       複製一行        ‧在該行執行 yy. l: a' ^7 J- z+ e4 t, `, l
                        ‧游標移至目的地
. X# Z3 x- ~7 m+ c                        ‧執行 p8 v8 ^* w+ @$ B' x& [* [% _( M! @
% |0 \$ S$ ]% o. R2 ]" Z
6.指令重複
& @6 v" k" U8 x7 t+ S       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
# n  I$ S' {8 T% ~       次。2 v: \# ~+ |0 P! h. H) ^
       例:
( L: S  t- H, L0 v8 j! R       刪除10行                ‧10dd+ n# v5 W% T4 J$ [8 x
       複製10行                ‧10yy7 y7 u' h6 u" e! ]- y6 n
                                ‧游標移至目的地# L; C' S3 W, T7 b
                                ‧p
( Q0 }9 |! j0 r( L+ _0 B- p       指標往下移10行 ‧10j
2 i6 c4 K; N5 u1 P; T. F7 j' A
2 i! O) G! E  H* `1 W1 B7.取消前一動作(Undo)
" L' B/ }: v3 t) H( G       即復原執行上一指令前的內容。: O# N# @0 V# X% ]& }5 z( p
       u       恢復最後一個指令之前的結果。" M% v8 U$ l* q3 M$ Q
       U       恢復游標該行之所有改變。
1 N! b2 y% l3 Q* r& N8 H( B+ `7 a; n  `- {4 n
8.搜尋
0 a  ^+ N4 j( L- q- p3 l6 K       在vi中可搜尋某一字串,使游標移至該處。
0 `$ V. M6 A/ {5 l& r       /字串           往游標之後尋找該字串。9 M/ G+ w" |8 i! a! _. o
       ?字串           往游標之前尋找該字串。
& L8 J7 l7 u' c* v5 T- N       n               往下繼續尋找下一個相同的字串。
2 U- g& B5 H1 d( [1 |; w4 t, T       N               往上繼續尋找下一個相同的字串。2 O& b! b' F4 w6 K$ G
. h$ p6 i7 y5 c+ }4 Z( M. l
9.資料的連接: {8 |7 k) T* H
       J       句子的連接。將游標所在之下一行連接至游標該行的後面。
+ O. e8 s) T, m7 F* k9 N! c% O       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
5 \: z+ Q* C$ k. j1 Z       (可利用a、i等指令)再按《Enter》即可。
9 I) }% s% C( Y+ r8 F+ ^8 R4 {9 a3 b# `8 J& p. o2 H
10.環境的設定
' I4 {, o+ ]4 Z, E- z1 Q3 [* b$ l       :setnu                設定資料的行號。
- t7 _- v+ E8 b5 ?+ K2 m7 G       :setnonu              取消行號設定。
  U' ]* i9 M4 E' C       :setai                自動內縮。$ e$ M) [; C, K7 j
       :setnoai              取消自動內縮。
' z! g4 E9 F+ x2 Q2 }- I       自動內縮(automatic indentation)
4 J6 S9 `0 f& y% e$ L       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
  Z% Y4 ^* ~  E3 K8 K0 m% Q       動內縮的功能,用下例解釋之:: _8 d) b6 s6 p  p- Q7 f  y
       ‧vi test, e, v% o6 b0 X; D
       ‧(進入編輯視窗後)
) ~3 q7 X4 J8 T! H* ~         this is the test for auto indent1 R0 O! O$ O( k  |! i' C
         《Tab》start indent           ← :set ai (設自動內縮)" ^8 d% |7 F0 ?
         《Tab》data
8 w: j: ~4 o. w* p) x0 p         《Tab》data
4 o- O1 ^5 B2 _6 }0 }         《Tab》data                   ← :set noai (取消自動內縮)5 D8 Z* p8 n& P
       the end of auto indent.! N4 i9 z/ g' L" P
       ‧註:<Ctrl><d>可刪除《Tab》字元。+ P: T3 [+ J6 F9 |4 O+ |

8 F' j' e7 |4 Y5 S8 \11.ex指令& F+ G# _" \: }1 t7 A; ?# z
       讀寫資料8 e# ^6 [# _, K* I$ a$ a4 P3 E+ a! x
       :w                     將緩衝區的資料寫入磁碟中。( C+ H0 d, Y( z6 A* l; @2 D
       :10,20wtest   將第10行至第20行的資料寫入test檔案。
% m2 ~! N" O* d. a# ~5 R       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。7 C5 X3 S6 `" `: q! M0 A- h' s7 n7 F
       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
2 U; x( d6 @1 d0 k2 K' F" M       刪除、複製及搬移; m: J- c: o* |' a7 \/ i
       :10,20d                刪除第10行至第20行的資料。8 Z2 H4 j; s& c2 v9 t* i; P! ]3 l8 D$ m
       :10d                   刪除第10行的資料。
# k$ L' s5 X: a: R3 u6 G       :%d                    刪除整個編輯緩衝區。  k3 ^" J7 a7 P# @4 G% i
       :10,20co30             將第10行至第20行的資料複製至第30行之後。
% K/ I* @8 _( |/ g/ r& v       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。8 B6 r9 O% R6 L$ [$ v1 d4 ~5 _
       字串搜尋與取代
3 b5 O7 d% H! g+ u% a       s(substitute)指令可搜尋某行列範圍。
& c. [" A9 U! w6 s0 g       g(global)指令則可搜尋整個編輯緩衝區的資料。, ]! P- Z- `5 p" v; j* c% Q
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條8 [3 r& n9 N/ O; N
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
7 x- W/ n4 |2 U       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
6 G" X: N  ?6 {& k( |       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。
& e# g- x! j% j# J. K       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。( b9 u  Y- S* s3 T: F+ J) a) i

( M, N* u' d. {12.恢復編輯時被中斷的檔案0 t* B" n" H" H/ C
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
; F7 v0 W. f6 `       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前, x6 C" }" H4 l
       的檔案內容。& Y( k2 f6 e4 B8 T, a8 c
       %vi -r filename7 A5 r  j; J1 `. c" Z7 _( A

7 e- S/ D- [) ^1 j# h13.編輯多個檔案
& |- u8 J* \0 K9 Q       vi亦提供同時編輯多個檔案的功能,方法如下:! f. k: y* O7 ?$ z" G, ~6 _  h
       %vi file1 file2 ..
9 e  h  H9 U' h# {       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
% t6 @3 S8 Y/ `( I$ e6 X. ~9 C& ?       再利用 『:n』載入下一個檔案。
' [+ Z( I1 X) c
3 A8 r+ t, y; c" u* g) P' U參考:
3 V. n3 G# l  e3 c& {2 s
' S' E8 p, p8 rhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html
. h- d6 ?4 J# {8 |' C( I- c7 X; c/ b




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