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

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

作者: IT_man    時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
0 v' R- L9 y) E" ?/ N  H! M
5 e$ ]4 w( T' k: [$ P  pvi指令說明(完整版)# T4 E, J. ^4 k, E! s% c8 D6 E


  f5 W( c( n6 m( `, Q( Z8 a

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



1 j* Y  _9 y( p1 x0 Z1 [       如何進入輸入模式
, j& a& W! @3 A& g! j7 G                a (append)    由游標之後加入資料。
# p* B4 k7 v( b                A                   由該行之末加入資料。
4 r4 S3 I# U4 W  I# `- H) [                i (insert)        由游標之前加入資料。( [& ]# x- Y9 f3 [$ E, V8 f
                I                   由該行之首加入資料。
  S& A1 m; M4 b( J' @1 o: z                o (open)       新增一行於該行之下供輸入資料之用。( ]# c: u9 H% j. t+ C3 N. v$ ^
                O                  新增一行於該行之上供輸入資料之用。
. W6 ~" o2 O& V* \3 k       如何離開輸入模式1 Z' m! n9 ?( }
             《ESC》          結束輸入模式。% z, }5 y" X/ ^  ~( o4 H


  `& i8 f7 ?, A9 V: @% {6 x! d1.游標之移動
) s4 P5 [2 \6 U( r# M' E              h       向左移一個字元。3 i9 `( t" F( R7 W' F9 D) a5 h: |
              j       向上移一個字元。4 p" S9 I/ T5 A8 b0 X$ Z6 {
              k       向下移一個字元。
, p/ O6 j5 J  w: V7 _              l       向右移一個字元。9 P: i9 y/ W+ F  m1 X- b9 H
              0       移至該行之首5 w( n: p( H  j  \- r! G
              $       移至該行之末。
3 `, R3 [6 w' M& R6 k5 t              ^       移至該行的第一個字元處。3 d) B" O/ ]& p% j& Q' l3 v& T
              H       移至視窗的第一列。
3 j' T" a  }5 D) a% k7 _5 K              M       移至視窗的中間那列。
0 q' ~7 O! e, t% l4 C) Y              L       移至視窗的最後一列。
, I% F' ]3 n4 k  k5 S             G       移至該檔案的最後一列。: Q& N1 p+ t; Y$ R4 c4 _5 Y
             +       移至下一列的第一個字元處。' p5 W4 R1 d. y2 P0 L
             -       移至上一列的第一個字元處。! [, _$ d4 A. t4 Q8 a2 @+ `2 k
             (       移至該句之首。 (註一)
  r0 x/ ~% a' }             )       移至該句之末。
# ^  t# U9 u$ S. Q1 E# T' }             {       移至該段落之首。 (註二)
2 H) l9 D8 s9 j( B2 a+ n# ~2 |             }       移至該段落之末。
% f9 j, Z& ]1 X9 D6 ], I5 g2 x* i" _             nG      移至該檔案的第 n 列。' G8 P/ F  }& G9 I5 F+ J
             n+      移至游標所在位置之後的第 n 列。
3 z6 U/ \8 Q1 ?, c. l             n-      移至游標所在位置之前的第 n 列。7 y& Y0 J9 Q4 L" p
            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
" j  k+ C" _% o) @# a5 S  C* x            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
% g4 v" q  i, g$ ~* T; ~5 r            註二:段落(paragraph)在vi中是指以空白行隔開的文字。3 V) [9 w% z5 i/ R
) u7 f3 d  Z2 f) o! _& \
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。2 X$ Z/ B& Y0 J1 h! d; I4 }
           <Ctrl><b>       視窗往上捲一頁。
6 O/ n  I( b& H3 \" |           <Ctrl><d>       視窗往下捲半頁。4 I1 t6 ]& o+ B/ S: q
           <Ctrl><u>       視窗往上捲半頁。' a" \' H7 _5 I, L: K8 W; @; N: `
           <Ctrl><e>       視窗往下捲一行。
. `8 j! V. C9 k           <Ctrl><y>       視窗往上捲一行。& u$ M6 n6 p3 w  o, S! _' z
( n: D; \+ P# [& X+ s/ y) y
3.刪除、複製及修改指令介紹 (此單元較少使用): g7 L( w) Z" V9 d2 }% a8 Y7 @
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:1 z  L2 S9 H- R, A) q
       Operator + Scope = command% {+ }9 n' c6 i2 f8 \6 N# L: _; Y
       (運算子)   (範圍)
- ^7 B9 S" j0 B% @' @       運算子:
, L  ^3 m. D7 F8 T; _- v6 f       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。* v5 m6 }# F/ r2 T$ S# {: R. E6 {
       y       將資料(字組、行列、句子或段落)複製到緩衝區。
) T' l. x( c! W: ^" P  |       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資* R7 b6 c7 D4 F5 u
                料放置於游標所在位置之行列下。
' v5 ?0 C& f9 w! l       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句4 b% h; B, \6 D6 Q  i, r: P. f) R
                子等之資料,並插入新鍵資料。0 p4 |8 ~! }. J$ G; Q
       範圍:
2 T4 a1 ~  A+ u$ V! p       e       由游標所在位置至該字串的最後一個字元。
2 ^1 d5 U7 _6 \2 h9 r- s3 R& l1 t       w       由游標所在位置至下一個字串的第一個字元。, o7 e  M( n) Y5 N
       b       由游標所在位置至前一個字串的第一個字元。
: n- y5 n+ T7 M1 n; v' p1 n       $       由游標所在位置至該行的最後一個字元。
. d9 w  k. R+ c       0       由游標所在位置至該行的第一個字元。# @/ \, l: ~- F1 n9 }: S  [2 h  A
       )       由游標所在位置至下一個句子的第一個字元。
% e6 t+ }& P" m& k3 A- O3 v       (       由游標所在位置至該句子的第一個字元。1 m6 F9 @( B4 m% x; q
       {       由游標所在位置至該段落的最後一個字元。; Q  _) [4 T2 g* ^8 r
       }       由游標所在位置至該段落的第一個字元。
! M# _8 Q0 q# O       整行動作
- K, r' e" S/ B4 Z9 d       dd      刪除整行。7 H( w" l8 `  \) ?% P1 r
       D       以行為單位,刪除游標後之所有字元。# Y  }9 Y+ r+ D" r
       cc      修改整行的內容。7 b5 A3 L7 R" M% G* O) j* k
       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
# w; `0 P( Q! _6 O$ S( V: S, t8 V/ a! Z" R
4.刪除與修改" \  Z! j9 D9 u4 f# J
       x       刪除游標所在該字元。$ Q2 ?6 }. r9 f
       X       刪除游標所在之前一字元。
  X' Q& o$ s; v0 }# E       dd      刪除游標所在該行。/ T' m! I0 C; e" \* J6 H  i8 f
       r       用接於此指令之後的字元取代(replace)游標所在字元。- {1 M- Q* U( `5 X& N
                如: ra 將游標所在字元以 a 取代之。+ X5 ~5 v2 U, s; S
       R       進入取代狀態,直到《ESC》為止。
+ x# S4 C7 Q* z# r       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
  ?" v! ^. g$ R" Z) a8 [/ t. i       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。9 d* K% k# I# L; z

% O+ _3 I) d$ w& Y. @- M5.搬移與複製
1 [/ J; m' n5 i+ T  A! n* y3 k       利用delete 及 put 指令可完成資料搬移之目的。. t- }, N! O" h& x, s) W3 G& i* I
       利用yank 及 put 指令可完成資料複製之目的。
+ \5 E# A9 W) |) H( J. c9 W       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
) W+ @) Q4 p; E" [1 M8 J2 L4 F' W$ q% b       可將緩衝區內的資料複製到螢幕上。+ G9 K) V  U; Z: f$ {' f, U
       例:, \3 u4 j6 {: W+ U. ^3 [
       搬移一行        ‧在該行執行 dd! E; P- j. P, V# n6 v
                        ‧游標移至目的地
6 }% e$ j& p5 T+ D                        ‧執行 p
$ \% T8 b3 N$ {* V* B* A8 \5 C6 N       複製一行        ‧在該行執行 yy( z1 {: W  S4 f& }
                        ‧游標移至目的地
& r" i7 i, z% D                        ‧執行 p
& q6 w! q8 g7 G3 b4 f5 r. m. R- H' i' s' V! K( S
6.指令重複7 [) n% s2 b3 _2 c. u! j$ W
       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n" Z4 f# J: ^: h) v, D1 r
       次。3 ?1 ?  Q) x* O. K" }
       例:' l) T$ B, w. ]9 D' `) ]3 u
       刪除10行                ‧10dd
2 Z8 i) h9 h' l6 w1 _       複製10行                ‧10yy2 Q4 \7 P8 q9 c, i4 Z
                                ‧游標移至目的地5 s) E  l6 q  E* x+ [+ L  o
                                ‧p
2 w! C1 H! J' F0 ?" P; S* N8 F       指標往下移10行 ‧10j0 D* X4 p1 z* k) P* q4 w- S
3 f2 B+ w4 M3 ^( T# Y9 ?" F
7.取消前一動作(Undo)7 M. I; u: N: I% X" m
       即復原執行上一指令前的內容。7 a2 ]( e, q3 y! Y, v! E' A
       u       恢復最後一個指令之前的結果。4 V* B/ [1 ~; C: M9 Z5 U) s. j
       U       恢復游標該行之所有改變。
. Y/ ]2 p" q! E7 X# ]# i0 ]) Y/ R1 x' Q3 ^
8.搜尋
; G+ |( f. W. g5 T       在vi中可搜尋某一字串,使游標移至該處。# h; d$ T* u  [0 @  B
       /字串           往游標之後尋找該字串。
' X+ y" F$ x; G* h- \       ?字串           往游標之前尋找該字串。) P3 k7 ~6 J$ F( x5 ^' X" ~' L
       n               往下繼續尋找下一個相同的字串。* ^* c5 f3 N/ G. K. a% H4 u$ a; f
       N               往上繼續尋找下一個相同的字串。
6 c# j# H0 t$ [9 ]0 S; D( o7 O% g
9.資料的連接
4 F% j5 t% d4 R8 z. f& e       J       句子的連接。將游標所在之下一行連接至游標該行的後面。
+ j5 X: }% Q% I2 v( m* ^* J       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
: y& v1 d- y# K5 L' J, ?4 N2 T       (可利用a、i等指令)再按《Enter》即可。
1 N9 y- c1 L7 ^5 B) @
* p' j9 J/ M, F$ l6 B7 G. ~% T10.環境的設定1 m) Q# I; {0 \  e
       :setnu                設定資料的行號。' e/ q6 M; K% ?3 U$ r2 _# }, d
       :setnonu              取消行號設定。
/ X! d2 f6 U7 g9 ?  w6 l$ |# I       :setai                自動內縮。+ W* Z5 p% u  c. R
       :setnoai              取消自動內縮。
: a# U; D- Z, r! F' B0 P. b       自動內縮(automatic indentation)
) O+ C) \# C* W2 e  M! f       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自# d' Y% D& D6 b6 T$ \, `7 l
       動內縮的功能,用下例解釋之:/ e1 n9 J  v/ G: b- ^' ]
       ‧vi test
1 R' n4 d8 B: f5 D       ‧(進入編輯視窗後)
* D& w* h% Q& |% |         this is the test for auto indent+ m& G0 }, \0 R; {
         《Tab》start indent           ← :set ai (設自動內縮)/ G2 I+ ?$ ~$ ~" C5 u
         《Tab》data
; j% Y& @$ J1 e' t- ~         《Tab》data
2 [( k3 b$ L7 P3 J1 B& Z! b         《Tab》data                   ← :set noai (取消自動內縮)" `# o/ p4 E/ u( M: d, L( O2 ^4 r
       the end of auto indent.
* Q+ o' P0 g" ?: s, ?# Q9 ^       ‧註:<Ctrl><d>可刪除《Tab》字元。9 r3 H% l) l0 G8 f3 E& F

! e" _) a/ N7 G4 C2 z" v11.ex指令
4 D# v5 L6 E4 P       讀寫資料0 p- N9 _& N# e5 @& L7 D
       :w                     將緩衝區的資料寫入磁碟中。5 E& k) s3 p7 l" ]7 @) w% c
       :10,20wtest   將第10行至第20行的資料寫入test檔案。8 E3 n: ^0 V9 K
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。
% H" d( E' b, G' g6 _0 P       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
+ P0 r, E; I# z$ C, B: n       刪除、複製及搬移" a! o+ s) s- ~# x0 [
       :10,20d                刪除第10行至第20行的資料。& y1 O. U. C8 y) \6 x5 W6 D* Z
       :10d                   刪除第10行的資料。0 s* `9 i' @7 T! c
       :%d                    刪除整個編輯緩衝區。' {% r6 i, ~) I2 |$ l
       :10,20co30             將第10行至第20行的資料複製至第30行之後。
1 W% {# Y0 Y3 K- O       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。1 t  c/ w8 V# W+ y
       字串搜尋與取代- a6 K( J( o0 Z0 e4 p7 b( C8 t: j
       s(substitute)指令可搜尋某行列範圍。: n. v- \4 V( f  @- ^8 t6 @
       g(global)指令則可搜尋整個編輯緩衝區的資料。2 @2 p0 [) p5 k
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
; N) |+ `% ^+ @- ]! {% C/ X       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
0 M6 k) v8 E+ w9 e       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。0 g0 K3 V9 f, [- p( Y" b
       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。
" U5 `7 {/ j# w8 ]* h, T       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。
0 ], o' p/ ~( n7 X+ G$ `7 U) w9 h% K: \0 n4 d& N
12.恢復編輯時被中斷的檔案
' h4 \1 D) x$ D       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
; ?& |" i& v. u7 }$ h4 |5 {       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
0 n" N; h/ K2 i8 |       的檔案內容。; s/ X+ A( \: n) T$ W
       %vi -r filename
. o* }  h( ~/ `9 m' m
9 H- h: x% i0 B) v13.編輯多個檔案
5 s8 L0 B! d7 Y! `- x/ C, t       vi亦提供同時編輯多個檔案的功能,方法如下:
4 E# r; U2 C4 M: I2 ?       %vi file1 file2 ..  ], t$ r" t0 v3 ~" ^- E9 o
       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
% I( ?) c4 s4 q+ o       再利用 『:n』載入下一個檔案。5 Z. d; m8 G; B. ]
1 K4 v( Z: l, o, ]4 s
參考:
6 v0 n1 k8 f3 i  y( S
6 \" p' b, h+ ]4 T; {http://chunchaichang.blogspot.tw/2010/08/vim-s.html3 l5 ~, F1 X$ A% d2 M! d" I





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