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

 找回密碼
 立即註冊
查看: 1922|回復: 0

[linux指令] Linux下的文字編輯器-vi詳細說明

[複製鏈接]
發表於 2014-11-18 08:47:14 | 顯示全部樓層 |閱讀模式
tid=95& 本帖最後由 IT_man 於 2017-5-6 23:16 編輯 ! x. R+ K# U5 t( P% X1 a3 p; O3 c
6 j7 \6 k" H# n, q7 H$ ^/ U) ?
vi指令說明(完整版)2 @* Z/ Z' L4 f  L( M
  • vi 的操作模式) _2 N/ j5 a- K


; R) W& a+ y% {' e% J

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

  • 輸入模式: l! @& X: a7 k! P/ W' w

' b* Y; e8 Y$ y8 t7 N
       如何進入輸入模式
, r' O2 i' w+ C                a (append)    由游標之後加入資料。
. x. P* O* u; b" F( [7 T+ U1 A                A                   由該行之末加入資料。
8 E& w, l" n' c7 Y( k                i (insert)        由游標之前加入資料。
( ^1 R' R6 J5 G' J. ]                I                   由該行之首加入資料。! m. s, C8 q. m- c) E+ U; G! u
                o (open)       新增一行於該行之下供輸入資料之用。
2 ?. n) C4 c& F7 \                O                  新增一行於該行之上供輸入資料之用。3 s3 [8 _2 {7 X) B0 }
       如何離開輸入模式4 A% Q0 f" U% @2 I) I3 V! O5 y
             《ESC》          結束輸入模式。( V/ V. ]0 R% v6 k' }
  • 指令模式
    5 z% M! P5 a5 Y+ j/ S. ]

- Q: `$ {# w$ f- S  V
1.游標之移動
6 F# j0 l% j, Z              h       向左移一個字元。6 n( x$ |% c0 T+ Z* |
              j       向上移一個字元。
/ ^' R9 f* H: Z7 [' p1 h! A1 T              k       向下移一個字元。
$ }' B& c* Z  @* }# ]  F              l       向右移一個字元。
& B3 |# p+ t: x. c              0       移至該行之首# j8 Z4 u( b7 j$ T
              $       移至該行之末。
* a; |# e: @9 ~! k0 e              ^       移至該行的第一個字元處。
  K5 c+ \4 x1 Z) ]4 D6 K, k& t              H       移至視窗的第一列。4 p6 q* D$ h) w0 ^  l; ~
              M       移至視窗的中間那列。6 z; o* m  t9 H0 w6 o! f8 B/ R
              L       移至視窗的最後一列。
2 Z+ `3 E7 ?; I6 ?, ^/ J             G       移至該檔案的最後一列。
7 O! b. B2 u6 h3 F0 c             +       移至下一列的第一個字元處。
" j7 {, k5 e4 \9 c. k             -       移至上一列的第一個字元處。
0 n4 m% Y" I0 @6 H7 X             (       移至該句之首。 (註一)  k" _5 Q; d9 j6 K
             )       移至該句之末。4 @1 p) E8 V( q/ j7 v
             {       移至該段落之首。 (註二)
) t! @& N& t$ u7 C/ h             }       移至該段落之末。) e! G& e/ T7 p# n6 F4 @; f
             nG      移至該檔案的第 n 列。0 v& l; K- q$ b9 n- c* T
             n+      移至游標所在位置之後的第 n 列。
& g. B2 f5 u4 K* Y2 D+ W             n-      移至游標所在位置之前的第 n 列。
0 J' B% h$ Y2 |: l: h* M# W$ Y            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
' s+ f" X) X- T6 X            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
+ `9 @' _3 D! e1 R0 ]1 Y/ ?0 F7 n  {            註二:段落(paragraph)在vi中是指以空白行隔開的文字。
/ n- p# Y; A5 X/ V" v' N0 D& z. G' Q( s8 \- C
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。1 {: k: N/ c; V' H3 G+ Y4 _( O
           <Ctrl><b>       視窗往上捲一頁。
0 S; n3 @( t& w9 g$ u  }) U2 J           <Ctrl><d>       視窗往下捲半頁。
* P. ~5 Q- B& P2 X# \" A: }8 e0 D           <Ctrl><u>       視窗往上捲半頁。+ H6 N" Y- G, J
           <Ctrl><e>       視窗往下捲一行。
& i4 J" j) x/ E0 @/ j           <Ctrl><y>       視窗往上捲一行。
; u4 i3 h/ L" I( G0 r. v) b7 y" Q" R; w2 A
3.刪除、複製及修改指令介紹 (此單元較少使用)
% ~' v# v0 F/ X" B/ b6 t* ]       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:$ I" s+ U4 ?( U$ J# ]# Y- A" |0 L
       Operator + Scope = command
6 s4 H2 }: Q; C, S       (運算子)   (範圍)
1 f7 Z7 q6 y( o* \& ^       運算子:
4 H+ q/ B- f7 x8 M/ e/ e# M9 B7 Q       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。5 e- h3 e) n: t
       y       將資料(字組、行列、句子或段落)複製到緩衝區。
7 H$ x8 u( R: ]       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
, J6 k9 k, U4 r5 M                料放置於游標所在位置之行列下。
! ]7 m! Q! P0 }       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
% s0 Y; \" \, z' p5 ?                子等之資料,並插入新鍵資料。6 K9 Y+ M2 ?; @3 t: r) f4 y
       範圍:
/ c# L4 P" |/ n9 _0 I       e       由游標所在位置至該字串的最後一個字元。$ i6 F- p7 _- a0 \$ a/ q  g
       w       由游標所在位置至下一個字串的第一個字元。
3 c2 g% [6 |3 J4 K6 C       b       由游標所在位置至前一個字串的第一個字元。
! _6 C* R; Y7 G, O5 W" u7 _8 J       $       由游標所在位置至該行的最後一個字元。
0 O2 S4 F- {" u: I1 l       0       由游標所在位置至該行的第一個字元。
3 \* Q' q. V: L4 E% h       )       由游標所在位置至下一個句子的第一個字元。
0 `, p( z) W/ d; C       (       由游標所在位置至該句子的第一個字元。
+ N8 ^5 U* k/ t9 X* Y0 b) y       {       由游標所在位置至該段落的最後一個字元。
* F9 z$ N1 \1 C3 V5 j$ V9 q       }       由游標所在位置至該段落的第一個字元。
  C4 B' r7 z8 o5 S1 h8 |       整行動作
/ |" S# S' J8 r+ V, ~* `       dd      刪除整行。
! @5 j1 `6 w6 U# A% [( I       D       以行為單位,刪除游標後之所有字元。7 e" r* X7 w3 U( k
       cc      修改整行的內容。1 y- O5 r; ?6 b) ^
       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
$ C! i, J$ G  _, p% {+ X/ V3 u) w5 v5 M7 w, `  a# s7 R
4.刪除與修改
! v1 t7 Q% @0 S/ R8 ^       x       刪除游標所在該字元。8 F* l* E% c- `1 c
       X       刪除游標所在之前一字元。& y# U- {  C% z2 n: k
       dd      刪除游標所在該行。
' m& _5 t9 k3 `5 d, g" ?       r       用接於此指令之後的字元取代(replace)游標所在字元。
2 f0 E$ U# B7 M5 a; k" c5 B0 r                如: ra 將游標所在字元以 a 取代之。. W$ [1 F' I9 y$ y" ?
       R       進入取代狀態,直到《ESC》為止。
( N: G7 ]  b9 Y0 s  m% N! L  E& f1 O       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
# M8 r, b3 }" [% Q) b  i       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。6 x7 G7 P  Z6 @& E4 d
: t. A/ L" V6 \. F
5.搬移與複製( Z7 W, K$ s( H$ k% k2 i3 z
       利用delete 及 put 指令可完成資料搬移之目的。
  M8 h% d  w0 I       利用yank 及 put 指令可完成資料複製之目的。
/ m; L, D* u- C" Q8 n       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
& p# }/ K" b6 h" h# J2 v! k       可將緩衝區內的資料複製到螢幕上。; ^) R- `. E2 {0 T
       例:4 ?! K. V5 c! S) M6 i2 u8 X
       搬移一行        ‧在該行執行 dd) v1 z' H/ B8 T8 {
                        ‧游標移至目的地* P- O! |0 [& P. G. V1 {
                        ‧執行 p
, q' Y# [: W+ H8 E; [% ]       複製一行        ‧在該行執行 yy/ i# a8 b- U/ p. p- x! w3 E6 m: c, a
                        ‧游標移至目的地
4 [1 z7 A& @8 {& O                        ‧執行 p6 ]. i0 r9 \; }
% D& y4 _% O2 a; z, H
6.指令重複) K# O* Q$ ]) T
       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n7 x2 d: r1 E( Z9 V) A
       次。
. S9 ]- V3 J& R( n- r- R6 @       例:. c7 ?0 I, u4 q4 T
       刪除10行                ‧10dd+ g$ A6 W3 Z# T; n/ U
       複製10行                ‧10yy* Y6 g1 H: \. F+ Z6 |
                                ‧游標移至目的地
( r, r" i+ i" S. s( o( G! I( m                                ‧p; W( n1 l+ S9 W6 k3 r* \
       指標往下移10行 ‧10j
3 ~/ E7 j4 A; M  L! ~9 J) P4 [' t5 L" q+ e
7.取消前一動作(Undo)8 M- B9 D/ C  I6 ~
       即復原執行上一指令前的內容。
5 y6 Z4 \5 Z% ?! l2 r       u       恢復最後一個指令之前的結果。( L1 a6 k3 x% _( ]) y6 j
       U       恢復游標該行之所有改變。% t2 r8 a* v) E( r. a

: ]1 B) q, D3 t4 L- {* G9 a8.搜尋
$ r/ a7 P6 k- |: L6 U       在vi中可搜尋某一字串,使游標移至該處。" v1 z% a, l9 D
       /字串           往游標之後尋找該字串。
& n: `1 D% a4 R- b( f  l/ U) m       ?字串           往游標之前尋找該字串。
8 [' I  I! N0 J  k1 J1 n       n               往下繼續尋找下一個相同的字串。
# v+ {$ z! Z5 h% r7 T9 U# B       N               往上繼續尋找下一個相同的字串。
8 A+ w$ w( O1 ]4 Q! R& u" L' F( J
: d9 L9 A# o5 x# |$ ?9 F2 y9.資料的連接1 w2 P7 T3 V6 d
       J       句子的連接。將游標所在之下一行連接至游標該行的後面。
+ C7 o4 S; \. q1 l* |       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式8 Y6 m2 s1 n- l3 J& M
       (可利用a、i等指令)再按《Enter》即可。2 u& ]8 p4 w4 m  v+ }8 v* ~
! ]! u/ }" P+ s$ ?
10.環境的設定
: ], a& |. |6 V       :setnu                設定資料的行號。
9 U5 P* B  P: \8 E       :setnonu              取消行號設定。3 s% o' _, G; g5 a4 [6 w+ x9 F
       :setai                自動內縮。
4 U# l- r4 u5 q( p$ c- j2 g' L1 W       :setnoai              取消自動內縮。  o3 W; x0 w7 Q" F1 ]& y) v" C
       自動內縮(automatic indentation)2 [: Y8 p, Q' `4 b. M
       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
# b8 ?" Z7 H/ \3 e       動內縮的功能,用下例解釋之:/ R; i. p2 M- w! B
       ‧vi test9 h! V" w& s' l& g7 L9 B
       ‧(進入編輯視窗後)  p" ~( P0 R* Q* A
         this is the test for auto indent
( b; l, n) E, `9 i6 U2 g  z         《Tab》start indent           ← :set ai (設自動內縮)3 z8 U/ L( c" P
         《Tab》data0 Q2 H4 E2 f1 d2 a& q
         《Tab》data% T, D7 }) v6 H; R) O
         《Tab》data                   ← :set noai (取消自動內縮): A8 N$ [( d$ r
       the end of auto indent.. X0 t- l/ z7 r0 u0 l: ^! R5 j
       ‧註:<Ctrl><d>可刪除《Tab》字元。; Z+ X# A7 {! {
- p+ W& k9 E( M6 B1 i, [
11.ex指令3 n6 k: z* i7 @. X8 v
       讀寫資料
, E1 t" Q: D1 x, |) a. [$ u       :w                     將緩衝區的資料寫入磁碟中。
: p2 {. N9 K! c; C       :10,20wtest   將第10行至第20行的資料寫入test檔案。6 |9 q# n% \# A( @+ G
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。: \$ ]( j. U. d3 c) _2 K
       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
, B5 w+ |; r2 w: c/ i7 \       刪除、複製及搬移9 x* K2 U4 r- t' Z' c  V+ l
       :10,20d                刪除第10行至第20行的資料。5 q7 u# G$ u6 Y7 j- T, S, k  d# c
       :10d                   刪除第10行的資料。% T- M- E  U) p& \0 P: o' |! q
       :%d                    刪除整個編輯緩衝區。" _1 ], c; _+ m* M8 D+ r
       :10,20co30             將第10行至第20行的資料複製至第30行之後。
, e. O& D" b0 z. w5 n3 m( ?       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。
- Y. Z- O1 A& x9 X% N$ Z) ]       字串搜尋與取代
+ ]# i9 H3 m5 j4 X       s(substitute)指令可搜尋某行列範圍。7 h. d( d& n# ?+ F8 E
       g(global)指令則可搜尋整個編輯緩衝區的資料。! r% \, a! P$ \* I, F$ S
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條. u* e0 M: F( v5 w
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
8 m! N: K( N9 p- L0 Y       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。; Q8 j6 ^$ i2 w7 w+ \/ E
       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。% m: e6 j: }/ A  O0 T7 w" w- a3 |1 n) A
       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。) u' t' `& X/ C) j: E8 m
( Y8 k% n. F% v; }
12.恢復編輯時被中斷的檔案
+ N- ~, A4 n/ R! o       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未$ x- @& P# w' u* h
       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前1 f( R; O, ]  G) }' s6 R
       的檔案內容。5 B1 Y' G0 X+ O) b! D
       %vi -r filename
, t/ a& i2 b5 U$ M- P$ [( V- l! O0 u8 e8 ?0 a; ^1 Z( L/ @
13.編輯多個檔案; C9 a& k3 g6 Q' ]* W4 C
       vi亦提供同時編輯多個檔案的功能,方法如下:# G- I+ ]4 `/ P+ r; J" h
       %vi file1 file2 ..1 s2 L; n: e, X4 n
       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
, `; x: G4 R* Y2 Z% B       再利用 『:n』載入下一個檔案。+ A& N5 r( P6 A- e# M. {
) m  i, W  D$ v) D. _3 p4 Z% v
參考:
9 P) j! Z& K$ }& x
$ z- Q2 O+ S2 u: ahttp://chunchaichang.blogspot.tw/2010/08/vim-s.html; y& [. c& _: X2 U
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則



中文酷站排行榜

本區塊內容依據『電腦網路內容分級處理辦法』為限制級網站,限定年滿18歲以上或達當地國家法定年齡人士方可進入,且願接受本站各項條款,未滿18歲 謝絕進入瀏覽。為防範未滿18歲之未成年網友瀏覽網路上限制級內容的圖文資訊,建議您可進行網路內容分級組織ICRA分級服務的安裝與設定。 (為還給愛護 本站的網友一個純淨的論壇環境,本站設有管理員)

QQ|小黑屋|手機板| 52AV手機A片王

GMT+8, 2024-12-25 15:12 , Processed in 0.066919 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表