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

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

作者: IT_man    時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯 0 l/ ]! m& a3 A2 J
6 s% t# [3 m4 C" z
vi指令說明(完整版)
6 Y4 a9 t7 Y- Z: z1 B

9 l9 I' N0 O' ]1 d8 I- q+ B2 m; S

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


. s0 b- M. B' P8 ]! w
       如何進入輸入模式
0 m" T3 x2 `% i7 n1 h7 H# i                a (append)    由游標之後加入資料。
, M$ X4 y7 X6 m+ q" D2 D                A                   由該行之末加入資料。
: F) r' B& [- l8 u' Y7 q                i (insert)        由游標之前加入資料。
) B: a, \% n# F( D/ S                I                   由該行之首加入資料。3 V5 |& h/ H! s: f' H1 e: [
                o (open)       新增一行於該行之下供輸入資料之用。
( l- I+ r( E! }- q% U                O                  新增一行於該行之上供輸入資料之用。; C1 ]8 Y+ y; ~
       如何離開輸入模式
, N' [" r1 D" ~             《ESC》          結束輸入模式。" O' T  m' d( l3 I! B8 P" M( Y


! e! s1 d! I0 w3 y) `4 r1.游標之移動8 |: M8 a* |4 I0 D% M9 B0 V
              h       向左移一個字元。, z/ U! w: y& K  Z: r
              j       向上移一個字元。
. l9 x( N2 M# t+ Z              k       向下移一個字元。
1 y* U* ~. O; B  W: k# ?              l       向右移一個字元。( f8 b, ~# B; X7 _/ H
              0       移至該行之首
" u8 M4 e, l: o; Z4 H/ ]9 I' ~6 s              $       移至該行之末。
1 R. f4 g9 ]8 h: @% o0 s- @% d              ^       移至該行的第一個字元處。
( K" x  l: _1 B( J! K              H       移至視窗的第一列。& U% T* n  X# d- p% J' j
              M       移至視窗的中間那列。
/ r. C$ \4 Y3 T, p4 ]0 @( U' W              L       移至視窗的最後一列。7 s' a+ r  U8 X' r7 W
             G       移至該檔案的最後一列。1 H- ?& a6 k" z+ G! F
             +       移至下一列的第一個字元處。
: V8 {! @2 W. o  _4 C0 I6 M8 z9 }5 U             -       移至上一列的第一個字元處。0 B8 c( y; s3 f8 B6 ?& Y) u7 x/ F$ G
             (       移至該句之首。 (註一)
8 V3 ^$ f* y: e* S  G! {+ v             )       移至該句之末。
) W/ @$ ?! t) K- e' i9 ?2 T! e( K2 s0 [             {       移至該段落之首。 (註二)
) Y+ f* i; W4 B/ [) r             }       移至該段落之末。
, A2 `  k( r1 D9 {6 g* M, @             nG      移至該檔案的第 n 列。
4 J+ g3 c; A4 U$ D- y2 P             n+      移至游標所在位置之後的第 n 列。
; f5 i- }% w  ~6 K& a             n-      移至游標所在位置之前的第 n 列。, V. ?4 Q7 r$ s1 M% v
            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
2 k8 c* X- F8 m& `5 A            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
; k' g  n/ d* _            註二:段落(paragraph)在vi中是指以空白行隔開的文字。
% B7 k! u9 j/ U  q7 C( b" @# T7 v4 F9 _
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。
  W  S5 O5 q7 w2 }           <Ctrl><b>       視窗往上捲一頁。5 l, v: v4 D: `! f# k% \
           <Ctrl><d>       視窗往下捲半頁。
0 r5 d' V1 ?. ]6 h& F( B/ ?           <Ctrl><u>       視窗往上捲半頁。
& o# W- q! t$ |/ d' z+ o           <Ctrl><e>       視窗往下捲一行。
6 S& y6 ~: D3 [" z6 }. z' c. W           <Ctrl><y>       視窗往上捲一行。* v9 E! N" O) _) V" A* u: m: G

1 v2 c( X# f3 }3.刪除、複製及修改指令介紹 (此單元較少使用)
3 c9 F/ r/ }, l1 l) I) L5 E0 J9 p       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:4 W6 `$ H4 C- k! o7 s/ q0 ~! [) @4 B
       Operator + Scope = command
1 D8 p" L2 s* @! W: r6 \% K       (運算子)   (範圍)
6 [5 C9 A3 p  k( @" W       運算子:5 O% Y4 ?% J- S8 s5 @  Y; i6 _/ v( N
       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。. U5 P% a& D$ d+ X) n0 G. k
       y       將資料(字組、行列、句子或段落)複製到緩衝區。
& q( a% ?+ X* ?0 a' [       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
0 _, O# |8 D- K                料放置於游標所在位置之行列下。
% H* u) a8 ]% P       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句7 J4 N; x1 N- h' }+ b
                子等之資料,並插入新鍵資料。
# O1 [0 J& Z+ y4 z$ ^0 z       範圍:
& |8 \& v# K* Q3 U, G- P* i) X       e       由游標所在位置至該字串的最後一個字元。; ~. `( g! B1 C& o1 L/ o9 _0 y; U
       w       由游標所在位置至下一個字串的第一個字元。8 e2 k$ C9 Y$ I& j0 e/ E, U
       b       由游標所在位置至前一個字串的第一個字元。
- p: G  k+ c2 j, t6 }       $       由游標所在位置至該行的最後一個字元。
3 q% k2 r0 X& W& H" t/ Y       0       由游標所在位置至該行的第一個字元。+ s" x: r7 |1 q$ {0 Z4 q; t% f3 t
       )       由游標所在位置至下一個句子的第一個字元。4 a0 M3 B$ V1 |, K
       (       由游標所在位置至該句子的第一個字元。2 @" N& m. ~) \; k5 _/ s* t- u
       {       由游標所在位置至該段落的最後一個字元。
6 i* W! a$ T  U: M1 @. g' ]0 a$ G       }       由游標所在位置至該段落的第一個字元。
; ]- G/ U% O  X" j$ E2 Q       整行動作1 x# [/ K* p8 l) I, F( k# }) i
       dd      刪除整行。3 w- ]% H4 f7 }' w; U+ c" G! H
       D       以行為單位,刪除游標後之所有字元。7 e. _- I5 I! a5 Q' |/ A
       cc      修改整行的內容。
/ s# S8 P6 Z7 J1 ~* Y       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
$ L" o7 R2 r# o* j; W
2 n! @3 P. F# [" }# o% P* s4.刪除與修改
2 i0 t9 X) u8 o9 ]0 {: J  ~       x       刪除游標所在該字元。) ]* |9 v7 ~) O
       X       刪除游標所在之前一字元。  l+ K7 d" O- @+ m1 U/ V: j! }
       dd      刪除游標所在該行。/ B2 K. h6 F3 x+ \
       r       用接於此指令之後的字元取代(replace)游標所在字元。
3 p/ K2 j: o: ]. S                如: ra 將游標所在字元以 a 取代之。
  l( X' c- `5 X: ]) ]! W       R       進入取代狀態,直到《ESC》為止。% V/ ~; B. R6 q# a& O
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。2 v& L: \5 q4 C- m4 y4 j
       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。1 h" F5 \1 l- d4 K# ]
, E5 ]* G- h9 F4 x( C* j
5.搬移與複製* x. [+ F) L) {7 S6 k# ?2 X6 B
       利用delete 及 put 指令可完成資料搬移之目的。  T4 V* F8 z! m
       利用yank 及 put 指令可完成資料複製之目的。" W1 P% M# g! ]4 B1 s1 y# X0 z
       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令, t4 X& `, l  J% `) ^$ \# A+ }
       可將緩衝區內的資料複製到螢幕上。
2 ?  _/ p4 ]9 e" p  r5 S) k       例:
% x4 u3 X4 e" _1 W; T       搬移一行        ‧在該行執行 dd4 I3 c3 ?- F! Q& e8 P, N
                        ‧游標移至目的地
( G1 F  G# `5 E+ D                        ‧執行 p
* D' B; L+ o/ z2 i; B' N       複製一行        ‧在該行執行 yy: w$ y# v) G: \8 F
                        ‧游標移至目的地* K4 i9 Y  J# \$ W! r
                        ‧執行 p0 x; P" s- d- [$ f- |

" j; j% G' s2 P$ t5 z6.指令重複+ l6 M+ v' h' b6 E% V
       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n) X1 \' n+ j! s% D- i
       次。+ c! \) ]( C, }& v# k/ n
       例:- w9 L& e4 s0 |+ b7 ]' m
       刪除10行                ‧10dd9 W# ]& s! Y, T! K4 I
       複製10行                ‧10yy
8 g+ A% s: ?+ p9 k# N* Z                                ‧游標移至目的地
) x# E5 ~) P+ k# a: l* H0 C                                ‧p
' q5 p1 b; l; C" v% V7 t       指標往下移10行 ‧10j; a' L8 Z$ J8 r; [2 B) @: r0 a4 x

+ O$ f: k7 m$ p. C" V7.取消前一動作(Undo)
; V5 g1 W0 |4 v       即復原執行上一指令前的內容。
* u* L! D( Q2 B. b0 }5 I5 k       u       恢復最後一個指令之前的結果。
% E0 o+ e# f1 ~) m9 f! f  I; E( s       U       恢復游標該行之所有改變。
& Z. z2 B0 m# k" r
9 S8 j, E5 z+ Y# D* J8.搜尋  @7 j6 k1 Q: ^7 V# h7 _6 c
       在vi中可搜尋某一字串,使游標移至該處。
3 m  t: {" A: N5 E/ n       /字串           往游標之後尋找該字串。
$ Z- [# [" u; F4 y! B7 \       ?字串           往游標之前尋找該字串。
5 B8 `9 A& J( v, X3 [& V! t       n               往下繼續尋找下一個相同的字串。" Y) s* r# H/ k/ V3 s9 J
       N               往上繼續尋找下一個相同的字串。. |; P4 R/ w- m

, V* L' m# E& @" W3 }' h9.資料的連接
9 X' A9 z0 U5 z! d; V7 Q       J       句子的連接。將游標所在之下一行連接至游標該行的後面。1 E. L/ ]+ I' y& Y
       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式0 }. F  G9 ]7 l5 T0 d
       (可利用a、i等指令)再按《Enter》即可。
9 E4 s. h6 h/ X6 e* Q' k0 I0 A9 `! X  o: Q6 [" q  B  j
10.環境的設定
4 s. s+ a- V8 c: h0 f       :setnu                設定資料的行號。
$ E7 C3 `/ Z0 v+ `# X       :setnonu              取消行號設定。
. g/ @% Q; s7 t6 D; c. _. G       :setai                自動內縮。- U0 L2 v# c& b! `& |. ~6 H# ^2 }
       :setnoai              取消自動內縮。! h! K  g4 L# Z' U! J
       自動內縮(automatic indentation)% Z5 k  r4 L: x1 e+ x/ p
       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
: M9 h' m+ N" }6 y4 y       動內縮的功能,用下例解釋之:
8 G7 G  n' K1 [. U# f" R: D# @       ‧vi test
+ r4 T! h5 H/ C3 l" z" {6 p       ‧(進入編輯視窗後)8 X* H/ D& V: B: I# R0 {
         this is the test for auto indent5 X, e- Y& i: _. m. R
         《Tab》start indent           ← :set ai (設自動內縮)
8 m4 g; i, ~: c         《Tab》data. s: W) h! u+ J3 ^0 R& P
         《Tab》data2 e6 y1 y+ d7 q, N" k) B
         《Tab》data                   ← :set noai (取消自動內縮)' p# o! R- @# b: ]) G7 Z) z4 Z
       the end of auto indent.
# s  w. }- g% X+ j9 n( C       ‧註:<Ctrl><d>可刪除《Tab》字元。
/ h6 ~; Q! w; v' ^. x8 l% g* ~) a* f5 v
11.ex指令
* c- n5 i4 f. {, X3 s- P. {+ ^! Q& i  i       讀寫資料% |( i2 @8 C3 q, s. H8 T
       :w                     將緩衝區的資料寫入磁碟中。$ m3 _! g; d( P" p) ^) B
       :10,20wtest   將第10行至第20行的資料寫入test檔案。0 e% d5 P; q3 `6 o. W
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。
  T' ?1 y- w  C' z5 r  ^0 z  H       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
  U4 `! N5 A* i3 G$ n: e) C       刪除、複製及搬移- d" J7 J% l% u% ]  I
       :10,20d                刪除第10行至第20行的資料。3 d$ y, P! ?5 a9 @! V/ ]
       :10d                   刪除第10行的資料。
/ X' }1 F- N6 I9 [% k& g       :%d                    刪除整個編輯緩衝區。+ k7 n! O; K/ \6 c
       :10,20co30             將第10行至第20行的資料複製至第30行之後。! y! i2 N7 |$ J$ a  s0 E% a
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。: Q' ^  ?7 d) P1 i2 S/ }
       字串搜尋與取代1 }, m5 I& o8 _0 n# \
       s(substitute)指令可搜尋某行列範圍。: J4 \. u9 l% I" n
       g(global)指令則可搜尋整個編輯緩衝區的資料。4 U( Z- {- Y/ T  i
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
9 k. |% Z# S$ f       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
8 r/ H2 C4 a: P+ s% g% Z5 P       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
: u$ ~3 ^( D  X8 Q( @3 Q/ y       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。+ o, k! v& Z; u& n, x; Y
       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。
9 K4 x$ `0 L9 Q3 X2 d; Q, m- w* k- P' o2 l' p4 l
12.恢復編輯時被中斷的檔案2 ~, w1 E, [3 u+ u+ \
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
- @2 y* ?' F3 K3 V       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前5 O6 h" a) r* Q+ [
       的檔案內容。. d3 F4 `$ I1 ~5 P$ O& d
       %vi -r filename
/ r2 k& ^, L) f6 J) d( {  \
- r% `0 u$ J7 |) K: v! A13.編輯多個檔案* n* U$ x( P. K/ z9 D
       vi亦提供同時編輯多個檔案的功能,方法如下:
- ~8 D3 }3 x- V9 _       %vi file1 file2 ..
2 D$ W: k8 |+ k$ M/ E5 X       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
! T; V2 [& {. T5 q       再利用 『:n』載入下一個檔案。( Y* J  s# h( ^3 D' O, }& g

; }0 f) }2 s: Y3 p9 ]參考:
, T- ^8 g' h7 j6 u& ]/ l6 u) [9 q, P
3 U- n- Q( U3 @( ~- `$ Rhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html
3 @# f: j, u3 u- H/ H3 p" L




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