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

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

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

[複製鏈接]
發表於 2014-11-18 08:47:14 | 顯示全部樓層 |閱讀模式
tid=95& 本帖最後由 IT_man 於 2017-5-6 23:16 編輯 , Y# t5 ?9 O9 Z' e* p

' P2 Z% }& V4 _2 L  Yvi指令說明(完整版)
9 j9 L# H7 Q0 C! Z
  • vi 的操作模式: Z! ]) w/ b! S; t1 o


1 R/ `' ^2 ?, L/ R/ U

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

  • 輸入模式2 B: n, |( b2 Z! q+ l% S

! p* b2 G! {# g; X
       如何進入輸入模式) s! a! k' G6 ~3 u: v* ^
                a (append)    由游標之後加入資料。% Q* ]' i* y- c3 n0 [  F  f& M2 M
                A                   由該行之末加入資料。
; K' |1 `$ U: I                i (insert)        由游標之前加入資料。
# K" {& t. u  |, k! _) ]/ O  [                I                   由該行之首加入資料。3 V# }  A* @8 I, _+ \
                o (open)       新增一行於該行之下供輸入資料之用。
9 ~/ j' A1 A& C' c0 K; l                O                  新增一行於該行之上供輸入資料之用。+ ~- Q  u; u  K# \2 m8 E' q
       如何離開輸入模式
2 b9 P2 Y& @1 n             《ESC》          結束輸入模式。
& g( O' h/ X8 _- s1 G3 o
  • 指令模式, A( B* R0 _& M% Y+ a


6 y7 [+ O% c+ e6 _1.游標之移動1 ^2 ?8 m7 o7 B1 q9 N( Z- T4 S
              h       向左移一個字元。
( W6 {# J: U1 n6 D* V# ]- a              j       向上移一個字元。2 Z) a5 U; O+ [- n- O3 ]3 h
              k       向下移一個字元。
) [2 q8 D, H) U' u8 J              l       向右移一個字元。1 a: ]" Q% R/ `2 }3 y7 Y
              0       移至該行之首: x2 S, ^+ p8 {9 [. y$ O9 Q2 A
              $       移至該行之末。! e% F4 C* e3 X2 A9 c+ ?
              ^       移至該行的第一個字元處。
7 U7 r) P: Z  E1 d* ~, k              H       移至視窗的第一列。" F4 ?; C& C! u8 P( c" o) y
              M       移至視窗的中間那列。. n" S( E! m9 o- Q" a$ [$ t! m9 {
              L       移至視窗的最後一列。
$ V9 z+ E0 Q7 D: I* L* X             G       移至該檔案的最後一列。0 ^& t' `0 E! Y5 i- z8 I. N
             +       移至下一列的第一個字元處。- q; d6 g0 n5 {- l
             -       移至上一列的第一個字元處。' d! k2 N, x3 ]& K
             (       移至該句之首。 (註一)
- q6 Z1 E0 O$ k  x9 R             )       移至該句之末。/ K. C7 N) Q: b
             {       移至該段落之首。 (註二)4 b) ?4 C7 h0 D1 _6 b- R
             }       移至該段落之末。" v2 ?; }0 x1 l5 M: c& a
             nG      移至該檔案的第 n 列。
3 ]/ ?* H) t+ {  E' h3 N3 p             n+      移至游標所在位置之後的第 n 列。
' H, |: t* B3 U             n-      移至游標所在位置之前的第 n 列。6 l' `9 U. ~/ ~
            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。3 |' b& P+ U6 r9 P( L9 }
            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
5 ^7 [# B4 u$ _" \( f            註二:段落(paragraph)在vi中是指以空白行隔開的文字。
  ~( q- Q4 @3 ~! O! d8 t' e% \0 g- q
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。& U4 E) [' Z8 c0 T4 ^
           <Ctrl><b>       視窗往上捲一頁。* ]0 j3 V0 m# W: ^4 t/ M
           <Ctrl><d>       視窗往下捲半頁。
% u% u' Z! P2 \/ O! ]2 ]           <Ctrl><u>       視窗往上捲半頁。' v$ r# ^% Z8 p, M
           <Ctrl><e>       視窗往下捲一行。! v  b+ X. M" G0 u4 S$ g
           <Ctrl><y>       視窗往上捲一行。6 N$ a( Y& _% [" ^$ q" |

/ U$ U1 `/ }7 d* [4 |3.刪除、複製及修改指令介紹 (此單元較少使用)1 x1 d. t( J/ b) r  T5 H
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:9 a& F0 p- N5 E7 C
       Operator + Scope = command
8 w2 O- A, R$ V2 v       (運算子)   (範圍)
# D& b# `  V6 _/ [% d: W) h! M       運算子:+ b0 _0 O1 [% u# T) y' R+ F
       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
6 p) l0 O1 J/ g$ F: p# w       y       將資料(字組、行列、句子或段落)複製到緩衝區。
9 P" N" ?( Q# y       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
* K$ B' \. W2 @/ \. y; o                料放置於游標所在位置之行列下。
& ?/ f, U7 e7 }9 }& w9 {# \8 @/ T       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句2 F+ ?! x3 c- f# c- X; D3 |
                子等之資料,並插入新鍵資料。  M$ y# L5 A6 v# q& |( z
       範圍:# j8 l3 y) b' Z, z8 U9 x0 U* j
       e       由游標所在位置至該字串的最後一個字元。% D: I. s) F! M
       w       由游標所在位置至下一個字串的第一個字元。
; c, `# h& j/ K       b       由游標所在位置至前一個字串的第一個字元。3 G& Z* M: y* H- C
       $       由游標所在位置至該行的最後一個字元。
' u) ~, T$ L; W3 c: g       0       由游標所在位置至該行的第一個字元。0 x  n9 q$ N: `- C: d- G
       )       由游標所在位置至下一個句子的第一個字元。# x, ]4 Y9 U! ?- j9 g2 r2 M
       (       由游標所在位置至該句子的第一個字元。' [7 e% f' f3 K2 y7 {# n
       {       由游標所在位置至該段落的最後一個字元。
$ u" s. C5 V: P2 _) T) v) z       }       由游標所在位置至該段落的第一個字元。
1 e9 P( t3 C, w3 x/ s       整行動作
2 N% R. {1 i0 d       dd      刪除整行。7 Y' n- U% N+ Z4 L( A* }# u+ F  L& I- v
       D       以行為單位,刪除游標後之所有字元。
5 ]% M  h6 Y% z! X3 W* {7 ~2 J       cc      修改整行的內容。$ H7 D  d% N5 H' z+ m3 ^7 B
       yy      yank整行,使游標所在該行複製到記憶體緩衝區。  {7 J. H4 R8 d* q
8 M* K% f; m: q1 U6 Q& h5 D( Y6 k- q
4.刪除與修改. \3 F* T3 h6 }
       x       刪除游標所在該字元。2 }, g$ b  P  {- q7 `/ P* v3 E2 b. J
       X       刪除游標所在之前一字元。
* g) c' u- i& [       dd      刪除游標所在該行。  Y% A' z1 C+ A" o
       r       用接於此指令之後的字元取代(replace)游標所在字元。
2 V8 U. d- W' Q& y, [                如: ra 將游標所在字元以 a 取代之。
# B8 L1 @! b# l/ v+ R       R       進入取代狀態,直到《ESC》為止。0 Z8 _1 V! {$ c7 H0 w
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
1 h8 ?8 Z) v1 X% ^# T1 X7 V       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。
* I& \; k% g5 K- d6 R  D" [- e! Y5 @* j. R% t
5.搬移與複製1 N9 X5 V$ Z. M: X$ n
       利用delete 及 put 指令可完成資料搬移之目的。
& J8 A: s' p$ H6 e$ ~3 I- g       利用yank 及 put 指令可完成資料複製之目的。
; r2 W3 j& b+ x0 Q       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
- {( \/ {3 d, ?6 l6 o2 l$ |       可將緩衝區內的資料複製到螢幕上。
5 K- H% ?. |3 E! v2 u7 C: H       例:
8 t* t) z" j# M1 d       搬移一行        ‧在該行執行 dd$ s2 A0 F) @$ p) Z/ b, ~7 n, U: P
                        ‧游標移至目的地2 b$ f( i6 B2 Z6 J. T
                        ‧執行 p
) n3 ?5 V6 D8 {       複製一行        ‧在該行執行 yy" F6 Y/ m& p6 U2 w  ^# A  \
                        ‧游標移至目的地+ z$ }3 V! a- C% O2 u
                        ‧執行 p
6 M0 [$ s0 ]" Y! w" r
) w/ l6 U+ ?; a8 A# V* [" Q/ L+ T, z6.指令重複
& K& M( Q/ g: k1 b       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n" d) _' X. ^/ O7 h6 [! W4 x
       次。/ y4 h1 d2 k1 T" p7 y  n5 x. s
       例:
$ v2 R& d+ m7 @# b2 C       刪除10行                ‧10dd- r$ k! @1 ^, Z9 Q2 O! _
       複製10行                ‧10yy% @; g/ v7 `) |& N
                                ‧游標移至目的地
, M4 A2 l6 ^+ b9 M                                ‧p  U% g( R* V% O! B  M& T0 L* _
       指標往下移10行 ‧10j
+ [) }4 O3 u4 a4 y8 r; j- v% w4 X- J. c/ r) B
7.取消前一動作(Undo)3 q8 K. K6 Z3 o9 M; }) B
       即復原執行上一指令前的內容。1 T, y( }4 ]4 L/ H
       u       恢復最後一個指令之前的結果。
& X: |0 X6 b( U1 G0 b       U       恢復游標該行之所有改變。8 p- {' C+ e0 y$ `& A0 E( H" y5 V4 H
4 c1 b- V6 D5 W. i0 [; A- g% ^
8.搜尋, g9 t3 v' b8 K, T
       在vi中可搜尋某一字串,使游標移至該處。2 O1 j; M1 t" _3 d
       /字串           往游標之後尋找該字串。) e+ O8 O/ s& A
       ?字串           往游標之前尋找該字串。; F; Y; H0 S- j% P# P
       n               往下繼續尋找下一個相同的字串。9 p& T# v" P# r( {6 V8 z
       N               往上繼續尋找下一個相同的字串。
  }3 z% r) S! t
3 S# v, \9 i4 H8 b& M0 C  \0 m# F9.資料的連接: ~: w' y0 U+ N4 G" c* u  q
       J       句子的連接。將游標所在之下一行連接至游標該行的後面。; j/ l7 S/ e: b8 m6 Q
       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式+ G7 @+ `3 E8 X
       (可利用a、i等指令)再按《Enter》即可。5 A7 `. u8 R& s9 I& j$ T8 `9 ?
/ `1 P6 S# \2 x
10.環境的設定
! B+ I& K5 ^. X$ l9 T/ n4 Y9 c       :setnu                設定資料的行號。
9 f1 z+ T7 i& d5 x$ r8 C       :setnonu              取消行號設定。# d' X, ]% u; N0 u
       :setai                自動內縮。0 J- N; {" O1 l4 C; @6 ^3 A8 C
       :setnoai              取消自動內縮。3 [; P, \# a& J( d* p( O5 X
       自動內縮(automatic indentation)
- k: ]% [6 M9 t( O" v4 r       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
# Q) U6 i4 S# l* D+ r       動內縮的功能,用下例解釋之:
0 ^" J0 C0 E6 ^6 ^* {- ]       ‧vi test
5 j8 X4 ~0 \. @2 l       ‧(進入編輯視窗後)
5 {3 ]* J! P1 x" q2 Y/ j         this is the test for auto indent- O$ h) v! M: @) d& V
         《Tab》start indent           ← :set ai (設自動內縮): y4 J& b: b+ X
         《Tab》data/ Q5 @; O& z) M' s0 E$ w( \  A+ t
         《Tab》data* z) U' {3 D  C, f, k$ T$ [
         《Tab》data                   ← :set noai (取消自動內縮)
. W# w) H' [) m( y* F- Z8 y+ _6 T       the end of auto indent.8 r/ H" W9 D5 H" @
       ‧註:<Ctrl><d>可刪除《Tab》字元。3 O/ w& B! G9 p  |
& \; q, u$ W) B7 O9 v
11.ex指令
, p" ]( q0 n. M8 Y2 X' Y8 l/ R       讀寫資料
3 N( \' G9 V0 d* O6 @' c3 L       :w                     將緩衝區的資料寫入磁碟中。
7 ]6 |* `1 f" Q       :10,20wtest   將第10行至第20行的資料寫入test檔案。
& l( x! D4 l7 Z( V# n       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。: E* C; w& E; f3 o9 ~2 p
       :rtest                將test檔案的資料讀入編輯緩衝區的最後。# l% t4 e7 R" E: w  c, A# n' ?
       刪除、複製及搬移$ b) f" y0 A! n
       :10,20d                刪除第10行至第20行的資料。0 p# }1 P. d4 ?+ x  x
       :10d                   刪除第10行的資料。, D3 b) m' S) g# t1 R9 K
       :%d                    刪除整個編輯緩衝區。) J: t/ v; i# E
       :10,20co30             將第10行至第20行的資料複製至第30行之後。
& k1 _! k2 i3 @& s       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。3 \( t; y- p* N: k% D8 g7 x, K
       字串搜尋與取代: v" v% a( M+ y& z1 |8 y* h: ^4 m
       s(substitute)指令可搜尋某行列範圍。
! q) O$ h: n' @' n1 R1 |8 j       g(global)指令則可搜尋整個編輯緩衝區的資料。
7 H+ C9 j! R: J. H& d4 u       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條5 T( [: P9 C3 V5 l2 `/ I: C5 J
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
  w: q1 C, u% Z! v" ^       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
" [. U  ?! Z, b9 Q; N6 l       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。9 e: ^7 r) h7 Y; C+ J2 F
       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。
! z) X8 d0 X- {( {; ]- a+ G* h
; P0 w3 s" X- A( _" f* k: J0 {; [, ~12.恢復編輯時被中斷的檔案( W+ W1 O, Z$ u
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
3 z( O' ]3 A1 b( q       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
& r$ N1 G7 I$ E$ @6 D4 L       的檔案內容。
/ e0 y/ N1 u& M5 E$ G! I8 Y       %vi -r filename- e4 O6 D  n' k+ c2 X- t/ W" k

' @9 I7 m4 n7 d! `2 H9 U13.編輯多個檔案0 ~- o. }; S: E  X; g" I) }" g; ]
       vi亦提供同時編輯多個檔案的功能,方法如下:
3 q$ R( g# M/ N$ N- j       %vi file1 file2 ..
- H$ e2 \" |5 v, o! p9 E       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後' r6 L9 l/ O6 _  y; z
       再利用 『:n』載入下一個檔案。0 a/ X& i  z% N: J0 @+ d; E7 t

# t, h1 n5 X! \! ?, e參考:
1 r  G! j& o# m3 T. k' Z5 b& ]/ L# t0 F; M" p7 m
http://chunchaichang.blogspot.tw/2010/08/vim-s.html
4 g" N1 C- \5 [9 T7 s6 b
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2025-12-6 18:28 , Processed in 0.057498 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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