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

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

作者: IT_man    時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
6 ?& c5 y. @- j  j7 ]) K
7 `# G+ ]  d5 W6 K# gvi指令說明(完整版)
5 l; F, ~8 h) i" d5 g. D

, p6 e& J/ n& D  z

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



) K- ?0 \5 J/ l+ n       如何進入輸入模式
! o: U/ M! \. X& G7 e& N                a (append)    由游標之後加入資料。
" V8 ~3 b4 [( T& A5 ?2 Q2 U                A                   由該行之末加入資料。3 u  W' n! l$ x; w3 [, \
                i (insert)        由游標之前加入資料。: f6 s, B6 `1 {- C  h
                I                   由該行之首加入資料。
) Z9 ^0 S+ J0 e2 D7 L                o (open)       新增一行於該行之下供輸入資料之用。; W/ W1 y+ [% Y) A
                O                  新增一行於該行之上供輸入資料之用。3 G0 L- Q' j/ |
       如何離開輸入模式
3 C" w* S- N  |; ?+ G  S' L             《ESC》          結束輸入模式。! v" A7 o9 h" w6 y- G

8 P$ \7 Y1 g8 n$ @4 a4 t. Y
1.游標之移動
- X& E4 `; v1 t  k              h       向左移一個字元。
2 M4 R- l9 Z5 D/ B9 F) E              j       向上移一個字元。
) i& G8 A& l$ ]$ B              k       向下移一個字元。9 K" d' U  A- b4 A6 x: ], A
              l       向右移一個字元。! ^8 c( P. A/ |, o) Y
              0       移至該行之首
- Q  \- _  F, i5 G; G2 q              $       移至該行之末。
4 K) P2 j+ @2 t3 W/ U              ^       移至該行的第一個字元處。6 }, {% j1 t& V4 z' n* y
              H       移至視窗的第一列。
9 W3 g1 R5 X; \, a' ?              M       移至視窗的中間那列。
9 S; l( n7 a4 h0 H  o2 i              L       移至視窗的最後一列。5 V  a+ I, m! L: ~6 s5 x' J
             G       移至該檔案的最後一列。
+ P1 H5 e5 u% ?. j* m  L" N( T- ?7 e             +       移至下一列的第一個字元處。
+ Y9 u; k! l! l, \7 ^) w9 l' z             -       移至上一列的第一個字元處。9 u& N; f# `# T1 S8 ?0 W+ u
             (       移至該句之首。 (註一)
* ^+ v9 u$ O( o2 O" I             )       移至該句之末。
/ p5 o& Y/ C; n9 |4 V( f# U! w  z3 g             {       移至該段落之首。 (註二), M' Q4 A. o# i
             }       移至該段落之末。
; @- \# C5 o1 l1 _9 s. `, l             nG      移至該檔案的第 n 列。
  e) _* b/ P: B- @0 f9 C, G6 m             n+      移至游標所在位置之後的第 n 列。
: m" ~# j- O3 D" ?& L             n-      移至游標所在位置之前的第 n 列。
5 G; S4 t. \3 k4 V            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。* w0 E$ B# g4 N8 E% N( M# A
            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
6 |) G" J5 T, G+ t. u9 |            註二:段落(paragraph)在vi中是指以空白行隔開的文字。' T; @* b( g4 b/ |" e7 K% x: O
! l# m9 i2 S# U/ v% q1 l* J
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。9 I; ^$ `" j! C- Z: S3 P5 T7 y9 `
           <Ctrl><b>       視窗往上捲一頁。9 ~) q) F* O3 O5 {4 N9 y2 Q
           <Ctrl><d>       視窗往下捲半頁。
2 ^" y0 U$ o* l6 X( H5 l           <Ctrl><u>       視窗往上捲半頁。
8 F+ i6 @0 ^  J$ Y- `# ~$ I; u) Z           <Ctrl><e>       視窗往下捲一行。
1 H7 Q$ T& w+ Z) g5 ?, ^' q           <Ctrl><y>       視窗往上捲一行。* ]2 k* J& g* L* r
8 v' B4 y6 ?3 \% |) u
3.刪除、複製及修改指令介紹 (此單元較少使用)* E* j( Y/ s% w, F1 L+ }, V& V0 `
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
" V1 L6 J% ^2 r7 r       Operator + Scope = command& n/ }; H3 f0 A5 ^
       (運算子)   (範圍)! g2 ~* e# j; U# j
       運算子:
. v8 j$ h) e7 o7 e3 j7 U1 ?9 h       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
: r$ ~4 A8 m# k4 Q       y       將資料(字組、行列、句子或段落)複製到緩衝區。
. @1 E; B+ `) R       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資9 Q7 P0 G( J: a: p
                料放置於游標所在位置之行列下。. i8 ]. S. o: F/ l
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句4 k- U8 o1 Q0 I. g, M4 _2 j
                子等之資料,並插入新鍵資料。" ^: \) P& M; f% y7 K9 f, F  m
       範圍:
; q6 y- y; N; u: v+ @: Y       e       由游標所在位置至該字串的最後一個字元。4 S  r( u$ _* U1 P
       w       由游標所在位置至下一個字串的第一個字元。0 J" G& P& n3 G+ e$ w6 ^
       b       由游標所在位置至前一個字串的第一個字元。* f& q0 @" s$ o: N6 W7 Q3 a
       $       由游標所在位置至該行的最後一個字元。
( J) J7 M4 x) N8 W) l       0       由游標所在位置至該行的第一個字元。
/ c* {$ h# u6 x       )       由游標所在位置至下一個句子的第一個字元。
& w/ R4 J+ Q3 k6 e; V0 \( `# [       (       由游標所在位置至該句子的第一個字元。' |# `- d" Q2 H  R0 n
       {       由游標所在位置至該段落的最後一個字元。2 M3 M+ e8 I  s- {/ F- ]
       }       由游標所在位置至該段落的第一個字元。
& k9 r3 W' x) M8 W, ^, n3 j       整行動作% m  A0 Y+ J5 J+ x
       dd      刪除整行。
  j- A( `- h) [  i       D       以行為單位,刪除游標後之所有字元。; _7 f' q, v# Y
       cc      修改整行的內容。
4 @4 ~9 G1 C9 b. k. @& p) S1 @       yy      yank整行,使游標所在該行複製到記憶體緩衝區。- K- @+ y! s3 K& i  @
+ ~2 d7 o- v1 E5 w3 N
4.刪除與修改
& F7 c/ J, V7 p$ Z0 R9 o       x       刪除游標所在該字元。7 n2 P* Y8 h# O
       X       刪除游標所在之前一字元。
2 U1 P" V  K. @       dd      刪除游標所在該行。
9 S* R- u4 O* W7 m) ?       r       用接於此指令之後的字元取代(replace)游標所在字元。
3 n- l7 O. m1 r! z8 ?                如: ra 將游標所在字元以 a 取代之。
. L& U  Z  ]8 s       R       進入取代狀態,直到《ESC》為止。
. G' N  W; D* A7 o- L4 z8 R       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
- |( s7 S1 v/ c4 L       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。
$ [4 ~4 s& u5 |; P! L- x% C8 V- b/ r( T2 P, c! Z* r
5.搬移與複製6 z8 u& p# ^7 V( w
       利用delete 及 put 指令可完成資料搬移之目的。4 r2 `7 D/ Y8 o0 M4 \
       利用yank 及 put 指令可完成資料複製之目的。) E9 @& i: Y8 k8 T" @% [
       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
; {3 s& R$ \% y8 @# h       可將緩衝區內的資料複製到螢幕上。
8 q& w# r* D, ~       例:
5 g4 v) g+ i- \- X9 v       搬移一行        ‧在該行執行 dd
+ B) }: |' h$ F1 ^: e6 T                        ‧游標移至目的地7 x5 V$ l+ \" R2 s% O# `( t0 Y+ J
                        ‧執行 p; G6 o( m( G  c) [+ w3 l# A/ W
       複製一行        ‧在該行執行 yy
( w5 g# H6 l4 T/ J- \, A' a; O                        ‧游標移至目的地2 b4 }& j2 k( [9 m% P; F
                        ‧執行 p5 K& Y+ G0 P+ f) m: H/ c* e

$ O. J+ y8 W* y$ ]6.指令重複
( _* i' Z7 A) f8 {" |- u  D) k1 b       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n0 a& i3 g8 w4 q$ i' c1 @
       次。/ q5 H3 W# t( H
       例:' Q4 b. v/ g7 C! H$ q
       刪除10行                ‧10dd
: {8 d' d# w1 O% X, F$ x) _  O       複製10行                ‧10yy
# \! @, M8 C3 g# N7 g# A- y                                ‧游標移至目的地
* l  z1 p, Z, {. h0 J                                ‧p8 i8 {4 Y' g* _7 m7 f' F
       指標往下移10行 ‧10j
! a4 d9 X) j0 k  n' P6 W! t( T( w5 t; h; a, e* m
7.取消前一動作(Undo)3 N% W8 U2 p" I, l' j4 t; f
       即復原執行上一指令前的內容。5 U& Y8 w$ s% u8 Y+ t( ~3 [/ p
       u       恢復最後一個指令之前的結果。
2 j) s6 |5 M' h* b! x9 {       U       恢復游標該行之所有改變。$ L, s2 M( T- m3 x: d& I
0 D( h2 Q* F4 K8 f( \" l  w$ _
8.搜尋7 V" e: @- p, |( B' Y
       在vi中可搜尋某一字串,使游標移至該處。+ F4 U7 O/ s( X7 a% u
       /字串           往游標之後尋找該字串。
% l' _, C0 z1 F( l       ?字串           往游標之前尋找該字串。# e9 r8 b- L6 m0 |- Z. ]7 _
       n               往下繼續尋找下一個相同的字串。9 C, Z6 R0 X7 ]4 E
       N               往上繼續尋找下一個相同的字串。* k1 S" o0 v3 Q0 `& ]
6 X* J! G# w7 c5 T2 _# K
9.資料的連接
& w2 e4 b; ?" h; Z3 v6 P8 x       J       句子的連接。將游標所在之下一行連接至游標該行的後面。
3 w( s; t' H) Q" @, O       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式  W; Z8 T$ e) R& ^2 c
       (可利用a、i等指令)再按《Enter》即可。
4 B. s" C# E% }8 I1 |1 `1 q  Q& O6 ~5 W, Q" W- p
10.環境的設定
2 ]! b9 Q) N, c2 n& r# A       :setnu                設定資料的行號。
- p3 g/ x' T' o+ U! J" D4 O       :setnonu              取消行號設定。8 v4 m% `2 y, k6 T: G6 n' n
       :setai                自動內縮。9 S! [  c% X* B7 S8 l. }  Y
       :setnoai              取消自動內縮。
9 S. P- {& K  s. W* [& y       自動內縮(automatic indentation)- j% `! I/ D( b( G; V* n
       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自  ^- u  b; p) J3 v: n: c+ x% R
       動內縮的功能,用下例解釋之:8 y' Y+ q4 }' E; @# H
       ‧vi test
% p) X1 c5 s4 Z( f. s, |) {7 Y       ‧(進入編輯視窗後)  h( n# R& N% \4 e$ M5 B
         this is the test for auto indent
8 l2 M" ~: l+ M# @/ A         《Tab》start indent           ← :set ai (設自動內縮)
; [$ j! F2 v4 f         《Tab》data
( Q, Y0 Q+ \( }& V* H( a         《Tab》data
. L# _# U4 E" w/ I; [* w  h( \         《Tab》data                   ← :set noai (取消自動內縮). J* C4 ]& N5 A: a
       the end of auto indent.
/ I) b; ^- F4 _. e; C" R& `       ‧註:<Ctrl><d>可刪除《Tab》字元。2 u; S% W& E. m$ t0 I

1 h$ H* |, R2 A/ \# N& Y2 H4 s11.ex指令5 g. O  N/ h$ B* Y- \+ _; }
       讀寫資料
# R; y  `" Z* w( A1 I! J! m       :w                     將緩衝區的資料寫入磁碟中。
+ a" T+ k, t; A/ l  a8 M       :10,20wtest   將第10行至第20行的資料寫入test檔案。$ W: a7 p: }+ b: N1 K2 c
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。
  `% N. @2 p1 n: }       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
3 g( U# W2 K4 u9 r1 H       刪除、複製及搬移
! w0 u# X0 K) L/ w1 H) r2 g7 k       :10,20d                刪除第10行至第20行的資料。
+ w: `" p$ I; t) Z1 a4 I- Q       :10d                   刪除第10行的資料。2 R& V1 u4 r" H
       :%d                    刪除整個編輯緩衝區。
  e/ S# `- ~6 w8 l- I- U       :10,20co30             將第10行至第20行的資料複製至第30行之後。
$ B; m2 P1 F: L1 r# N       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。
1 h; ]! N9 c. }5 I% J+ t) a       字串搜尋與取代. i/ l9 C! R& m# P: C' M8 F6 V+ D4 ^
       s(substitute)指令可搜尋某行列範圍。
" u, B3 d: Z" o       g(global)指令則可搜尋整個編輯緩衝區的資料。6 v6 ~: U6 q1 G# Q) H+ j
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條* b3 P  D$ _# C& j1 z3 J
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。2 f9 S9 k3 z) r  e; W9 d
       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
* k# G; w) W! u# R+ q+ U" i       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。
7 ]  J+ F3 n6 X3 p: C$ z       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。
: a4 m* q% t3 \. i( J' ?# I+ {" B! Q( i  k- ?; B+ G. f, \0 j
12.恢復編輯時被中斷的檔案  a" n: O9 m6 v1 T7 L/ M. r" A& O
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
( l9 x' g, Q# K3 L- J       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
' i" \# }8 n; M$ E- f       的檔案內容。, u3 `4 K( c+ d& {$ x
       %vi -r filename
8 d( d5 y# d9 x; v  ~0 h" o8 y+ F, X0 G- C: F# w
13.編輯多個檔案
. j0 T% w" e! |* \% I) N3 X5 S5 ~9 x       vi亦提供同時編輯多個檔案的功能,方法如下:2 f; {& D  O. Q1 Y) }" y
       %vi file1 file2 ..
* Z4 d% G* M9 ]* t       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後& f" I! k  s) p, Y* Q
       再利用 『:n』載入下一個檔案。9 j' z- p' a' T& j) H1 O
. W3 D! {3 V+ `: S( E' q
參考:
& \" x. h; V4 L  C) I1 K8 {8 M" ]
http://chunchaichang.blogspot.tw/2010/08/vim-s.html
7 ^6 d/ E0 I5 K$ u! V




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