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

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

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

[複製鏈接]
發表於 2014-11-18 08:47:14 | 顯示全部樓層 |閱讀模式
tid=95& 本帖最後由 IT_man 於 2017-5-6 23:16 編輯
6 ?# w( [" d# m# a3 R# |
9 |+ [2 f1 U& s: Vvi指令說明(完整版)
9 ]9 ^& G$ M" }3 x# x
  • vi 的操作模式
    # _$ F( u7 b0 X4 U# W7 m" }


8 B2 ^! H% p9 q4 {; k

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

  • 輸入模式8 \0 ]' m; Y5 W' |) g0 o


/ l: X  a% _4 m3 B% l: \6 Y' _       如何進入輸入模式# b2 d6 w( _$ m* u: ?3 C$ I
                a (append)    由游標之後加入資料。
  [' \8 \! ~' {5 E                A                   由該行之末加入資料。2 q- q7 ]& {( W" b! v+ |3 A/ n
                i (insert)        由游標之前加入資料。; ~5 X% L2 O  ?8 T) c) V
                I                   由該行之首加入資料。
( ~9 P" s3 F) {5 _3 d1 J! ]; R                o (open)       新增一行於該行之下供輸入資料之用。
4 {& e. o. A& |/ q8 K. s/ Y) l1 O& Q                O                  新增一行於該行之上供輸入資料之用。+ ~8 K4 _% x$ a( b, @/ c1 Q9 s" ]
       如何離開輸入模式7 I5 \) K7 `! u2 f' z
             《ESC》          結束輸入模式。
* u$ u" _/ c5 Y9 R) X; t
  • 指令模式
    6 g2 ?# a- R. r* \

. K0 ?1 U* r6 ^4 g/ C- B
1.游標之移動
, \& e+ E6 s# |3 f/ H8 t              h       向左移一個字元。
( c3 @" X* Q8 Y6 J" o( F( \              j       向上移一個字元。2 o- S0 c; q( [
              k       向下移一個字元。
: `, Y& h  B  G* W              l       向右移一個字元。. i1 @; u! N) W6 x' k; @2 l: o
              0       移至該行之首
4 s1 K) |+ o% Y* ~% O0 C; R              $       移至該行之末。; D& H* p; ?/ e0 q. G$ f
              ^       移至該行的第一個字元處。
; s$ w. k  D$ O; Z. o: K' }% S              H       移至視窗的第一列。- t& g) n4 }4 Z- G  l$ f5 o; R
              M       移至視窗的中間那列。" j9 z2 O. g- h7 R, u; U
              L       移至視窗的最後一列。
- h# w7 s! u4 P; c1 U             G       移至該檔案的最後一列。
# S0 b" o+ r" o             +       移至下一列的第一個字元處。
- G$ D* y  h( D/ h             -       移至上一列的第一個字元處。
1 `, y' {* G4 G% S3 E1 t             (       移至該句之首。 (註一). w+ N& V3 w; i
             )       移至該句之末。
! X7 w+ E9 m4 Q# o: x             {       移至該段落之首。 (註二)+ Q0 K5 X7 \  a5 W
             }       移至該段落之末。
2 Z$ _9 W  ~* l& q8 g) C7 G             nG      移至該檔案的第 n 列。
  Z6 {! Z2 w  D6 j' p             n+      移至游標所在位置之後的第 n 列。$ i! U, s5 {' R' c) Y+ f& F
             n-      移至游標所在位置之前的第 n 列。
$ J' W/ s3 Y, f. ]+ `; L/ T            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
) r8 J) l- ~1 k; L6 d4 T# m2 S2 \            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。" v1 p) x% ?; o: |
            註二:段落(paragraph)在vi中是指以空白行隔開的文字。
; ~) x7 Z5 B* u1 E
) }& k- Y8 E4 h2 ?5 W2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。
) r/ K& ^0 e, D5 H1 K, Y' j1 U8 C$ m           <Ctrl><b>       視窗往上捲一頁。# u5 g3 x- W5 ?- L
           <Ctrl><d>       視窗往下捲半頁。
# ^8 s7 [! D6 G  l; ?           <Ctrl><u>       視窗往上捲半頁。" G5 p$ {  I5 I5 v' s( B$ D( s
           <Ctrl><e>       視窗往下捲一行。
; d- v( x2 x' m" W           <Ctrl><y>       視窗往上捲一行。  R: m3 p9 K8 C3 {# t" j; M

% P* v% n: i0 e3.刪除、複製及修改指令介紹 (此單元較少使用)9 X* r( J8 [5 b4 b  o
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
. n; T- L" d; R       Operator + Scope = command" v# k$ Z/ U6 ]7 P0 e: d
       (運算子)   (範圍)
' L- z' n! ]- z) p, A' \       運算子:
5 g( ]" z+ }. ^+ N; ^# e       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
% R4 `- X, M7 |0 F, j       y       將資料(字組、行列、句子或段落)複製到緩衝區。
& I5 K: D& X! J8 ~       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資0 A) F0 j4 Y; @7 P$ J# [
                料放置於游標所在位置之行列下。1 |3 i  D  E* K8 ~. r) v
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
# V3 w2 j5 |4 N( X2 e( @                子等之資料,並插入新鍵資料。
; R; Q- L( P4 D% G" }1 o) @7 u       範圍:
0 q0 x2 q9 `7 ~       e       由游標所在位置至該字串的最後一個字元。" d! v$ i+ L- R) e0 o1 j& h0 K" Y
       w       由游標所在位置至下一個字串的第一個字元。
5 p% e  K3 C8 a# k7 p       b       由游標所在位置至前一個字串的第一個字元。2 g  H2 }9 \( P. m5 |" F) X
       $       由游標所在位置至該行的最後一個字元。
& E% {5 M5 P. U4 |       0       由游標所在位置至該行的第一個字元。
% D" m$ b# I! ~$ C! \! e$ {* H8 W# ?+ A       )       由游標所在位置至下一個句子的第一個字元。
4 t6 R" ~; L1 M       (       由游標所在位置至該句子的第一個字元。
: F- I; @$ ~" Y, z$ C+ R       {       由游標所在位置至該段落的最後一個字元。7 k! I  V. V& R) J
       }       由游標所在位置至該段落的第一個字元。
: |  N8 h9 f5 E       整行動作# }! @, R4 S2 _( P! k
       dd      刪除整行。% k2 e6 ]9 p; B& t+ q/ d
       D       以行為單位,刪除游標後之所有字元。) P: D+ p! r8 C5 K/ U6 ~
       cc      修改整行的內容。
4 {3 i, G- a+ y       yy      yank整行,使游標所在該行複製到記憶體緩衝區。' v  D. w4 ^) d
2 v5 @* k1 I. a7 w: V
4.刪除與修改
" k4 b' `2 \* i. K; ~! V       x       刪除游標所在該字元。7 c( C( T0 {+ l$ U
       X       刪除游標所在之前一字元。) N$ J' V- U6 W0 g
       dd      刪除游標所在該行。! L; X' V1 G( E3 C" _) O
       r       用接於此指令之後的字元取代(replace)游標所在字元。! R4 N  w$ c* ]" q4 _
                如: ra 將游標所在字元以 a 取代之。# F4 H- t; }' m1 K6 G7 K
       R       進入取代狀態,直到《ESC》為止。* T3 F9 l6 d% c+ s7 Y9 y) j
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。: [9 P- r4 x( \0 N- Q3 \/ F
       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。+ Y9 R# d4 \+ \. B) F; Q* h& I

5 A$ E. v" i, e+ R4 _5.搬移與複製
" Q1 k1 R5 A+ i0 `  r5 b2 w       利用delete 及 put 指令可完成資料搬移之目的。
0 i' L" J; ?3 H5 `% h9 d3 p       利用yank 及 put 指令可完成資料複製之目的。& g% T8 a- F: u  p
       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令4 b9 {! R3 ]5 t& \8 f
       可將緩衝區內的資料複製到螢幕上。
1 }) M% J& N4 c       例:: _5 r' W6 \2 y3 N) [' H
       搬移一行        ‧在該行執行 dd
, A" T+ T( Z' o. D+ R8 Q; M                        ‧游標移至目的地+ J# Z9 Q; ]  c  R
                        ‧執行 p
; D& X, B, Y* ^6 N* n1 u       複製一行        ‧在該行執行 yy
4 F9 t* t" p9 i/ j% f                        ‧游標移至目的地: Y8 ^" w  D! `
                        ‧執行 p
$ t* |# s1 H4 C' l7 Z. W1 m! W( I: E8 V8 `9 g9 T
6.指令重複
0 G& c7 w" \. W' m' r' x       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n; M+ Z. A6 t/ n/ q5 z5 U
       次。
. H" g: K8 J1 h$ \! J       例:2 h; v5 G# f( ?7 G8 l
       刪除10行                ‧10dd! y- [0 f* q( l& s
       複製10行                ‧10yy) j7 e# ^( c* V# p
                                ‧游標移至目的地  p$ x" ~! I. \, p6 w
                                ‧p
: X: w! M; o7 ?* U1 G       指標往下移10行 ‧10j$ _* K4 [$ M0 Z

& a- i. {& B; B. e7.取消前一動作(Undo)4 s  D4 }1 d& v0 z+ ?. }6 ~
       即復原執行上一指令前的內容。6 p1 b9 C4 R" R6 ^1 ?. V) \  ^& p
       u       恢復最後一個指令之前的結果。! i% ]" I8 }1 t( a
       U       恢復游標該行之所有改變。
) c1 \3 c1 b* ~4 E! Z7 {
: I% _* c; y4 c. Z, x/ b& {: q8.搜尋
" R# \6 x; X# o       在vi中可搜尋某一字串,使游標移至該處。5 O" v# P5 e& B  s8 Q  D
       /字串           往游標之後尋找該字串。' `% M9 t9 t7 E2 y
       ?字串           往游標之前尋找該字串。9 b3 D) }0 Z( J+ G( _! O) S7 l
       n               往下繼續尋找下一個相同的字串。
! Z& O/ R+ C3 T, q5 h4 \       N               往上繼續尋找下一個相同的字串。
; w1 q4 X& G# ]! d, x, Z2 P9 x1 c7 S
9.資料的連接) k' Q: s5 a2 U" x
       J       句子的連接。將游標所在之下一行連接至游標該行的後面。
5 @( a( [9 a+ @       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式+ r* v5 d5 j4 q/ p; \
       (可利用a、i等指令)再按《Enter》即可。4 K+ k  X( M2 _3 ]: i% o6 Y; J
& `4 ?$ [  M3 m2 W! K
10.環境的設定/ r4 R. F) V0 q# S9 q. u9 o1 u
       :setnu                設定資料的行號。9 r9 b# _$ s7 m' t/ ^
       :setnonu              取消行號設定。+ v  o5 V) l& K' e6 n
       :setai                自動內縮。/ C8 u: l, {# ]( V, ~" x
       :setnoai              取消自動內縮。8 `1 J8 p. E- }) X
       自動內縮(automatic indentation)
5 s. i8 {4 b0 D6 o$ f( u: W/ P. r       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自7 I0 m5 \. k- i. ~
       動內縮的功能,用下例解釋之:
1 d: Z  W, R- A       ‧vi test
& v* U! m: ~" q1 f8 O4 @       ‧(進入編輯視窗後); z  g! p6 q0 n! J3 ^
         this is the test for auto indent
! A! s: g4 B9 ^6 N         《Tab》start indent           ← :set ai (設自動內縮)8 l1 ?! j* F0 x& C. g+ Y) W
         《Tab》data
, C5 T  j# i2 h7 \6 w+ P) H         《Tab》data
/ n* B/ I, _: r" L! _         《Tab》data                   ← :set noai (取消自動內縮)
. F0 U: B; Y5 o9 Q9 H% t       the end of auto indent.# g) O- k2 ~0 T+ I/ B
       ‧註:<Ctrl><d>可刪除《Tab》字元。
6 Z  [& ^& _  H7 \* i
& z, g$ r% H; h7 H% O11.ex指令0 W2 p) h& j/ j7 Y; G) \( N
       讀寫資料
) F( C/ x1 ~3 v+ t5 a       :w                     將緩衝區的資料寫入磁碟中。
9 c: J& ^  _$ y, l0 R       :10,20wtest   將第10行至第20行的資料寫入test檔案。9 }3 H- T9 J0 D1 z) K1 n
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。
$ a0 o4 [5 t( y6 A, I/ n- B       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
& Z. m& D/ t7 w0 R0 L9 M5 {       刪除、複製及搬移3 g4 I7 }, j  l! S/ f: x2 x
       :10,20d                刪除第10行至第20行的資料。
0 J7 ?1 C: m$ m- ?       :10d                   刪除第10行的資料。
1 Y0 S+ @: y* C5 L6 x& {2 I8 H       :%d                    刪除整個編輯緩衝區。7 k8 S7 N. w/ a2 G4 D
       :10,20co30             將第10行至第20行的資料複製至第30行之後。; x9 z. [  t) p/ y8 X2 T( \
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。) {+ |* C* S3 W, U9 O
       字串搜尋與取代
1 O2 R) a. y* s  Z. r       s(substitute)指令可搜尋某行列範圍。
0 s! b$ v5 z/ r; b       g(global)指令則可搜尋整個編輯緩衝區的資料。
, g& G9 S3 M3 k" P  z       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
$ K0 C- R  N5 `1 R       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。& k% M/ W9 o2 s9 o2 _# e# f
       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
( i5 C9 h; ~: z! y       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。7 Y- J8 {/ O& j6 l, H
       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。
! H% V) q- `9 d1 L/ t$ U9 P) O* Y0 ~& |$ Y' _
12.恢復編輯時被中斷的檔案
2 t. L7 {* C: x       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
+ B5 `- T' P& v       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
5 Q4 X3 Z4 O" S% ~: ~' J& b       的檔案內容。
+ }' G- n+ d, }$ {. M       %vi -r filename
. Z; ]3 r( @  E( A* m  Y) ~: I- }( V: Y* d7 j. c
13.編輯多個檔案6 G$ S' v5 G+ P2 I7 f! _3 T
       vi亦提供同時編輯多個檔案的功能,方法如下:) D/ A% @5 }$ |, ]% d% j4 x
       %vi file1 file2 ..* p: H# ?0 F" F! p2 A! {3 R- I
       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
# [- A6 w! d1 q+ |       再利用 『:n』載入下一個檔案。) j5 W( G! h9 e. K0 i
4 B* O- W* C: V
參考:3 k  g! Z/ r" M/ l8 ^3 y. G, a

% O. j* `+ E8 o3 _http://chunchaichang.blogspot.tw/2010/08/vim-s.html& Y! p3 C" @+ v3 i  A8 N
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-3-23 22:21 , Processed in 0.063064 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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