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

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

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

[複製鏈接]
發表於 2014-11-18 08:47:14 | 顯示全部樓層 |閱讀模式
tid=95& 本帖最後由 IT_man 於 2017-5-6 23:16 編輯 7 I2 u0 m# A' i) |4 [
1 A3 |; Z4 [+ P" s, O' E4 F
vi指令說明(完整版)
; j' y/ d& ~- q/ S8 |
  • vi 的操作模式+ L* h2 f  H8 x1 N. c4 F# i  s

2 m, D7 V9 H& g

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

  • 輸入模式3 a- }/ W3 T% |/ ~' F$ j7 G( I


1 m- a$ z4 a% X$ y  s       如何進入輸入模式3 [- u/ O. h$ U) r
                a (append)    由游標之後加入資料。
1 U5 y& p2 W8 M7 D                A                   由該行之末加入資料。1 X3 @. s0 \( I9 ]" w; ]
                i (insert)        由游標之前加入資料。2 x9 c* f6 {6 y7 u
                I                   由該行之首加入資料。
  t6 [! c/ |- Z3 F2 J' F% o0 I                o (open)       新增一行於該行之下供輸入資料之用。6 @3 }3 ]: g0 c/ E& }2 T" P! f
                O                  新增一行於該行之上供輸入資料之用。. }* ?' L# J. F* i9 I( o; ?2 m
       如何離開輸入模式4 ~, U  N5 k" G: Y1 q1 H
             《ESC》          結束輸入模式。
* g3 u  M1 h- _# P9 H0 ~  L; o8 M
  • 指令模式# d1 W) w. x, Q1 ?( u

; U- ?( K7 j4 y; G
1.游標之移動
5 `! @9 [0 G: ~% [! P. \8 E3 W              h       向左移一個字元。$ v+ u" C1 L2 H, z+ J
              j       向上移一個字元。% b$ n4 Q3 N. K
              k       向下移一個字元。
4 g" u" O. \# k- ~5 p              l       向右移一個字元。/ E3 n5 Y8 E( f+ ?# \, s4 ?
              0       移至該行之首( D0 S) b5 D9 w, d1 I% Z- N. H
              $       移至該行之末。
8 \6 P- o+ y( Y& |4 p: C% O6 _/ w, J              ^       移至該行的第一個字元處。3 Z0 L" X  `2 b% h
              H       移至視窗的第一列。) U) j- H, U' G2 g9 k) s; E
              M       移至視窗的中間那列。
( M; n' b3 g, m$ h              L       移至視窗的最後一列。
3 K; s( x- C  d% M7 d7 b, [7 J" L             G       移至該檔案的最後一列。- h8 [7 ^4 j/ Z  ^
             +       移至下一列的第一個字元處。7 |: w* M# {$ l/ g7 c
             -       移至上一列的第一個字元處。$ i; U: A( U2 M3 t3 Q
             (       移至該句之首。 (註一)
* c6 r+ o$ w0 I$ n             )       移至該句之末。
% l9 ?( d) C+ L, }             {       移至該段落之首。 (註二)
7 h/ J: W$ N7 P             }       移至該段落之末。
, j* T4 U) w, Q4 x5 e0 j             nG      移至該檔案的第 n 列。
( k4 S: x; r& r( v" ]# }' @" q             n+      移至游標所在位置之後的第 n 列。' \1 s& D% P% b8 ]  m, s6 c0 X( V
             n-      移至游標所在位置之前的第 n 列。
- {# {# v# ^- B& E5 H            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
2 x. M  s/ A# F  {            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。7 y6 Z/ d- \$ F
            註二:段落(paragraph)在vi中是指以空白行隔開的文字。
! m8 O3 Q' @6 O0 F6 q$ h( J1 O' U) H  o
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。
7 O. p4 D# k0 x  ]$ o7 r7 O. i           <Ctrl><b>       視窗往上捲一頁。: a- g* z4 z  `
           <Ctrl><d>       視窗往下捲半頁。
- Q; t& N' K/ L* @' k. ^- s, s" F2 F           <Ctrl><u>       視窗往上捲半頁。
6 `0 Q: K& R& Z3 M" U; F/ t: q5 \+ z           <Ctrl><e>       視窗往下捲一行。
1 R# s* `$ h) \& n  D$ g           <Ctrl><y>       視窗往上捲一行。
: m2 p* k  r2 S% k. }1 }
- ?' k3 i1 D( }3.刪除、複製及修改指令介紹 (此單元較少使用)! [! L8 @' O' q8 S* V! _& e
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
: `7 q- }! r+ Q  e       Operator + Scope = command
- p/ p0 m1 M# X& Z$ I       (運算子)   (範圍)
. L* x0 g$ f- ?+ @4 p, W       運算子:
" {( l- b; }9 a4 u1 K5 j       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
1 @8 S0 j- L; I' k! Z       y       將資料(字組、行列、句子或段落)複製到緩衝區。3 {, u+ J# ]4 O6 X% S
       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資3 d9 b- S7 X1 D$ J5 }
                料放置於游標所在位置之行列下。
. E% j7 ]% n% r4 |3 a0 a       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句8 \7 P& k, p, ^0 N) o, A
                子等之資料,並插入新鍵資料。
/ V% u" o8 |  A: b' ^       範圍:/ G& @# \6 X7 }) @0 G% m0 D
       e       由游標所在位置至該字串的最後一個字元。6 Y3 _5 l; S( C
       w       由游標所在位置至下一個字串的第一個字元。% ~( k& f4 z- J2 M& b! K6 |" z3 }8 W  l
       b       由游標所在位置至前一個字串的第一個字元。
* V6 }& k& V  ?5 |" [% V       $       由游標所在位置至該行的最後一個字元。
2 G9 r& I" U; s2 r; ?0 N7 s1 r       0       由游標所在位置至該行的第一個字元。
1 w- P% s) k3 `$ a+ O6 O3 J9 w/ S       )       由游標所在位置至下一個句子的第一個字元。
6 g4 V% B) l; s3 u- Q  K9 r7 p       (       由游標所在位置至該句子的第一個字元。2 v+ T% k3 y1 A- r# b8 C9 Y6 g
       {       由游標所在位置至該段落的最後一個字元。* H, ^4 _% u* I5 }
       }       由游標所在位置至該段落的第一個字元。+ G# t* p6 ]0 o
       整行動作
+ S' Q/ h  I) d- `- W) |7 i       dd      刪除整行。
: [1 I" N2 K$ L8 Q( ?/ p7 U       D       以行為單位,刪除游標後之所有字元。
7 k, I7 q) Z6 O3 m       cc      修改整行的內容。
% J  @" D# w$ E# K* _       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
; d3 u$ T8 r3 Y& n* n& |1 i, j% t& b* W: \, k( K5 {) G" y2 f& @
4.刪除與修改
, I- L! G% b) V) n! N  D       x       刪除游標所在該字元。( f! \+ H1 p9 e* J
       X       刪除游標所在之前一字元。
6 \& V" N! o4 v       dd      刪除游標所在該行。% Q9 y/ F! I: C) Y# p
       r       用接於此指令之後的字元取代(replace)游標所在字元。
! t" Z7 B8 r9 J3 |& M) c$ ^9 v                如: ra 將游標所在字元以 a 取代之。% V( Y& e8 J, w4 G
       R       進入取代狀態,直到《ESC》為止。+ D  b% I9 n' b  r
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
' q+ g3 _; [  J/ h. a6 F( U! e8 ]       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。8 G" k, X3 e$ C& H3 o
7 D) G; B0 U9 ~, m
5.搬移與複製
% d# n- Z, e4 G4 a5 ^       利用delete 及 put 指令可完成資料搬移之目的。
2 I- z1 o# m: c9 c+ S" K       利用yank 及 put 指令可完成資料複製之目的。$ c& Z$ G0 e* |
       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令. J) Y3 K1 j+ I5 ?
       可將緩衝區內的資料複製到螢幕上。
& o  {: d& D, J& x       例:" b4 @( e+ B# b& V8 e- ^" Q: q! ~
       搬移一行        ‧在該行執行 dd, |; V. q( n  [* N3 h) @* N
                        ‧游標移至目的地
, x: q% _( M% ^7 i8 u                        ‧執行 p, M" O# R" S8 R6 T% y5 z% q7 _
       複製一行        ‧在該行執行 yy
  x7 M/ J7 U) Y6 |+ X                        ‧游標移至目的地
  x( N$ O+ I2 |. ]+ q  j0 ?                        ‧執行 p7 u4 T  E( X1 {) S: A

+ b' V3 W* y: A2 C" j2 b9 P# X6.指令重複6 \  b4 s! _( E: E
       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n4 C3 ^3 p0 w9 d, P" h, Q
       次。+ k3 S5 J+ x2 L0 d7 G
       例:7 u) }4 y& p* n5 F1 B  I
       刪除10行                ‧10dd/ y/ P0 l8 K7 l3 p
       複製10行                ‧10yy
5 D% m$ O/ s+ F& Q" @( h/ G                                ‧游標移至目的地
6 m( G8 A, p6 J8 G, P1 q                                ‧p
$ T# H" I( W) C% S       指標往下移10行 ‧10j2 M5 M* u0 B4 R, h" r% W$ v
. f7 O- G3 S1 K% ]- L! c7 ?8 ~
7.取消前一動作(Undo)
4 @, n3 [) v- G' w: X0 `       即復原執行上一指令前的內容。* e+ G' N. ], }+ z1 ?6 A
       u       恢復最後一個指令之前的結果。. m, m0 m% G" Q
       U       恢復游標該行之所有改變。3 S+ L9 i+ j+ X0 N" l  S
" t# c' m# |9 L7 }, f7 i( O
8.搜尋
. n+ [, D% q: v# d       在vi中可搜尋某一字串,使游標移至該處。
$ i( V2 z) t/ L. i) j0 q$ b9 z3 ~       /字串           往游標之後尋找該字串。
6 L9 o" n+ P* Y, N) a* B       ?字串           往游標之前尋找該字串。7 x/ r7 G) u' w/ O& }1 b0 g& S$ k
       n               往下繼續尋找下一個相同的字串。3 m  `8 m! N# ]5 x# P( }
       N               往上繼續尋找下一個相同的字串。
$ x1 U; U. v7 n
* v8 b) R) O; F& y9.資料的連接
1 K2 X% s0 J8 v0 u0 D: I       J       句子的連接。將游標所在之下一行連接至游標該行的後面。( {6 m; r% j* _9 S- ~
       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式  {: l3 T2 T. t" `: b0 L8 B$ _
       (可利用a、i等指令)再按《Enter》即可。- B/ I4 a4 d' s  A# Q

& s% q" \3 n2 k$ P5 ^5 e10.環境的設定
. i- @" f& o9 J$ X( A6 G       :setnu                設定資料的行號。
" G+ R5 ^, L$ p# ?       :setnonu              取消行號設定。
3 ~0 E# t1 `/ G* W: L. I0 h       :setai                自動內縮。
! X% X6 h/ V) F, ~5 j& S       :setnoai              取消自動內縮。5 p# ^4 U% P# _( ^+ `8 L, d
       自動內縮(automatic indentation)
5 a. w8 C5 U: @9 P- S0 r* A       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
% @* g7 s, g  d% B' ?4 ~       動內縮的功能,用下例解釋之:
8 j) X9 ~2 Y& z       ‧vi test0 {, l6 g+ V$ b) H7 _
       ‧(進入編輯視窗後)
  [8 J) j. [4 `# ?# r$ Q% r         this is the test for auto indent1 h8 J' R1 ^/ P: i
         《Tab》start indent           ← :set ai (設自動內縮)8 S0 ^1 U' E. _* M
         《Tab》data
/ h) U: o: \' U( L! x+ i         《Tab》data
3 s, T1 i3 {8 i& }. D  o3 g% q         《Tab》data                   ← :set noai (取消自動內縮)
; j5 V2 J& v0 f  N% Q: H       the end of auto indent.
2 [/ a; I/ E( d% _. l% p# N       ‧註:<Ctrl><d>可刪除《Tab》字元。+ z- [. X$ ?6 r6 W1 y- E2 L5 c

+ I# f8 w0 O7 W9 |6 u* a11.ex指令
* F% @9 D/ ^: a8 @9 C& s2 }       讀寫資料2 t, K/ t) l/ `: F- E3 @" V
       :w                     將緩衝區的資料寫入磁碟中。
0 w1 \3 b& q7 P8 k: k1 A       :10,20wtest   將第10行至第20行的資料寫入test檔案。
# J% a$ b  D! g8 I       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。' ~- J) T! h, L" ?
       :rtest                將test檔案的資料讀入編輯緩衝區的最後。5 Y. C* w% S9 X( s0 _2 ]" N4 U
       刪除、複製及搬移; T+ a- ~" A4 S6 T- ~6 {
       :10,20d                刪除第10行至第20行的資料。. Q" {5 j% z: a9 P2 M/ J; ]
       :10d                   刪除第10行的資料。
) A% n" J4 _" q& _       :%d                    刪除整個編輯緩衝區。
" b* d' J2 C" t; m- `5 z       :10,20co30             將第10行至第20行的資料複製至第30行之後。' H  Y  C8 A, Z8 A% ]% ^+ J
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。& Q! @% Q. a: h. Z' U
       字串搜尋與取代
$ B' S( `5 b2 C1 S       s(substitute)指令可搜尋某行列範圍。
7 R, N2 k2 g+ i) B8 S       g(global)指令則可搜尋整個編輯緩衝區的資料。! t3 f8 ?& v2 Q6 q6 f
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條) y" r2 P5 I8 |7 b8 }# }
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。9 G, ~; B" e+ D- z. Z0 E: U# F  Z/ V
       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。, T/ b, W- ?5 y. r
       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。
( c* q; m1 D4 ]- [       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。, T- A1 m! ?. p0 L
* b  ]; f( i$ t
12.恢復編輯時被中斷的檔案
  U) U& b: o4 ^+ j       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
# V% [* f% v# b: Y3 R5 D5 i       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
/ N5 _8 V, g: \+ c% b  t' F$ N6 ^       的檔案內容。/ H! T0 z, t/ H$ B6 h! @# s- @+ E+ X
       %vi -r filename
& v$ y; S# t8 u& t8 n% \, |; z6 E1 p% x- ?% K# A; ~' }
13.編輯多個檔案
7 t' U! @% P4 B! r; s       vi亦提供同時編輯多個檔案的功能,方法如下:% L" z  a! v' n
       %vi file1 file2 ..1 |+ B4 }- x0 Y$ K: V; l+ q
       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後1 _* D4 J8 X4 [& p% D" f
       再利用 『:n』載入下一個檔案。" L* f4 l3 {% y
2 c1 [6 `( M6 E2 y5 `
參考:$ f! N* [2 U! v* R6 g: R

/ b0 s8 C: }- p+ P0 m& Vhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html
- [! ]' e8 Q& C) N- T; O6 Y* A
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-3-23 19:58 , Processed in 0.072132 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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