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

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

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

[複製鏈接]
發表於 2014-11-18 08:47:14 | 顯示全部樓層 |閱讀模式
tid=95& 本帖最後由 IT_man 於 2017-5-6 23:16 編輯
4 f4 b8 k& H: P( f2 u1 z6 K7 }- {5 e/ X7 V: x5 V+ D9 {
vi指令說明(完整版)3 F4 K6 U2 Z" n+ u8 C+ o
  • vi 的操作模式/ `' w& a3 e/ w, X

( M0 d' w, J7 P# t

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

  • 輸入模式" q# [2 E4 }2 i0 f' V

$ i( m/ c6 t7 w; f
       如何進入輸入模式9 X& j! \1 u3 H- w( C
                a (append)    由游標之後加入資料。6 |  ?& L+ J' \! m! S; ?
                A                   由該行之末加入資料。
6 A4 ~% F2 X7 E0 S. A1 j4 J" B0 S  X                i (insert)        由游標之前加入資料。
1 W: ?6 h/ O+ ~1 i$ \. s  q                I                   由該行之首加入資料。
: ^/ Q7 I1 `; Y$ }2 K                o (open)       新增一行於該行之下供輸入資料之用。
9 B' {. `! G' ^' V                O                  新增一行於該行之上供輸入資料之用。2 n8 W' H; |6 r- B' `1 ?
       如何離開輸入模式
, T6 L4 B& `& F  t. H1 ^; q1 y             《ESC》          結束輸入模式。
! u' R: j, D9 V3 c
  • 指令模式
    " ?6 ^' q4 j5 s* e

3 @3 }2 S  {% I5 Z: h$ z
1.游標之移動
+ x( x+ D2 A+ b5 R1 R' X! X              h       向左移一個字元。
0 ]* ~$ k$ }5 T& F5 q              j       向上移一個字元。
9 P3 S# V' i" _8 u5 G5 r- C4 s              k       向下移一個字元。( b4 e2 O% t* i8 [
              l       向右移一個字元。
2 Q! }* o/ ^) ~+ j% D7 H; |              0       移至該行之首) Z, s( V9 m; m1 g% N; I& v, D
              $       移至該行之末。
9 a8 b) R- n, J              ^       移至該行的第一個字元處。, K% i5 d0 ^& ~9 ?+ M8 R
              H       移至視窗的第一列。. i; }( V/ f. i% s: c2 Z$ V6 ^
              M       移至視窗的中間那列。1 o% r" L) ^- t# x' B
              L       移至視窗的最後一列。* I! s* n, K. c& p8 u
             G       移至該檔案的最後一列。. D9 b3 P, R' e' N: u7 `6 x
             +       移至下一列的第一個字元處。
+ v! O8 a% B% u: N' S2 |3 p' Q# ]             -       移至上一列的第一個字元處。4 i, ]: Z% _$ y; D9 U0 \
             (       移至該句之首。 (註一)- x5 S* q5 X) _5 c+ x* ]* b
             )       移至該句之末。+ {- t8 {1 W8 ?% r# a0 p
             {       移至該段落之首。 (註二)& z+ Z, d! x1 I, J1 A0 d
             }       移至該段落之末。
# S) t+ H5 G0 T             nG      移至該檔案的第 n 列。
" }' L$ R8 W& D             n+      移至游標所在位置之後的第 n 列。) u5 _4 W; e& q$ F) q) B% @
             n-      移至游標所在位置之前的第 n 列。) i5 N% F+ P7 V1 I1 V! D. t( b. a
            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。8 X9 y! _2 k: f' x. H4 P: D
            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。' Y. L1 o. E8 d  E
            註二:段落(paragraph)在vi中是指以空白行隔開的文字。
3 M% T! j9 W$ S2 D) ~7 t9 R. c( ]4 {4 [% o& F' A# F) k+ j6 H
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。2 s) q- x" m8 |& E
           <Ctrl><b>       視窗往上捲一頁。7 M# S; N; L/ V0 L& c/ F; _& S
           <Ctrl><d>       視窗往下捲半頁。7 ]4 f9 K! M  w7 y5 {" U
           <Ctrl><u>       視窗往上捲半頁。! k: {/ e- V! k* [5 R
           <Ctrl><e>       視窗往下捲一行。0 ~7 \0 w+ S$ k6 U) I, |
           <Ctrl><y>       視窗往上捲一行。
9 Y7 I, f3 X6 T$ \- E7 ^- L! N' z9 z* u- r% u
3.刪除、複製及修改指令介紹 (此單元較少使用)  T6 {* H! I/ x/ \" B4 p
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
+ U; O2 x* w+ ?' @6 b$ X       Operator + Scope = command
' _8 ~$ ?  W2 e2 X       (運算子)   (範圍)
) Q+ w$ \% E% v+ R. n' n       運算子:  Z1 k& P# j9 i$ b5 x% n  u
       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
* j/ q3 v( e" X0 s- `7 ]4 o       y       將資料(字組、行列、句子或段落)複製到緩衝區。
0 G' ^) ?* O# F2 r, G0 Q       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
6 J# [5 Y. ?  {8 k                料放置於游標所在位置之行列下。. |! \. t: d* x& O. g2 u
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句% ?/ h& A. B& j5 T5 w5 ?8 W, @! f
                子等之資料,並插入新鍵資料。+ p* C" K9 \# t. H  o% u
       範圍:
# s7 c+ W  P+ L) d1 G& `       e       由游標所在位置至該字串的最後一個字元。' _  f* i. u* g; u& L
       w       由游標所在位置至下一個字串的第一個字元。1 U8 W- ~6 L+ G1 q) x
       b       由游標所在位置至前一個字串的第一個字元。
- Z9 y8 q4 v4 I- z" v       $       由游標所在位置至該行的最後一個字元。
* R* o) C& Z1 N5 m       0       由游標所在位置至該行的第一個字元。" n# E+ v: Q" d- J' l9 W1 m. u
       )       由游標所在位置至下一個句子的第一個字元。+ c* K* x& _8 l. t+ E3 L) B! |
       (       由游標所在位置至該句子的第一個字元。
4 {0 J- R6 ^" S4 t4 Y  n: N/ m2 y       {       由游標所在位置至該段落的最後一個字元。
, `, |* U  L9 T8 q4 K5 q4 H       }       由游標所在位置至該段落的第一個字元。) q7 K" p2 n6 z
       整行動作- L& C/ U  Q" o7 V% w" b* L
       dd      刪除整行。3 L4 y. @; R! V" }* D5 I
       D       以行為單位,刪除游標後之所有字元。+ C$ ]* T$ ?  W: l% t
       cc      修改整行的內容。8 C. X/ y; L+ d3 O
       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
$ ~( Z9 A% P5 u) Z" {  R
, l6 `) Y0 `' P- |& y* Z4 v* S) f4.刪除與修改9 L, D+ n$ `/ d
       x       刪除游標所在該字元。
) Q. p7 \, O5 h/ i       X       刪除游標所在之前一字元。& g" I0 y: p3 v' t
       dd      刪除游標所在該行。! c$ W: E" E. E
       r       用接於此指令之後的字元取代(replace)游標所在字元。1 h, I$ n  ^7 x3 Q! U
                如: ra 將游標所在字元以 a 取代之。
- O# z7 Y- _! b" z% n       R       進入取代狀態,直到《ESC》為止。0 e9 f1 o$ d0 T( {; F
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
. a: r/ j5 b, B+ ]- }$ w       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。, s4 e% i7 j. P7 d, q* X# }- g1 @
/ c7 R. Q9 t/ R* Y& S; {7 g" Q3 {
5.搬移與複製) J  X$ r7 c" }! ]' [6 Y
       利用delete 及 put 指令可完成資料搬移之目的。
3 {0 F2 B5 N3 S# k  h       利用yank 及 put 指令可完成資料複製之目的。+ _6 K. y& r9 x
       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令( Q* B9 E1 S% W3 \3 r
       可將緩衝區內的資料複製到螢幕上。* _7 T  m$ H; z- d+ Y1 Z7 a
       例:; B9 |& ?* B- M0 G
       搬移一行        ‧在該行執行 dd
/ h* k* G, o# [. V. ^" U( \0 Z" }9 A! K) t                        ‧游標移至目的地5 \( B* w: h3 W) Y8 f
                        ‧執行 p! M' |% R7 f* y: c8 `
       複製一行        ‧在該行執行 yy
3 H+ Q! |9 k8 M7 G2 H3 u                        ‧游標移至目的地
! W! ^' h- ]& U9 g7 N, O! y3 F                        ‧執行 p  n* s# f/ O2 W3 e) {6 [% t! M( h
; {9 P$ B5 H# `
6.指令重複
/ `" \8 k- @% S* q; [6 K       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n# @& F, W, O2 ~& [0 S
       次。. f# m$ p2 o; i; t
       例:: i8 w. `0 p8 j- c+ @6 a
       刪除10行                ‧10dd3 l# f7 E) P/ w* ^" l0 ]
       複製10行                ‧10yy
% z' \9 n! h$ K, v5 Z                                ‧游標移至目的地
( i1 |9 c; b! ?" D                                ‧p8 F; V0 Y2 l: {& A0 @- F2 r
       指標往下移10行 ‧10j8 g# H/ ^. e  Y

' a' D& J2 S' A! f7.取消前一動作(Undo)- j* X6 z5 A  g6 v
       即復原執行上一指令前的內容。
5 u! T. I% x- _7 X- n4 B! i6 a       u       恢復最後一個指令之前的結果。
: t( d- E- W  T2 f1 D       U       恢復游標該行之所有改變。# ^' I. w; d+ _% D$ G
2 l1 g& D) U+ p% ^  U
8.搜尋
0 P& R. S% c+ Z; v) q       在vi中可搜尋某一字串,使游標移至該處。
/ O4 T2 T& k; Y. x2 N7 b       /字串           往游標之後尋找該字串。1 h3 a, S" L7 y' o$ \# S/ ~1 i: T
       ?字串           往游標之前尋找該字串。3 X! G' [( M: w5 W$ i
       n               往下繼續尋找下一個相同的字串。" ]0 ?& t4 T% T/ B3 |
       N               往上繼續尋找下一個相同的字串。, x1 [: j# t" I# n: [

- x3 D0 U. q" e7 N9.資料的連接
5 v9 q( j) O) d: V1 U7 C, D' B       J       句子的連接。將游標所在之下一行連接至游標該行的後面。% T/ t9 e. s, Z9 y1 D) S
       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
8 F6 d+ r5 v2 z% M       (可利用a、i等指令)再按《Enter》即可。% |5 r2 y. Z1 U: F# k% Q5 D

: [1 {" g# f) l4 ~, u& E10.環境的設定  |. I, W3 }0 B5 r
       :setnu                設定資料的行號。
  r6 v3 t$ K! H- Z6 F: ?$ Y* {       :setnonu              取消行號設定。
& X. }) l4 ^" I8 h% r: u& ^5 B       :setai                自動內縮。
* c( L0 v1 M3 Z2 o! O! L/ I       :setnoai              取消自動內縮。
/ B: ~: m# ~3 c) W5 e       自動內縮(automatic indentation)
% c; W3 q; c/ d& A/ I+ r       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
  E3 ?3 P- F1 ~/ }  b       動內縮的功能,用下例解釋之:) m1 y% g6 \' {, g' c3 V
       ‧vi test
, F8 q) Q  v7 o5 Z       ‧(進入編輯視窗後)
1 }2 D: _, q/ n% f# v         this is the test for auto indent5 ]: U0 |0 g2 h% t+ L/ ~' o* D( {
         《Tab》start indent           ← :set ai (設自動內縮)
/ R. l' w8 I/ ~         《Tab》data
0 ^7 {7 E, q# h- B& p         《Tab》data
* Z  Q5 M' ]* h( E4 @         《Tab》data                   ← :set noai (取消自動內縮). K7 k9 l3 n$ d4 v
       the end of auto indent.
$ a& b: ]- z8 ~* l% e& ]       ‧註:<Ctrl><d>可刪除《Tab》字元。3 P5 K- u( j1 L# L" a

$ O! V/ I; j1 o8 E. [) A, n11.ex指令% O4 s9 x7 U( R9 A  ~" Z
       讀寫資料, t* l9 b, P* E7 w- g
       :w                     將緩衝區的資料寫入磁碟中。* c  q* l1 M5 [
       :10,20wtest   將第10行至第20行的資料寫入test檔案。! s7 _4 ]% q/ Z& Q
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。( q) ^* _$ ?, X- |: v( ?% \( a
       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
1 W& G+ }! X& L       刪除、複製及搬移; X7 d/ A% P; }
       :10,20d                刪除第10行至第20行的資料。5 T1 v, k# b% A5 A8 U" M
       :10d                   刪除第10行的資料。8 }2 L9 r) K2 p* o5 S
       :%d                    刪除整個編輯緩衝區。2 M6 O+ p( x  A" G
       :10,20co30             將第10行至第20行的資料複製至第30行之後。
+ m. \# f$ w- V# D' z( a       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。
+ X$ j$ [0 o1 Z/ {       字串搜尋與取代
: B) C. Z- r; B+ D& [       s(substitute)指令可搜尋某行列範圍。) i$ m* h0 R3 t7 k# m
       g(global)指令則可搜尋整個編輯緩衝區的資料。
  r6 M: J  s. o; `' s       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條' U0 Q, X/ s% b4 g$ Z2 ~
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
; T* z2 t/ C7 `4 |; T       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
& K0 o4 T. i% o       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。
$ y+ s. `" B/ Q3 C0 v       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。
8 d( C; }' \: N* @8 O3 @7 I3 k; J5 b( c3 |8 G
12.恢復編輯時被中斷的檔案4 n- R" G; ]' w
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未7 G* R1 U! A# v* l. I( s
       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
' n. w6 R2 P* A- V# c. N9 F       的檔案內容。; W. t2 Q3 b' l
       %vi -r filename
! c+ _  i( R  D$ }
  n' S  @* e# b- N3 @13.編輯多個檔案
& L, a; F' }  ]2 b7 S* m       vi亦提供同時編輯多個檔案的功能,方法如下:
0 f+ T- t; Q  Q+ z  I7 B+ Q$ _       %vi file1 file2 ..
8 ]; b! z% c8 X$ ]- ^       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
+ r: V5 i1 Y8 Q       再利用 『:n』載入下一個檔案。- L; G& m1 F$ z
* S' H7 s- \2 Y
參考:
7 J$ n- q8 Q% o9 ^
* i# [- A3 x3 E5 W! O: Uhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html& \) E: P1 a* D& V* k2 Z
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2025-4-5 02:47 , Processed in 0.055853 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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