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

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

作者: IT_man    時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯 3 z8 ]# `* L+ j( Y1 b
7 Z: a7 w% I: _4 |1 u: ^' {
vi指令說明(完整版)
$ V- n+ T) \0 }
3 v6 l# J" C' Z

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



+ Y$ \4 u8 R" u. a       如何進入輸入模式6 K, d% z9 i2 e# A& Y* L
                a (append)    由游標之後加入資料。( i8 e: `0 O+ p- F8 z+ k
                A                   由該行之末加入資料。
) m% Q3 z0 ?! x0 R2 }# x                i (insert)        由游標之前加入資料。& m3 d' Q7 O$ _: q5 _! n
                I                   由該行之首加入資料。
! P- P6 k8 Z  d% j2 V) R: k                o (open)       新增一行於該行之下供輸入資料之用。4 X9 |6 i/ T& R' @& H5 G; x
                O                  新增一行於該行之上供輸入資料之用。! B( o$ n8 Z) ~: h" r; S
       如何離開輸入模式
. M# F9 r% a: M8 Y             《ESC》          結束輸入模式。$ G% B, W  b# k" b

. K5 l) L% f) Y* R1 b, q& `
1.游標之移動
8 J' r. t6 }1 H: A5 F! G% m              h       向左移一個字元。
% a. a5 {. q4 Y! \2 _0 _4 L              j       向上移一個字元。
  c" z1 Y5 ?: w: x$ D/ `8 o              k       向下移一個字元。
) s. j/ I2 U# ~: m              l       向右移一個字元。
4 `' u% l' ]" \; R: q  q. h              0       移至該行之首
' s0 \3 L$ V( O& a& A              $       移至該行之末。
# j8 J# o9 b8 B& S/ U1 g% X  ^              ^       移至該行的第一個字元處。* e% j& @' \, ^& V9 S
              H       移至視窗的第一列。
7 n* h# B9 Q* _, D              M       移至視窗的中間那列。/ J8 P; w  W4 @
              L       移至視窗的最後一列。
# L& i5 |: H" k1 H             G       移至該檔案的最後一列。
+ ]5 y$ t+ J5 Z% K+ m# C9 t             +       移至下一列的第一個字元處。, G* P' S3 N7 g  |: k$ x  ?
             -       移至上一列的第一個字元處。
# L9 M+ H8 ^8 T- W1 V             (       移至該句之首。 (註一)( n- A( ]5 X( I& R( K  H$ j6 N
             )       移至該句之末。  w) d8 h1 \  p
             {       移至該段落之首。 (註二)
0 q8 M( J0 @7 m. {& ^& r6 @+ r             }       移至該段落之末。
3 \+ I+ M6 v0 O7 C" V             nG      移至該檔案的第 n 列。: t1 S& e4 v( n
             n+      移至游標所在位置之後的第 n 列。
. j& h6 H. C& c1 g             n-      移至游標所在位置之前的第 n 列。
# G# d  ~: G9 X( n: [            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
9 ]9 n1 X6 u, r, `+ ~- c' E- z5 Z            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
/ Y* j9 j' x* K: {* i  B: [            註二:段落(paragraph)在vi中是指以空白行隔開的文字。0 d) Y8 e) V5 J4 M' `( p# c
' y+ b/ s8 r& A/ u2 g* I
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。
: |" D: V" j) \- @' |           <Ctrl><b>       視窗往上捲一頁。- |5 m9 }0 K3 c8 C
           <Ctrl><d>       視窗往下捲半頁。! M5 B9 z. z  R5 @* p
           <Ctrl><u>       視窗往上捲半頁。/ a# s+ }7 M; M4 \! t  ]5 X
           <Ctrl><e>       視窗往下捲一行。
) s8 P. j1 @& r$ ?: K           <Ctrl><y>       視窗往上捲一行。
1 s7 M, q- A, I; I$ _) n1 k1 a% ~9 {7 h; q" O8 X1 K5 j
3.刪除、複製及修改指令介紹 (此單元較少使用)
& E, E* b& D5 |+ t       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:# {4 @; S) A' i: J: u  @& X
       Operator + Scope = command$ u, W/ h+ q: m
       (運算子)   (範圍)
5 ^8 c6 ^/ ^9 Q0 o) W* P6 @$ {! d' W       運算子:
- o8 B0 H% C& Q+ i1 A( {8 ]       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
( a, l; N/ c: P" o- I; g9 X& a       y       將資料(字組、行列、句子或段落)複製到緩衝區。
, \( P2 x) u9 k       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
0 J1 X$ [8 e/ W, P4 n                料放置於游標所在位置之行列下。7 r0 y% C  d: [
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
0 g" L/ o0 u. o4 h: B1 x/ {" @                子等之資料,並插入新鍵資料。
" Z& W( v4 {/ @0 y' a) n9 t5 ]       範圍:' |) Q' P" k/ s6 z! H( y
       e       由游標所在位置至該字串的最後一個字元。
  g4 @1 e1 a( s$ w$ ^       w       由游標所在位置至下一個字串的第一個字元。
* q9 a# o. P4 S2 ~. n  ~       b       由游標所在位置至前一個字串的第一個字元。3 E4 m2 [4 p& e+ r
       $       由游標所在位置至該行的最後一個字元。" b  W/ ~* O0 {& M' i
       0       由游標所在位置至該行的第一個字元。
2 m1 }* {" y! ?: t. z( V0 [7 H       )       由游標所在位置至下一個句子的第一個字元。" m8 _8 @9 r! [/ q, N$ o
       (       由游標所在位置至該句子的第一個字元。
" f" _- m3 _8 z) d       {       由游標所在位置至該段落的最後一個字元。( J/ {4 N1 n5 W* o/ S' @9 J( Y
       }       由游標所在位置至該段落的第一個字元。
- w! X; Q" v3 X' E# M/ G: L$ D+ R       整行動作2 v6 W, a( f8 E6 R7 P2 n
       dd      刪除整行。
- _( j! Z5 i: @6 ~       D       以行為單位,刪除游標後之所有字元。! {. ~2 _' }4 z( i% L5 y& H" ]+ N
       cc      修改整行的內容。
) E, Z6 {( J2 R( P& `# k7 ]9 X       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
; s' w$ ^1 O- a2 N+ w) ]. L& {5 A6 K5 U( h  j* ^# s4 y
4.刪除與修改
2 W6 M0 T- G. k3 E* ^       x       刪除游標所在該字元。
- K% _3 f: \# G# Y. q% y2 ~       X       刪除游標所在之前一字元。9 G) c( Q4 I( [$ i7 s
       dd      刪除游標所在該行。
* Y3 |2 @9 E3 N# a7 I! R, m' U       r       用接於此指令之後的字元取代(replace)游標所在字元。9 h5 `1 G0 J' r% f6 r3 V1 D  D
                如: ra 將游標所在字元以 a 取代之。
1 O1 I5 K, ?3 F* }6 m       R       進入取代狀態,直到《ESC》為止。
7 P" H# b5 J3 _2 b       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。6 X4 }9 i1 j8 s7 ~9 y/ Q6 ~( T& U3 `
       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。: K% W5 s! ]* k4 s8 H1 @
! i. x3 y. ?, q8 E: B6 d
5.搬移與複製7 v5 s* [1 S* C
       利用delete 及 put 指令可完成資料搬移之目的。/ w2 e: I, W- H) U* y
       利用yank 及 put 指令可完成資料複製之目的。
% S5 D' ?8 r2 d, D' X5 {& \       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令4 t1 g" J: L( B& t& x+ E
       可將緩衝區內的資料複製到螢幕上。
0 k% N" m8 p0 R. Y) S       例:& _( O/ i- U9 F5 Y) w3 C( _
       搬移一行        ‧在該行執行 dd. z, `% y8 k2 a. V/ n9 }
                        ‧游標移至目的地0 f( h1 i9 [& P' [( O1 Y5 e
                        ‧執行 p/ \7 l! K1 R/ o: t2 X
       複製一行        ‧在該行執行 yy
5 t* O6 ^" P$ y0 N/ |! {! j3 ?                        ‧游標移至目的地
' H( y0 Z1 J! u) n6 @                        ‧執行 p7 g/ L2 G+ I" @& ~2 T

4 Z! F- T4 d9 |' ^! w  `8 J+ r6.指令重複
9 u: ~/ s4 m9 P4 j, }# X) l       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n1 [( }) x6 c. g) e( W$ G
       次。  z* q0 f( T, y/ [# I  S( Q! p
       例:+ j/ [6 t; q' H1 A. Y8 X0 Q4 w2 d
       刪除10行                ‧10dd! I, n* |5 e" j. A: N+ z$ s' p3 i
       複製10行                ‧10yy
- C1 B2 F( p" F                                ‧游標移至目的地$ z$ x% `- i$ ?3 N8 o4 R
                                ‧p$ S8 Z8 O3 |. E! n: ~. e
       指標往下移10行 ‧10j
  h0 H( O. r4 F- m! B7 s9 |
, {" g# h. M+ X  x7.取消前一動作(Undo)4 {  c& D" a# K- y; p1 [
       即復原執行上一指令前的內容。9 j, G: n; H& C' Q! }+ r
       u       恢復最後一個指令之前的結果。
9 c/ m9 y  l9 j/ J" E       U       恢復游標該行之所有改變。
* v- k  u! j. v: a! O0 c
* q2 C$ t8 ^3 Q4 r. Q8.搜尋
. P" }' ^. K$ [$ x       在vi中可搜尋某一字串,使游標移至該處。+ O: f& v" M( d! g
       /字串           往游標之後尋找該字串。  j1 {8 l$ f) S5 Y' t
       ?字串           往游標之前尋找該字串。
% ]; r, n( m% V       n               往下繼續尋找下一個相同的字串。% O6 j% F5 O' A% o
       N               往上繼續尋找下一個相同的字串。
3 {$ t* z  \$ c" q+ |1 T' b& ?
; ~) _  d) f- t" w, C  L9.資料的連接! q4 c# f* b$ H
       J       句子的連接。將游標所在之下一行連接至游標該行的後面。
) }. |* B9 `: k, Y       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
2 G5 m2 [6 \; d+ g       (可利用a、i等指令)再按《Enter》即可。
$ M5 f" U, C. D+ ~7 B  D2 A6 T4 v- h  E% e4 v6 d* |
10.環境的設定
% z" n$ L$ L4 t' w7 h       :setnu                設定資料的行號。
3 ~) M: d( ^- d7 b- T! J       :setnonu              取消行號設定。# u& r$ J& W" R  L
       :setai                自動內縮。
( t# o* S6 Z# X+ U% ]$ _       :setnoai              取消自動內縮。
4 v& D) ^4 s0 S! ]       自動內縮(automatic indentation)
' W2 [! S  n0 H8 ]" J* H9 l       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自- U: |% Y0 L. g( @; U3 _6 N
       動內縮的功能,用下例解釋之:1 D* @& B3 K& E# \# |( A
       ‧vi test  s. Q6 ?0 Q8 E/ Q. |
       ‧(進入編輯視窗後)
- ^" K" o* d* @         this is the test for auto indent( n5 B( S1 L2 y* A* s- _' w6 W
         《Tab》start indent           ← :set ai (設自動內縮)2 M8 y  ~# O) r2 B7 o
         《Tab》data# u! [+ U1 e5 b- m% \
         《Tab》data, T& d) h  V4 X) `4 ]
         《Tab》data                   ← :set noai (取消自動內縮)
, Z4 ]) f8 T: K  l; D/ G0 F       the end of auto indent.
4 O9 [  C, L/ w1 ]9 |1 X) ?5 \       ‧註:<Ctrl><d>可刪除《Tab》字元。# t5 Q8 l; Y- o% W: l6 W: |
; X) I3 y2 a. |9 h# H! R
11.ex指令- _0 A1 x+ H0 t5 M$ R
       讀寫資料
# L- H( J* C. ]# m6 S1 k5 V. c' o2 U       :w                     將緩衝區的資料寫入磁碟中。# b: b: b2 N! ^0 K8 c
       :10,20wtest   將第10行至第20行的資料寫入test檔案。1 ]! M! {! T" |$ c$ H; d/ U
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。
# I5 e( s1 j  o9 X4 b4 j       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
8 H  }, Z' |1 Y$ |4 ~! k       刪除、複製及搬移
% \, n: r/ H' X; t7 Q       :10,20d                刪除第10行至第20行的資料。
* [. e. T* s  v       :10d                   刪除第10行的資料。  A0 W$ N2 U( d* X. F2 X% O5 Z
       :%d                    刪除整個編輯緩衝區。
4 Z4 j/ i1 l: ~* L       :10,20co30             將第10行至第20行的資料複製至第30行之後。
6 T5 b2 t' M" T  j& ?$ ^       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。
2 b/ h4 }" |5 B; e       字串搜尋與取代$ _: h2 P- m- [6 `
       s(substitute)指令可搜尋某行列範圍。
9 r$ s# ^, n+ I8 T# U$ Y       g(global)指令則可搜尋整個編輯緩衝區的資料。9 L, c( O/ \$ }/ r3 M
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
+ }# @/ O' u6 D, Q, S! n5 R5 W       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
. L9 _# b9 z+ U( N       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。' l1 w, Y* x4 b; H
       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。+ E( F: `2 `* d& D
       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。
1 ]1 |) y0 N- W- l0 E+ Y) k
& U$ q9 {! v8 g12.恢復編輯時被中斷的檔案
1 j& }/ H2 G0 p6 c) M) b/ A9 M1 l       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未( i3 o- b- @0 q) ]: [# l2 A7 @
       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前# [' K/ c" n& g; Y; D
       的檔案內容。
" s$ P/ \5 M0 L% A  o       %vi -r filename8 J& ~  W4 s% B3 E

, F) S3 y" a+ ^1 g; C' s13.編輯多個檔案" Q; U% u" e" G- e
       vi亦提供同時編輯多個檔案的功能,方法如下:  a& Z* U( [& q. n" B1 e3 W
       %vi file1 file2 ..
: x' {, b! }( W5 {6 ~       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後: x) V4 n, I  V1 ]2 O
       再利用 『:n』載入下一個檔案。
; Q% T2 O9 C+ n+ O" l3 C0 M0 ]* ?) D1 G
參考:# z3 q# M, l: K# o, j5 E1 }
, x6 k6 X2 B9 H* o( G+ m$ q
http://chunchaichang.blogspot.tw/2010/08/vim-s.html+ s0 W9 ^6 d1 |8 k/ y6 Z7 \





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