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

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

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

[複製鏈接]
發表於 2014-11-18 08:47:14 | 顯示全部樓層 |閱讀模式
tid=95& 本帖最後由 IT_man 於 2017-5-6 23:16 編輯
) a' ^# |( \: }/ |% a; ]' J- ]8 e3 |9 ~  ?% {; ?
vi指令說明(完整版)/ c  D# G* Q$ _8 ^% M8 A
  • vi 的操作模式9 Z& Q# t# M. Z, t8 m

; O( w9 [7 O; f4 r% D" x

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

  • 輸入模式
    1 |: a7 C( v; z  K

" P% f: I& ]3 K
       如何進入輸入模式
" Y- N- [  Y  r                a (append)    由游標之後加入資料。$ Y  a0 N0 n% O& D$ l
                A                   由該行之末加入資料。
4 ~9 y  Z7 ~% B                i (insert)        由游標之前加入資料。
& ~( t" n1 s& [+ \# [                I                   由該行之首加入資料。
3 C, r4 m1 w4 H2 m$ j                o (open)       新增一行於該行之下供輸入資料之用。5 V- H9 x0 f; J9 ^) z
                O                  新增一行於該行之上供輸入資料之用。
6 f4 S% s+ f8 [0 r! r) c  h       如何離開輸入模式
' R" n( v2 ~8 Z3 G             《ESC》          結束輸入模式。
* I# d2 L% {0 ?  Z7 g
  • 指令模式
    4 d8 E2 K4 n$ s


8 Y6 O' u$ N' t" J% h1.游標之移動& Y6 R# k. q/ J! u9 _! D
              h       向左移一個字元。
# Y+ k# ]( \9 u' L( z              j       向上移一個字元。
" X. [$ [7 t  Q7 J; ~2 i; G+ B              k       向下移一個字元。* ^0 X; h* u. [5 m, M0 V8 N4 z
              l       向右移一個字元。4 ~! ]2 T3 e& H& U
              0       移至該行之首
% H" Y9 f! e- P, k9 x$ o              $       移至該行之末。8 i) @9 ~3 X, a/ z
              ^       移至該行的第一個字元處。3 ~$ \5 c( u, Y* u9 m2 X
              H       移至視窗的第一列。/ I1 F4 Y2 y& J: i) x
              M       移至視窗的中間那列。
; H- n" |+ t! P' F: V+ ^+ m4 r: A. N              L       移至視窗的最後一列。
7 H. V/ m" b8 h/ f& e             G       移至該檔案的最後一列。' e/ \( J5 o: Z$ K
             +       移至下一列的第一個字元處。
4 E+ i7 a' \4 @, Z             -       移至上一列的第一個字元處。
2 I0 Q: q, U9 M: O% s             (       移至該句之首。 (註一), w' Z  J8 U# y9 r9 f3 p
             )       移至該句之末。9 ^! U, T8 K" g8 G3 t( _$ [
             {       移至該段落之首。 (註二)7 P& `! M+ q& s8 a) ]2 p
             }       移至該段落之末。6 ^, Z5 m# i* B/ r
             nG      移至該檔案的第 n 列。% K. v# z: \# r& ]  a% A: U' v
             n+      移至游標所在位置之後的第 n 列。
" i! j& F$ @6 j' ~8 t             n-      移至游標所在位置之前的第 n 列。
! H" c* r* t6 s& F0 c: f            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
5 b7 j4 [& t" C! r! t+ ^& n, ]7 A            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
, }5 g* c8 w0 n! ]* ]( q9 ]3 @            註二:段落(paragraph)在vi中是指以空白行隔開的文字。
) K# N& {6 h9 Z& }( z
2 B) m, }: G9 L1 l/ S2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。/ c: r9 h+ [7 l2 M4 u
           <Ctrl><b>       視窗往上捲一頁。
  z: G' o7 z& ~7 ]) ]           <Ctrl><d>       視窗往下捲半頁。+ w# q9 {; O6 U6 r4 m
           <Ctrl><u>       視窗往上捲半頁。
' q  E3 n8 J+ t, S9 b           <Ctrl><e>       視窗往下捲一行。
0 H( k: _7 e2 |& J) u% H* S# U           <Ctrl><y>       視窗往上捲一行。
, z+ b& \2 U  |0 }7 g" S! r/ w4 P4 Q. o5 Q# F* n! h& O
3.刪除、複製及修改指令介紹 (此單元較少使用)4 b1 T$ _5 t# }& r6 ^- j
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:& l- p8 H9 q, i# H
       Operator + Scope = command; K( L& ?* B" U( B! ^% Q
       (運算子)   (範圍)4 d1 [$ |% _4 U( u. p' p% ]
       運算子:; q) G3 V4 O9 \2 q! ~: c+ Q# R: Y
       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
2 ]/ u6 B$ X3 N: X- }6 G7 z/ k       y       將資料(字組、行列、句子或段落)複製到緩衝區。
: v4 x, O/ j9 N: `! O- o/ b0 ?       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
9 d* f9 r! T  `* R4 o4 i                料放置於游標所在位置之行列下。
! s" @4 N$ I: R0 c5 y  w       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
* i6 F$ N" U6 {; Y                子等之資料,並插入新鍵資料。
7 S- Q# B7 M' z. f$ o       範圍:
& W# g! K( s7 Y: j) g       e       由游標所在位置至該字串的最後一個字元。7 U. ~5 E# q# |0 j- n$ \( Q! N
       w       由游標所在位置至下一個字串的第一個字元。
. c4 D* P* g1 h2 |% N3 u# W       b       由游標所在位置至前一個字串的第一個字元。
" {' i' A& H" V0 A4 H8 i- ]- q- ~       $       由游標所在位置至該行的最後一個字元。
7 o4 h# C/ g& U3 r* M       0       由游標所在位置至該行的第一個字元。
! J* g$ M* K! x. u) R       )       由游標所在位置至下一個句子的第一個字元。
  M" V+ u: [: u8 r$ G* X       (       由游標所在位置至該句子的第一個字元。2 }  I) o% y' v1 x& i+ k% `5 P, ?
       {       由游標所在位置至該段落的最後一個字元。
  k, e: F. D. y       }       由游標所在位置至該段落的第一個字元。3 ?$ O5 Q' T2 Y
       整行動作$ `0 w4 _3 }) z% o7 H; o
       dd      刪除整行。" j& q$ f" Q, M+ g0 b2 P
       D       以行為單位,刪除游標後之所有字元。
/ F1 A: P7 C4 [* @5 M& \       cc      修改整行的內容。$ M9 R, ~( x* b% C2 r, c
       yy      yank整行,使游標所在該行複製到記憶體緩衝區。6 ^6 m0 ~/ k! m

7 t4 |0 H. m1 O' Q+ R( Z& I4.刪除與修改
& b; @8 s$ A% z& D& d0 U  k& w- g1 e       x       刪除游標所在該字元。
6 K3 S1 N' v9 r       X       刪除游標所在之前一字元。
( E4 {/ j2 C$ i: I( w6 e% L1 F( J% I       dd      刪除游標所在該行。' r' V7 D& B: i8 N' B3 L2 I; O
       r       用接於此指令之後的字元取代(replace)游標所在字元。# k3 C3 X0 g' P6 |  `
                如: ra 將游標所在字元以 a 取代之。
/ n2 p" i4 P+ b       R       進入取代狀態,直到《ESC》為止。6 }2 @. O$ [9 a( T6 S2 L
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。+ B- R; M2 V5 d& k( n" R+ w* B5 {6 C
       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。/ f$ {6 N: [0 j( M/ ]
$ g! }! u& r6 _* X9 P( ~% F2 C
5.搬移與複製
& d6 K+ {2 m6 p4 M       利用delete 及 put 指令可完成資料搬移之目的。
+ ^. x8 ~7 f) p7 i3 `, }       利用yank 及 put 指令可完成資料複製之目的。
* E0 C5 {  _! O8 Z8 B       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
0 w# O- r2 ^* i       可將緩衝區內的資料複製到螢幕上。* [8 j* ~& |# ?; F5 z2 {3 q# k
       例:
! f9 `) @6 f  m       搬移一行        ‧在該行執行 dd7 T8 y. a6 ?, ^$ n* [, V$ p
                        ‧游標移至目的地
) }9 l* w* U' V: ^                        ‧執行 p, h6 w+ B0 ]/ T7 [2 Y9 q
       複製一行        ‧在該行執行 yy6 Q  V/ @  f1 G  c. r; S7 s
                        ‧游標移至目的地% |, P3 O) d: q  n  \
                        ‧執行 p
, l6 r2 p' m2 y- _/ B0 F: M/ C( L( \* Z
6.指令重複% {$ ?% {7 {: A2 H3 Q( _/ C) k
       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
) r# K/ ~9 [# c       次。! [: a- L7 c3 Z* j& ^+ B+ T: b8 P
       例:9 _  |2 ?1 m- K% x: S  o. u
       刪除10行                ‧10dd& d6 w: M% S9 m9 }
       複製10行                ‧10yy7 r0 b6 C1 _+ A. p& l% I# @7 ^6 f
                                ‧游標移至目的地2 }) P( V7 u, g* O  K# ^) F( O3 L
                                ‧p! s' ]" ^2 ?1 b3 M) Q, V
       指標往下移10行 ‧10j
0 M4 n3 \- l" q$ Q" P" I$ p( ^
7.取消前一動作(Undo)
" i8 g7 G" T. N. d" M* U       即復原執行上一指令前的內容。* f: Z& X0 M) X  \4 o
       u       恢復最後一個指令之前的結果。
7 k/ C, z4 @9 E       U       恢復游標該行之所有改變。2 V- H1 A. S$ e+ T: Y9 U7 o
/ Q8 p! x5 `4 I0 n
8.搜尋" i! ~; E/ y6 k& J& l- j
       在vi中可搜尋某一字串,使游標移至該處。. ^5 e$ W! I: \$ N
       /字串           往游標之後尋找該字串。
, V9 Z) s( b$ f* _' x; T5 u$ ^       ?字串           往游標之前尋找該字串。
  J! s* A) u6 T6 f4 O       n               往下繼續尋找下一個相同的字串。2 b* M' P7 _* W
       N               往上繼續尋找下一個相同的字串。
& |, H* k+ r% E2 e8 X8 N, b! j5 Q+ {! c% x+ H  ~
9.資料的連接
3 B# ^; G5 |. Y  u       J       句子的連接。將游標所在之下一行連接至游標該行的後面。7 `- a$ `1 |9 \
       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
. n, m& S: h9 ^3 F& U       (可利用a、i等指令)再按《Enter》即可。  ]' V( {; K- `" G; {
4 w8 s& a; q6 z4 R
10.環境的設定- a% x6 ]. x4 X) @0 e0 u
       :setnu                設定資料的行號。* o2 j6 V7 `; \+ M
       :setnonu              取消行號設定。
' r( v" K, O3 |0 S       :setai                自動內縮。
" E: u. e/ `) g/ O* H       :setnoai              取消自動內縮。
. Q% j2 p% f- j       自動內縮(automatic indentation)
5 ]1 J2 ?8 V( V% {0 I1 e; g  z       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
0 u8 T' [+ {' F3 S       動內縮的功能,用下例解釋之:8 R, O+ x. _  a( ^" q9 z0 [) [
       ‧vi test2 q) P0 f6 L  O+ y
       ‧(進入編輯視窗後)+ v7 X0 G; h8 @& A! ]+ b
         this is the test for auto indent: \+ w5 ?" R* `/ _$ A. J
         《Tab》start indent           ← :set ai (設自動內縮)( I( Z9 q$ B+ Y5 y" C" c
         《Tab》data
- }% O  D# G" L) l+ W" l         《Tab》data3 [# H9 I& Z4 Z2 x$ F
         《Tab》data                   ← :set noai (取消自動內縮)6 I+ {3 b9 @/ j6 [  U
       the end of auto indent.
+ k/ P$ k- H* L* B       ‧註:<Ctrl><d>可刪除《Tab》字元。: M6 m1 @% i! o" w# L. q3 R1 H
* C7 `2 w! z" i/ h  y
11.ex指令: @! l# G7 w8 I9 H
       讀寫資料
! x# Y9 x; I. t; H5 B* c) z& q7 S       :w                     將緩衝區的資料寫入磁碟中。2 Z* g) g, S/ A5 Z, q7 X
       :10,20wtest   將第10行至第20行的資料寫入test檔案。( h8 t' }& S5 O. @% ]# B4 G
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。& a/ I; M9 n6 e6 w1 O& n5 ~, X
       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
4 I0 e/ `* W8 G& P  M; a$ N) }/ G       刪除、複製及搬移1 Q6 b9 ?/ d1 I  g5 `8 @
       :10,20d                刪除第10行至第20行的資料。  o$ V. M6 }6 ~1 Y$ j, o
       :10d                   刪除第10行的資料。
2 A: F2 @4 T) \# d4 }9 q% L$ c       :%d                    刪除整個編輯緩衝區。
. Z! Y6 q* e1 P% F( u       :10,20co30             將第10行至第20行的資料複製至第30行之後。5 P/ x9 N$ ~, J+ y  ^6 C3 J
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。
: D) e( N6 D4 R  d( c9 W       字串搜尋與取代
: _+ e# W+ F6 y! x' M       s(substitute)指令可搜尋某行列範圍。
" q% f. q, h2 D- V       g(global)指令則可搜尋整個編輯緩衝區的資料。
0 [% q7 M4 p0 y# X! Q* Q       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條6 [- [& B4 b$ C: Y3 C
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。  N; G* T! h$ Z- D. h/ d
       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
9 m# [6 O& M, P% R6 M* A% V, v. L8 |       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。
% C( p+ y/ X; Q" x       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。; _) M+ L, {  ?- ?8 ?

5 v$ ^8 \# I4 v7 ~: Q! ?) u' Q( S12.恢復編輯時被中斷的檔案3 p- a, }$ A; }: r
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
7 e1 v& u0 B2 F       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
: o! U1 D! T- n8 i) o. d       的檔案內容。
& {- r0 ^( {* A; l       %vi -r filename
0 |8 H. E! I  K0 m! s
( @) w1 q0 O+ Y5 @3 |( a5 Q- ]13.編輯多個檔案
$ U* c, i7 r* S# [1 e2 L3 K       vi亦提供同時編輯多個檔案的功能,方法如下:
* X9 k; E2 d" _       %vi file1 file2 ..$ E- k# B  L1 S* c3 k! W/ E1 F, Y8 F. A
       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
* g7 V8 d" Y& |. K+ v, Y       再利用 『:n』載入下一個檔案。% _9 u9 Z5 h3 X* [  C

9 ?5 G  a% N/ z9 z0 z3 S參考:" o% @* J" M+ G+ \

9 H9 L% x( h4 d2 [" X% G% Khttp://chunchaichang.blogspot.tw/2010/08/vim-s.html5 \3 Z+ q" G" k( D# V
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2024-10-29 04:28 , Processed in 0.081969 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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