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

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

作者: IT_man    時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯 : u; o# Q( l; Q/ c/ g

; v6 H- z$ z! ~vi指令說明(完整版)
8 w) x) k) h; x1 F
) a7 f$ I: D1 F& a1 L

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



7 F- D) @6 A8 L' W2 v  H       如何進入輸入模式* _- N$ ^8 b: A
                a (append)    由游標之後加入資料。( G2 b- h" k: T% N: M# l$ G" f! C. J
                A                   由該行之末加入資料。! `( l. ^) L6 t# ~! O
                i (insert)        由游標之前加入資料。
* ^9 b( S6 R9 h) W                I                   由該行之首加入資料。
$ h) D( Y, i6 E6 @                o (open)       新增一行於該行之下供輸入資料之用。
% I9 g4 D5 e2 p) M( Z                O                  新增一行於該行之上供輸入資料之用。
; a9 @5 w2 d) }0 r  E       如何離開輸入模式
2 }$ H  p  t! r* b. V7 }% f, z9 }             《ESC》          結束輸入模式。
" ^0 L; z+ m9 G5 ?
2 t7 X; g  S0 ~# P! V
1.游標之移動  d- K: G/ b3 q0 I3 w
              h       向左移一個字元。* p6 ]% F, K0 c1 x. E  \* a
              j       向上移一個字元。
5 O% u6 Z) i1 T% a" _              k       向下移一個字元。
5 ^8 F" ]0 n2 f              l       向右移一個字元。8 w- A: L* E* O' ~0 ]
              0       移至該行之首
: |! W! N! r' j5 h* n              $       移至該行之末。, I* e* t6 G( D( @8 o& H
              ^       移至該行的第一個字元處。
' f8 u0 n# H* x$ L* M' y8 v. x              H       移至視窗的第一列。: z: p; U# r: S; W+ Y" P
              M       移至視窗的中間那列。
% x* W- W, t) u  Y, n              L       移至視窗的最後一列。
6 }; ], z3 P1 Q2 L             G       移至該檔案的最後一列。$ T: R  Q+ y' m( L
             +       移至下一列的第一個字元處。
6 O0 k: `. Z. F1 \             -       移至上一列的第一個字元處。
4 i- D( E' G; b4 d: x' h             (       移至該句之首。 (註一)
4 E$ w, G. e; e; o4 o4 P             )       移至該句之末。6 \1 K4 \0 I  W/ s
             {       移至該段落之首。 (註二)
- W  r0 M+ f) J1 X# B, G+ V             }       移至該段落之末。
9 F; a) D7 ~& p. X4 M2 Q             nG      移至該檔案的第 n 列。0 }4 i" }. J) N7 n- V
             n+      移至游標所在位置之後的第 n 列。
8 M) d5 }8 f* D; Z+ l1 B             n-      移至游標所在位置之前的第 n 列。9 j  v. |; F  k6 }
            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。; m  p  q; O  }7 [
            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。, ~. b  R5 i) ?7 ~7 l$ E
            註二:段落(paragraph)在vi中是指以空白行隔開的文字。6 v8 j+ m5 H" o5 `$ e" A$ J/ M7 K

5 F! F2 |1 H' d: e, z6 ]2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。7 `' p5 g! e& W( f
           <Ctrl><b>       視窗往上捲一頁。+ V, ]) t" U: T" p7 Z
           <Ctrl><d>       視窗往下捲半頁。6 Y8 \$ ^$ D' W8 k
           <Ctrl><u>       視窗往上捲半頁。
5 F' z, X+ O" _8 O           <Ctrl><e>       視窗往下捲一行。
- Y% W; X; V0 _8 V, P           <Ctrl><y>       視窗往上捲一行。) i, [! b5 A0 R
1 g5 [" Y- |/ s/ d: o
3.刪除、複製及修改指令介紹 (此單元較少使用)0 f& n; N6 T3 Q7 S  k2 x& F
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:8 s1 V4 h. y* H
       Operator + Scope = command! F: `, G* E; N# Z9 O$ \$ ^
       (運算子)   (範圍)' p* ~1 L; \" ]7 t
       運算子:
; _5 b& {) o4 }1 v0 U       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
7 n4 j* P" V8 m       y       將資料(字組、行列、句子或段落)複製到緩衝區。0 u( ~/ e- W& B
       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資2 {1 p9 w5 D* A5 z+ f! b. l7 ^* T
                料放置於游標所在位置之行列下。" p* Z1 x$ }$ X" s1 j) d4 D' s3 e7 O; i/ \
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
- r8 t( j) @% d* X+ H                子等之資料,並插入新鍵資料。$ [; |+ c% }$ u5 N7 V
       範圍:# \3 {: {, n- M* Z, n8 N
       e       由游標所在位置至該字串的最後一個字元。
) r  k8 I4 b, e7 C7 j' t       w       由游標所在位置至下一個字串的第一個字元。5 ~4 f8 U1 @$ v+ Z& a6 x
       b       由游標所在位置至前一個字串的第一個字元。! g2 A1 u- [. d# a) G
       $       由游標所在位置至該行的最後一個字元。9 S# F* w' z% `) K( x
       0       由游標所在位置至該行的第一個字元。
$ {- M) `0 G- k  W3 h; g+ p       )       由游標所在位置至下一個句子的第一個字元。6 J4 n5 U$ D+ X2 x) P
       (       由游標所在位置至該句子的第一個字元。6 y$ q% A) k- P1 E4 v7 C
       {       由游標所在位置至該段落的最後一個字元。
' t9 i4 ?. w3 k" I6 [0 F- @       }       由游標所在位置至該段落的第一個字元。
, F. r0 j6 d9 \' H- d: o       整行動作! w% t+ {* T4 K- M1 A: m
       dd      刪除整行。" m+ n1 m$ y* e3 r" ?* K, q# m
       D       以行為單位,刪除游標後之所有字元。& t$ t- L7 h5 ~
       cc      修改整行的內容。4 ]8 r3 [0 V2 v
       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
# z. d. i( c7 p& A# Y
9 |, m* f  R6 R, I4.刪除與修改
; T2 C. B( c. r. L6 ~% b3 @       x       刪除游標所在該字元。$ v) u3 s3 p4 V6 X6 c6 H
       X       刪除游標所在之前一字元。* ^1 B, M. i' Z5 P6 m, O
       dd      刪除游標所在該行。
3 ]0 u; U# r: m; W, v       r       用接於此指令之後的字元取代(replace)游標所在字元。9 R6 ^# d+ E$ J5 f/ E2 C; |
                如: ra 將游標所在字元以 a 取代之。
0 b7 p2 d/ \; m% e! w9 U6 u. c       R       進入取代狀態,直到《ESC》為止。
; C! r/ A% m( I- r1 E& e% s       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
8 x$ s. f0 k, o6 Q8 X" M9 }       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。
$ q; c0 [" @% l* Q5 b! N- p9 `7 S5 x% Y8 x0 a7 G
5.搬移與複製
; Z3 K9 l' L% U% f1 A3 z& S  E, j       利用delete 及 put 指令可完成資料搬移之目的。4 w/ k$ |- W: m0 P; }$ P- V; m* H! \
       利用yank 及 put 指令可完成資料複製之目的。2 P& N/ O+ H# F
       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令5 @+ T4 W- y: Y( l
       可將緩衝區內的資料複製到螢幕上。+ c' u3 J+ c+ ~9 h  [- ~
       例:
" {5 a3 q/ R5 r+ W3 R  h0 }# N( n       搬移一行        ‧在該行執行 dd
% K+ }3 d7 n) l; d# j                        ‧游標移至目的地
8 R. ~+ e9 J9 M4 E/ L                        ‧執行 p
7 m3 ~; ?% n3 \       複製一行        ‧在該行執行 yy
1 D- m, y3 v9 s, z$ b! R                        ‧游標移至目的地
8 }6 f# d4 m! a( {/ T* c                        ‧執行 p
+ k% w" y0 F2 z: H+ |
* f. D: Z) P4 ?/ J4 v5 n8 t  Y6.指令重複
5 s; E3 p! w, k$ x       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n9 h1 z: N4 R1 C2 a
       次。
, \" h4 x" r1 j) l! K       例:
: |; w  m  N7 Y- w' z       刪除10行                ‧10dd* f: C' u/ ~7 F3 E; W. a
       複製10行                ‧10yy( |/ d+ @$ i7 ~- i
                                ‧游標移至目的地
; S- Y2 T7 h# R7 i* f                                ‧p
# v' A5 q1 Y2 I4 k+ y* g8 t       指標往下移10行 ‧10j: r4 [- |% G* t& q* @

/ }+ b6 m$ j) U$ u7.取消前一動作(Undo)0 Z3 i% l2 l/ C. ^( C4 ?% o
       即復原執行上一指令前的內容。6 L# a3 V  h4 z' o
       u       恢復最後一個指令之前的結果。$ x& Z9 e- i2 }; R  t
       U       恢復游標該行之所有改變。
, z7 u0 A; L8 P* c6 q2 A6 y) K7 Y
% g! F" b# S7 `! O; C! S8.搜尋* Y: v/ E6 t8 f
       在vi中可搜尋某一字串,使游標移至該處。
3 H! e; }+ }  \7 }       /字串           往游標之後尋找該字串。3 C0 X7 S; v! Y/ s6 O
       ?字串           往游標之前尋找該字串。
" g0 V7 u# K1 K" O& {! x       n               往下繼續尋找下一個相同的字串。
3 [: E) l# K2 H9 W: K       N               往上繼續尋找下一個相同的字串。+ F1 L/ I" j3 P& [! E9 J3 ^6 n( k

) f' g. M% R4 p) B5 J9.資料的連接
* a* l, _# A5 U1 {5 \; Z9 Y! ~       J       句子的連接。將游標所在之下一行連接至游標該行的後面。
; k1 ?! I7 J7 [' W       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式9 J" D9 J  r7 W5 u
       (可利用a、i等指令)再按《Enter》即可。0 Q  Y  I, Z+ E6 u: v; L1 s8 H( I

: Y: p3 F! \4 f; D9 q7 h: c7 a3 U1 z10.環境的設定* ?6 W; |( A7 G+ R9 D0 u; C
       :setnu                設定資料的行號。7 M  c, M5 {9 _! s9 h; U
       :setnonu              取消行號設定。' q5 n! Y, Y$ e" A" c/ \
       :setai                自動內縮。
% m& O- Z: h0 {, J/ L* ]       :setnoai              取消自動內縮。
) ~0 @* t: Z: A0 N$ G       自動內縮(automatic indentation); q& p; `3 z3 p0 L9 l5 O# E, S
       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
: @' H8 N; I. d* h8 u( |6 a  K! l" u" l       動內縮的功能,用下例解釋之:
6 k0 v  ~. \4 z& C# B       ‧vi test
3 E# ?1 |) q" X' w       ‧(進入編輯視窗後)4 N3 `  J) w' ]) _8 r# N
         this is the test for auto indent
3 E8 y; h# @6 c3 i. Y2 |' \         《Tab》start indent           ← :set ai (設自動內縮)
& N( w5 i( j6 G+ {3 m/ t" P         《Tab》data
  F* B+ K3 o- f         《Tab》data
, q! t* {" d8 F' Z' R  x# p1 G) g) ?         《Tab》data                   ← :set noai (取消自動內縮)0 l' q! F( Q4 F4 W/ R  m1 P* s4 D
       the end of auto indent.7 I; R$ N, A) b, J6 ~8 Q: D( S
       ‧註:<Ctrl><d>可刪除《Tab》字元。
4 `2 a" t. m& \- W) A! P4 U# P  k$ R
0 u8 |4 R" X/ Y! X% i11.ex指令1 l2 ~1 k- V& q, v
       讀寫資料# F1 P0 {) c5 j$ k  _6 h
       :w                     將緩衝區的資料寫入磁碟中。, ^- t" b0 w/ ]" `6 I3 L& @
       :10,20wtest   將第10行至第20行的資料寫入test檔案。
7 X  W0 N. U# p% Q9 |- M: j3 }       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。; C7 _# c* g- T& J0 G- X
       :rtest                將test檔案的資料讀入編輯緩衝區的最後。% J. W" K9 y$ O1 a: j, `+ i
       刪除、複製及搬移
7 |/ d* ^; ~$ E' k0 W& R# _       :10,20d                刪除第10行至第20行的資料。
8 F" r3 z) e  i, v' ~" D       :10d                   刪除第10行的資料。2 J; O! O9 V$ B6 l) k* X4 U
       :%d                    刪除整個編輯緩衝區。
3 @+ z! |- f; S) w( h' o$ q       :10,20co30             將第10行至第20行的資料複製至第30行之後。
" K* d6 {" k" e       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。
+ [% b* R" ~, s" {       字串搜尋與取代
/ ?/ j2 p5 }, a2 V0 W       s(substitute)指令可搜尋某行列範圍。
" o3 o) h0 C3 z( Z1 c% `       g(global)指令則可搜尋整個編輯緩衝區的資料。  J2 l: r; d/ F& y% R
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條9 K7 V' K0 @$ @. [! k
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。  V4 }% i" f% x2 e6 V: d
       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
. s# e8 X# z! L( x4 ~       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。+ M( K7 N* S/ p
       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。' {- f& B8 |( a  e
2 L8 ^/ O  J9 s
12.恢復編輯時被中斷的檔案9 l- e" I8 N4 ?9 ^% @5 Q& C% `
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未; P1 L2 Q5 v; x! x& }, ^
       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前' p) r. }: l% x  \' a, u5 g/ h
       的檔案內容。
: B4 r1 M9 Q0 n       %vi -r filename
  y" u7 u' h: c3 {/ @4 |2 v- i$ u6 c: }! K! ^
13.編輯多個檔案9 p! S' N6 |5 {3 u4 q' f6 P
       vi亦提供同時編輯多個檔案的功能,方法如下:4 v2 c6 E9 Y& c7 n
       %vi file1 file2 ..) d5 D0 L7 r' {4 j$ c$ D
       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後, [) j" h, w6 v) z) n/ ]; e4 E) m
       再利用 『:n』載入下一個檔案。5 W0 c9 c% ]& g4 {8 H) E$ E4 o

7 W% X3 c, J7 Y, @參考:
5 ~& b+ m( c5 h% U* J' C- }4 s+ X+ n& `- G) b
http://chunchaichang.blogspot.tw/2010/08/vim-s.html
, M# \1 O7 M; p+ K* A, C) y




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