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

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

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

[複製鏈接]
發表於 2014-11-18 08:47:14 | 顯示全部樓層 |閱讀模式
tid=95& 本帖最後由 IT_man 於 2017-5-6 23:16 編輯 : e5 u8 Q! V1 Y. [) n& ?
1 k; ]( Y1 @: D8 g  v. k
vi指令說明(完整版)
2 K: _0 S  B6 u6 f: P  `
  • vi 的操作模式
    ) g/ A6 K4 ]6 t

- K7 `6 k9 |' x7 h$ {0 ^7 @- ?/ Y1 Y

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

  • 輸入模式
    / e% J- {2 w# n; v) r+ D


5 U$ H, t0 {% e2 ]3 m       如何進入輸入模式
( L# a. e9 }$ u1 K/ k1 w# s                a (append)    由游標之後加入資料。
9 ?! i+ t# n- u2 ]6 M                A                   由該行之末加入資料。
8 q8 g1 Y% _) K                i (insert)        由游標之前加入資料。; r2 \) L0 Y7 M+ _7 c3 G4 u. |2 g
                I                   由該行之首加入資料。5 G# ^9 p. C6 d* A, N
                o (open)       新增一行於該行之下供輸入資料之用。
0 ^! x4 l7 r# p                O                  新增一行於該行之上供輸入資料之用。
$ D- I' e) q( }( r2 z6 r       如何離開輸入模式
! ], Z' ~! B3 e$ f             《ESC》          結束輸入模式。
  Y, k- J% U* J; M8 F: _
  • 指令模式
    / X  Q$ ?/ C  I' n' V6 C( u1 s* z( q1 D4 a

  H! f5 L. B0 u+ J, q
1.游標之移動' ?! k' C+ w4 m: S$ |
              h       向左移一個字元。3 Q4 j3 P' g0 N
              j       向上移一個字元。) X& k# T# I: I7 C  x- E( o
              k       向下移一個字元。3 ^" K$ f3 k3 F( d  O3 t1 ^: V- A7 }
              l       向右移一個字元。' _/ Z& @0 C  j) ]
              0       移至該行之首
2 r. m& U, M; B5 G              $       移至該行之末。2 ~% v. O& t" ?8 d$ Y
              ^       移至該行的第一個字元處。
& B( p+ C$ s. U/ N              H       移至視窗的第一列。
8 H3 I( w3 _/ m# C3 U8 L6 @; a" i              M       移至視窗的中間那列。' ?0 A4 [& e" D+ ^
              L       移至視窗的最後一列。. i! e$ I2 V# {9 B
             G       移至該檔案的最後一列。
: d1 V1 Z& F0 y& P. x9 H! J             +       移至下一列的第一個字元處。
$ a. o; T! {8 F3 T$ ~             -       移至上一列的第一個字元處。2 V  b* `8 j/ u/ X, h0 m
             (       移至該句之首。 (註一)
  {# E& U1 }+ W: W& b5 S6 r             )       移至該句之末。- K9 t/ m2 m. }* a" r* y- X9 [
             {       移至該段落之首。 (註二)* i+ a; T; V: o3 Q
             }       移至該段落之末。1 o! }1 b. @# t9 g
             nG      移至該檔案的第 n 列。
% D5 @. N4 O7 |, U- n- s1 e" |5 [             n+      移至游標所在位置之後的第 n 列。* v$ t2 V; w* q$ |" a
             n-      移至游標所在位置之前的第 n 列。1 m5 |' }$ _: Y
            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。! e3 Y1 O% E6 v  ?
            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
0 h1 K! `: `- v1 ^            註二:段落(paragraph)在vi中是指以空白行隔開的文字。
9 g/ w& \6 X1 x9 ^) z3 a& A9 p# }2 {3 C8 g  C/ U
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。
: X9 T  E9 S: N" t# u           <Ctrl><b>       視窗往上捲一頁。. z) x8 a/ s% X  n/ T1 |
           <Ctrl><d>       視窗往下捲半頁。0 K1 ?1 r) q# _) z/ `
           <Ctrl><u>       視窗往上捲半頁。
; P! r) H# {5 r$ R           <Ctrl><e>       視窗往下捲一行。& n. L! {7 e: z% g9 v
           <Ctrl><y>       視窗往上捲一行。. e+ T3 g2 T* B- a
) |- u' M8 X2 E
3.刪除、複製及修改指令介紹 (此單元較少使用)/ P3 }' i6 T& d5 @+ c5 k; F9 V" h
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
* d$ v/ y9 x1 a1 e( k( i& f/ S       Operator + Scope = command
& B' `7 X* m* e# o- U: k9 Y$ {       (運算子)   (範圍)7 s7 ]. z# `' }+ o. f# n- o" Q
       運算子:
* b" K# N- q4 j% u, M) |       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。9 R) Z: P! O* M5 G, ]( T7 ]% i6 g
       y       將資料(字組、行列、句子或段落)複製到緩衝區。. H- X* Z7 C3 t4 e! Z; n1 f
       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資' l4 x6 B' C) F1 k
                料放置於游標所在位置之行列下。
9 c/ Y) R5 H: H       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
4 n. k; k* i0 B. v) W0 s; N+ E                子等之資料,並插入新鍵資料。. M7 S, \  w& O/ m) `
       範圍:+ G7 W; i; E! ^& h; N
       e       由游標所在位置至該字串的最後一個字元。$ |- E8 A2 x% p, y4 H" v- N
       w       由游標所在位置至下一個字串的第一個字元。( o: r7 K: ?0 Y) `6 s& d9 K2 V
       b       由游標所在位置至前一個字串的第一個字元。
: x  N. c8 V  `) Z7 Y' V  F       $       由游標所在位置至該行的最後一個字元。
- w& [! K7 ?* y9 t7 c5 F( R6 K0 [, B       0       由游標所在位置至該行的第一個字元。
9 U  ?6 J6 A( q0 g       )       由游標所在位置至下一個句子的第一個字元。
# G3 E, T# c9 _4 K' f& a( g       (       由游標所在位置至該句子的第一個字元。
. J9 ]2 |% G, v3 w2 a       {       由游標所在位置至該段落的最後一個字元。; T% N8 u) V$ T4 h8 @7 G# W
       }       由游標所在位置至該段落的第一個字元。
. N" ~0 r+ P' M. X       整行動作3 l' ~* m8 v0 d% h4 t
       dd      刪除整行。
% a& u/ B* @9 D; g8 }' _- A  t       D       以行為單位,刪除游標後之所有字元。0 ?8 V$ w8 l$ w3 u1 X
       cc      修改整行的內容。
* y) q; D0 \% x6 S" S5 m       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
; ?+ p' |6 D$ Y' @. p  ]
( [9 v/ F4 E8 Z6 _0 Q4.刪除與修改
3 q& Z) |9 T9 m6 Z       x       刪除游標所在該字元。$ a) d& O& J6 z0 i9 I
       X       刪除游標所在之前一字元。
+ u" F) [! F0 L- f0 _) _  b' N  p& b       dd      刪除游標所在該行。
% R; d3 C9 q6 ]2 P- Z0 e       r       用接於此指令之後的字元取代(replace)游標所在字元。- Y/ \: z  }1 q
                如: ra 將游標所在字元以 a 取代之。
) O, M- z0 |: x% ^3 B9 [" F       R       進入取代狀態,直到《ESC》為止。
7 \9 x! O, x) {2 g       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。1 {) W6 E& t1 ?
       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。
5 @. C* h/ S. t8 f# q# f8 w+ l
2 P: ^- v7 R) D: d5.搬移與複製, ~) G6 x; L3 f* ~# E
       利用delete 及 put 指令可完成資料搬移之目的。
* M( E" N2 r1 z! s       利用yank 及 put 指令可完成資料複製之目的。
/ s# T, o9 s+ b; ?' A       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
$ G1 R) X9 N2 J# [8 G3 ]* w9 p; J       可將緩衝區內的資料複製到螢幕上。' d1 a2 S, t0 Z
       例:" s3 t0 j' v8 G2 R
       搬移一行        ‧在該行執行 dd
3 B1 B' ^% f/ P+ ?                        ‧游標移至目的地
* D0 G8 I, y0 z- N                        ‧執行 p0 Z7 u7 b, l% }  I
       複製一行        ‧在該行執行 yy
9 y3 Y4 `1 W! @$ Z1 I+ J( z) Q0 \                        ‧游標移至目的地
! @! S+ V/ i8 Y+ W6 ^                        ‧執行 p& }. |  O' o$ U0 p

- Z" A! C0 _0 w4 J6.指令重複
* |3 e1 _* t* q0 d  m) ^       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n7 Y1 B8 h6 u$ j) V3 K# }
       次。8 w, t$ S) @6 i  |. o8 E/ G3 @
       例:
/ n/ F& X' X4 t& E1 ]2 [       刪除10行                ‧10dd
" J7 b4 T- g% U; N       複製10行                ‧10yy, F1 _2 _5 K) B( m: C# I
                                ‧游標移至目的地
" M" i0 }2 a5 U2 p& s: p                                ‧p# m& @# m2 ]4 x4 v
       指標往下移10行 ‧10j
8 O* U8 h5 b. L5 _3 w8 z- ]; T+ G7 [$ P( m  `$ L
7.取消前一動作(Undo)
* k2 D' m( l* C; o, e& h       即復原執行上一指令前的內容。
% n9 X7 x+ `) N4 B. \       u       恢復最後一個指令之前的結果。
. X8 U; U  A  X5 o- m& R8 C; `6 d. t       U       恢復游標該行之所有改變。
& b2 G, U6 r6 C  n% o6 ]# I9 D5 r; H; k% c; C
8.搜尋* s* Q) D: `" W& f; S
       在vi中可搜尋某一字串,使游標移至該處。6 L) V2 k! k; ~# k( L) U7 v
       /字串           往游標之後尋找該字串。% {9 L( Q; J# w- V1 C/ Y
       ?字串           往游標之前尋找該字串。6 l( S& `- U1 \$ w3 Q8 Z7 F# K
       n               往下繼續尋找下一個相同的字串。
2 e, }/ `; u6 j0 k/ p$ P# h* |       N               往上繼續尋找下一個相同的字串。
* ^0 ?. V6 h: W& U  ]# {6 `
$ S7 S. D& l- }, h* R, y1 |9.資料的連接
+ c3 |+ m9 j* |3 K% A       J       句子的連接。將游標所在之下一行連接至游標該行的後面。$ L) ~0 \. J( q/ n
       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
/ G3 q0 I7 t, I       (可利用a、i等指令)再按《Enter》即可。
$ P; [  V" S$ c4 i$ K0 P# a  g' C# O6 s# P) g
10.環境的設定
$ s0 E6 c, V7 x  T( C       :setnu                設定資料的行號。
5 |# f; R5 b' B9 w4 b9 x       :setnonu              取消行號設定。, H/ r; K2 F) A3 b
       :setai                自動內縮。% L2 t" U# e; P5 S
       :setnoai              取消自動內縮。2 G7 z8 D9 T2 i6 K& N
       自動內縮(automatic indentation)! n& K1 e2 m2 T/ p$ p5 X
       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
& x. c# s* |1 @& V       動內縮的功能,用下例解釋之:- `+ A5 M" z$ E8 A
       ‧vi test
5 j% g8 Q% P- W- g) W       ‧(進入編輯視窗後)
( S4 P1 Q9 g+ ~& }$ d9 x         this is the test for auto indent5 g8 c+ u5 _+ }4 v1 r& C
         《Tab》start indent           ← :set ai (設自動內縮)
% I1 T2 w- _9 W, W, `         《Tab》data
6 s9 K8 c( F8 F" Z1 v1 i         《Tab》data
  h3 c5 {% {- b* L         《Tab》data                   ← :set noai (取消自動內縮)/ N9 d& O4 R/ M$ g* x6 E
       the end of auto indent.
: A) r7 i# e6 m  k1 D       ‧註:<Ctrl><d>可刪除《Tab》字元。2 r) u. c, l- u; A! ~
3 P/ ]( L; c8 s% ^) B
11.ex指令" G. {' V2 A* d4 I- ]$ B
       讀寫資料
4 T# `5 ~0 r1 `1 M# s& n. R0 l- d5 h       :w                     將緩衝區的資料寫入磁碟中。  B8 x5 ]' w7 \& O* `* S$ C
       :10,20wtest   將第10行至第20行的資料寫入test檔案。) X% P, H+ M, @$ t( H: F
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。
$ P7 [6 p3 A2 ~- Z) Z       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
0 o1 x* @2 X' `0 t       刪除、複製及搬移9 u7 c0 E1 l. N+ D2 {
       :10,20d                刪除第10行至第20行的資料。0 S" H9 v5 ^1 t, a
       :10d                   刪除第10行的資料。! [( a# r# v* q8 ~/ y
       :%d                    刪除整個編輯緩衝區。1 Q) B) |1 U3 }+ S0 m7 j
       :10,20co30             將第10行至第20行的資料複製至第30行之後。" Q2 b; m# k4 g/ i6 p0 ~
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。
5 T+ U" I- k2 ^& L; n       字串搜尋與取代
/ p( }/ s. e8 }" M       s(substitute)指令可搜尋某行列範圍。
' ^% k6 I% ?+ S8 b       g(global)指令則可搜尋整個編輯緩衝區的資料。
) `* z( R6 U! [8 B1 l) I% w+ B       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
0 F0 b8 @8 }+ e+ Y2 S       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
  P6 g$ N" B# J, L       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
2 O+ F% y- ?2 i3 x5 T" t       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。
  ]* t* w* C/ O! @       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。" a/ T/ b( Y: V) [$ X+ Y

! h/ p) Q2 x5 j, b* ~9 T# _+ j12.恢復編輯時被中斷的檔案
, K6 S) Y2 c( T# i2 E1 K# l2 h. R       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
  }. ~7 b" w% e' L+ |- z: u/ [  A: j4 ]       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前. ?/ D3 E4 q# V* B1 j9 _8 D
       的檔案內容。
; P' ~1 K+ E# k7 N       %vi -r filename0 i( @0 @# Q7 H2 r

: g8 I) J, a3 R13.編輯多個檔案
2 o8 Y8 B7 M- z" P       vi亦提供同時編輯多個檔案的功能,方法如下:
  Q4 G! _- l7 e; y5 C0 s( o# K       %vi file1 file2 ..& E, ^7 W8 [* z! ~1 }- V
       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
% ~2 f& t/ W/ g- ~       再利用 『:n』載入下一個檔案。
: m; s0 z* k( ~* P  z' O4 |  r5 W  h( b, c
參考:" t$ ^  C; O3 ?% [" f3 ?9 w% K( V* Q
$ @5 J  r2 r+ i8 \# v6 N4 I
http://chunchaichang.blogspot.tw/2010/08/vim-s.html/ H9 Z) ]6 ?% C+ i! {/ A, `5 B
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-3-23 17:03 , Processed in 0.077873 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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