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

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

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

[複製鏈接]
發表於 2014-11-18 08:47:14 | 顯示全部樓層 |閱讀模式
tid=95& 本帖最後由 IT_man 於 2017-5-6 23:16 編輯
& k0 C1 h$ n: u$ j( S9 a* p# ]8 ^+ H9 _7 d
vi指令說明(完整版), `  j- g+ V4 G/ b. w# t$ N1 f" |; _0 o
  • vi 的操作模式
    0 G, s; D7 {) i( ~7 u( t6 x# m' y

0 V. P+ `3 s) }7 p/ r/ i( E4 v

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

  • 輸入模式1 N! ~" D, a4 [' f3 v/ A" g

0 u: T2 o) L/ y  V
       如何進入輸入模式' |9 s: C, `& L: u
                a (append)    由游標之後加入資料。7 P8 V5 u6 W. W6 o( |: N8 F' g$ i
                A                   由該行之末加入資料。+ M. R. g6 x3 P7 b% j0 X; @! C
                i (insert)        由游標之前加入資料。
6 u8 g4 p+ J5 d4 X                I                   由該行之首加入資料。9 M, n$ e  t8 Z0 R* |2 O
                o (open)       新增一行於該行之下供輸入資料之用。( D2 x8 }& K. P+ a' k1 k
                O                  新增一行於該行之上供輸入資料之用。
1 L  k, C' D0 O$ q" ~  M  {       如何離開輸入模式( u8 S4 a# Q  Q7 w: _7 k, f2 c) ]- u
             《ESC》          結束輸入模式。
! y% E# z6 s+ u- ~; P$ y
  • 指令模式
    - Q; f7 o: R2 u5 o, d

. G% e6 \- r( G; K- m1 l; S( E) B
1.游標之移動' T3 a' S$ H8 J; @# o+ O
              h       向左移一個字元。' g9 F: z5 Y  g
              j       向上移一個字元。8 T  q% h( I- O; u0 ~: n2 U
              k       向下移一個字元。8 W- w& g( Q& v) I0 E5 E% M2 H
              l       向右移一個字元。: @4 {. g# o/ T: w  `
              0       移至該行之首
6 I- V0 S; F3 T) `3 L              $       移至該行之末。$ x$ a8 t% @) D
              ^       移至該行的第一個字元處。- a* m" D6 C* U9 g2 D; R3 p
              H       移至視窗的第一列。7 t3 N4 o( u$ i- p3 x% F% F  D
              M       移至視窗的中間那列。
1 x, W% |; a* O              L       移至視窗的最後一列。
$ u) y2 A& S/ K  m             G       移至該檔案的最後一列。5 [7 m8 S$ t, K0 l' x) Y
             +       移至下一列的第一個字元處。
" ?0 p0 J/ M. D1 a6 L             -       移至上一列的第一個字元處。. b, R2 M4 h6 W8 P
             (       移至該句之首。 (註一)+ H/ S7 Q3 n' V$ r, {. X& |( M
             )       移至該句之末。7 A- B3 k0 ?9 t. I. T
             {       移至該段落之首。 (註二)5 y& s, ]+ X8 \; Z* [
             }       移至該段落之末。
( D5 G3 L$ e6 T: g             nG      移至該檔案的第 n 列。
) [. K0 \  S+ q7 e             n+      移至游標所在位置之後的第 n 列。5 `; Q& q' y) Q6 V# A! u
             n-      移至游標所在位置之前的第 n 列。
9 j! o. z0 `  m+ }. v            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。+ o2 T& v; D9 D) ~% V0 ]( p# e. g
            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
' |) w' S8 e* q            註二:段落(paragraph)在vi中是指以空白行隔開的文字。
4 n7 N/ Z+ @, G6 o0 _# f( Y9 r9 f# N* E# A/ Y+ o7 H* L
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。
7 }7 j3 t2 N& u  W. f/ B- _) |  r           <Ctrl><b>       視窗往上捲一頁。2 T7 \8 Y* E9 V) B; n& b$ @  E0 ~: _+ X& d
           <Ctrl><d>       視窗往下捲半頁。
% i8 |2 x; l  V" i           <Ctrl><u>       視窗往上捲半頁。
% b( v+ k; U7 ?5 Q; k           <Ctrl><e>       視窗往下捲一行。: q7 D; q! S) d$ C3 f5 M
           <Ctrl><y>       視窗往上捲一行。
8 t0 \, E! J( b# S6 n$ }' K& N! f" O" @: Y
3.刪除、複製及修改指令介紹 (此單元較少使用)
: U/ |. G: _! [1 j$ N) D7 R6 u* n       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:* j" F( _. L) m% l, ^4 k
       Operator + Scope = command0 Q7 q  D4 a, _, W: H. S% C+ s
       (運算子)   (範圍)
  N' `. ~9 p, ]/ g% |8 q' Z       運算子:
5 f7 F+ D0 z. }7 e3 b' ^       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
0 W9 F  X& D0 D  K' n$ _       y       將資料(字組、行列、句子或段落)複製到緩衝區。1 t7 U2 b+ O+ K4 W& y! ~
       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資# d2 l2 @$ K7 e9 `  `' V% C* P3 W
                料放置於游標所在位置之行列下。$ g  o) u$ O9 q( e2 T" G! q
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句* D: }% W8 @( P3 H8 ?8 d9 J
                子等之資料,並插入新鍵資料。. ?" K! k- {- C
       範圍:
6 N6 a7 `/ @* q9 V       e       由游標所在位置至該字串的最後一個字元。# Y3 r! l6 @$ H) L0 i# k
       w       由游標所在位置至下一個字串的第一個字元。2 I) w5 N1 B! {" a* h
       b       由游標所在位置至前一個字串的第一個字元。
0 O: J, g* S, E, j" e4 J% w2 h, j       $       由游標所在位置至該行的最後一個字元。
7 `2 \; w  j- D* a- ]       0       由游標所在位置至該行的第一個字元。
* W2 _3 J$ ^% O6 v4 Y5 {       )       由游標所在位置至下一個句子的第一個字元。7 i/ E  `7 L1 p4 t
       (       由游標所在位置至該句子的第一個字元。  A. f6 N: `9 v
       {       由游標所在位置至該段落的最後一個字元。& R. _5 G! W# G2 g& x) d
       }       由游標所在位置至該段落的第一個字元。0 C* o3 d# o1 h7 t# l* e; E$ n, G0 p
       整行動作) o+ s; u- N* u& y9 T, @3 a
       dd      刪除整行。3 @4 S2 |) l9 ?" I/ Q9 f
       D       以行為單位,刪除游標後之所有字元。
) i. `+ r8 _0 t( C( @( B- g       cc      修改整行的內容。* w9 R* y, V; D$ q9 }( b
       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
- l' `# `! G  u9 m5 k9 T: f
. g0 K1 Y7 w: @0 G! i4.刪除與修改
9 g- }2 ]5 n# v% p; e% S       x       刪除游標所在該字元。2 E- i+ ?* X8 v" ^% J
       X       刪除游標所在之前一字元。
* v- ^1 V/ ^- B: c       dd      刪除游標所在該行。1 K4 P1 w' r4 z: x
       r       用接於此指令之後的字元取代(replace)游標所在字元。! x( S3 Y: c# M  P
                如: ra 將游標所在字元以 a 取代之。+ T! r4 t, J: {3 m5 k! N
       R       進入取代狀態,直到《ESC》為止。, k: P  b; o1 [$ Y5 H( `
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
1 w* c8 c' K0 V! [7 g3 P4 V5 b       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。/ z; f* _, x6 j9 a0 p9 j* L

  c% }. s/ @; T0 }5.搬移與複製
2 [& g- m% h* C( _4 Q  K9 W       利用delete 及 put 指令可完成資料搬移之目的。0 M  O6 m" {$ d
       利用yank 及 put 指令可完成資料複製之目的。
' v1 {2 _7 ~; \7 @/ Z) Z, u       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令7 O0 ^+ W$ C! x
       可將緩衝區內的資料複製到螢幕上。
7 b$ W6 h4 h+ Q# Y       例:
& z/ w4 M  z  r/ t       搬移一行        ‧在該行執行 dd0 \- x- y" D& _9 o7 n1 B; U% V
                        ‧游標移至目的地
6 M/ G/ [' v* n3 Z. V1 Y; k) t                        ‧執行 p% j! N4 Z( R" g' T) `
       複製一行        ‧在該行執行 yy! |2 |; r/ A3 G2 t# j/ `
                        ‧游標移至目的地
$ ?3 ^, f8 \) P7 d4 f2 W5 J                        ‧執行 p* h. r7 v& |6 q( E# t

, V, g% Z6 K0 D4 v: ^% O6.指令重複
& D  B' S8 t* |: ?       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
. D& f/ ]$ i" f7 C" @. Z       次。
# v) q( {* L1 a: S% V  i+ X       例:; A% n: E8 j0 z, g+ E% D
       刪除10行                ‧10dd
/ C: s! f; L. W8 j  T       複製10行                ‧10yy
1 @* b6 X: L* |+ {! L* ]1 e                                ‧游標移至目的地8 D" R0 v5 ?% r/ N1 `
                                ‧p9 z# k- y4 Q" Q! ^
       指標往下移10行 ‧10j8 s# x3 g4 o+ ]! }

1 |6 m! Y/ O" ?+ c+ C7.取消前一動作(Undo)
7 D0 p9 R: X  E$ x5 d& |       即復原執行上一指令前的內容。  D) A! S; R+ `# P3 F) q
       u       恢復最後一個指令之前的結果。
  l! r3 R; N) U* R       U       恢復游標該行之所有改變。
6 K, J" e' u0 t2 o5 K! W
$ W# x9 d2 l5 P, X% `8.搜尋, O+ K5 |- s7 x! y3 [1 u+ M
       在vi中可搜尋某一字串,使游標移至該處。% `( @4 U% d* g# o
       /字串           往游標之後尋找該字串。( E3 u! J' M7 ?/ ?& u0 K' P: ?
       ?字串           往游標之前尋找該字串。
& y0 e% m  y/ @       n               往下繼續尋找下一個相同的字串。5 Q9 t' ^& o" [
       N               往上繼續尋找下一個相同的字串。4 ^0 ~& W; V/ g1 m. P
% n1 E2 ^) K4 a; ^
9.資料的連接( }. Z% z& a8 L
       J       句子的連接。將游標所在之下一行連接至游標該行的後面。+ g" Z. j! a- E/ y1 b$ u
       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式+ r+ B8 {9 H+ e* \  w- V( e8 u
       (可利用a、i等指令)再按《Enter》即可。
3 R! q. g( S: F$ Q+ {# n( R+ S+ X' e
10.環境的設定
' v$ Z) ?7 s. `+ Z$ B       :setnu                設定資料的行號。6 l2 b$ |, j$ d( }" ^; W
       :setnonu              取消行號設定。
" p& ?6 w  L2 v9 _3 \9 X       :setai                自動內縮。
8 K) @% ~6 k4 Q$ [* v       :setnoai              取消自動內縮。
' a, L- _0 L2 _# s: z       自動內縮(automatic indentation)( U0 y" I5 F# |2 y) ?8 p8 D3 @
       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
; @% L( i/ ?- k       動內縮的功能,用下例解釋之:
  u8 s# A; f" l2 u: R       ‧vi test$ J# r, E5 {% Q9 z" j$ T9 A% w* C
       ‧(進入編輯視窗後)
1 Q) r8 ]$ i; Y( [* z, W8 `; _         this is the test for auto indent
1 L' ~- [% _. z9 E         《Tab》start indent           ← :set ai (設自動內縮)
  M" y; n3 \1 u# O+ c, S8 \, e# }, H         《Tab》data
: ^0 r2 m, E" M& R5 l         《Tab》data
. b$ H: {* }  q/ q% K, c2 B7 t         《Tab》data                   ← :set noai (取消自動內縮)
& ]) ]# C3 m- L4 o- I/ l/ Q       the end of auto indent.
+ T3 u; m) r. J6 u& O0 ^7 v       ‧註:<Ctrl><d>可刪除《Tab》字元。6 R5 `2 F+ n; R- Q4 s

+ O9 K1 A: K/ M% M11.ex指令- h3 c+ O9 w& H  K
       讀寫資料
5 }7 _+ I) ^" S) ^% i! I       :w                     將緩衝區的資料寫入磁碟中。
9 q3 @2 j' ]4 L3 P9 r* z       :10,20wtest   將第10行至第20行的資料寫入test檔案。
( r9 A. c' E$ N1 S& V       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。2 P6 b5 S# a: Y2 }/ ~; T
       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
& ?; X  j" {- o# |0 i) e; O/ X       刪除、複製及搬移. h- E5 E% i6 @% |
       :10,20d                刪除第10行至第20行的資料。
8 M- J* [( C8 }# O, a       :10d                   刪除第10行的資料。  C$ ~: W5 C+ b; m
       :%d                    刪除整個編輯緩衝區。. i( N  C* f. J# v0 y
       :10,20co30             將第10行至第20行的資料複製至第30行之後。( Y) z. }; ^1 v# o# k1 A
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。0 P) z; p. V7 z& K4 @  }
       字串搜尋與取代
9 j" `7 V) i, g$ Y       s(substitute)指令可搜尋某行列範圍。3 {, P/ b" W$ y" c4 s' c; O
       g(global)指令則可搜尋整個編輯緩衝區的資料。
0 {. b2 t4 g" z* j* N8 t+ Y" X  P       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條. I: p/ j0 v" |0 M$ {, h
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。* c8 ]/ x. M1 @
       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。' w" k) @+ ~- @/ T5 x, [
       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。1 C" ~, h" K$ }7 }" j( z
       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。
$ N. q/ T& y  F8 A% o1 E" |6 T9 p+ e
12.恢復編輯時被中斷的檔案
3 |, C8 O% n# v) p+ }       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未* ]. b" _0 I" M) v+ v" j
       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
) o! K; K8 d3 p( i0 G       的檔案內容。
% L4 z  K( C# B! P       %vi -r filename0 i/ m* m; Q3 s% m3 O+ }
' l* Y; S0 O8 x1 _3 m2 M4 o
13.編輯多個檔案
# C$ J! \  e$ j: q' @% L! `$ y5 P       vi亦提供同時編輯多個檔案的功能,方法如下:6 O) |0 d$ I( d" G
       %vi file1 file2 ..
$ ~3 Z& }: N' W" Q6 p3 ^/ l       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
  X2 H) S- c8 O: Q4 }       再利用 『:n』載入下一個檔案。
& L- c) v% O+ u$ N- F  t+ l8 S
7 N$ }; A: |( d2 x4 O參考:
/ x) n! i; E9 q+ [3 Q1 \, f" B+ y
5 A; X6 ~, V( W/ f! Vhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html
5 k; P  R/ u' e. `3 D1 r( x
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2025-12-13 12:52 , Processed in 0.090192 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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