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

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

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

[複製鏈接]
發表於 2014-11-18 08:47:14 | 顯示全部樓層 |閱讀模式
tid=95& 本帖最後由 IT_man 於 2017-5-6 23:16 編輯 9 ~2 B9 U& P% S, X2 L
; @% J+ H" h. w  ?
vi指令說明(完整版)
& F! c; z3 `1 q2 ?1 c8 c
  • vi 的操作模式
    6 Z" b0 ^# g7 {, y

* m$ H0 ]& ?5 V7 z" A/ \5 K7 T

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

  • 輸入模式/ F5 q% R* D6 X& L9 y# T/ l


  b- j) Q1 w7 t4 `5 k* J( I+ [       如何進入輸入模式
6 `- e7 F# k3 q/ m3 z$ }6 M                a (append)    由游標之後加入資料。( ^7 p0 H& N3 O" {0 N
                A                   由該行之末加入資料。
, l5 `9 _2 p5 o7 r# k                i (insert)        由游標之前加入資料。
# L0 Z# g* c' g5 x9 K4 S1 }                I                   由該行之首加入資料。! y' O! v5 \; w3 a! y5 [3 c; [3 d
                o (open)       新增一行於該行之下供輸入資料之用。
( h) l! h3 a$ C4 W" {. z0 x) x                O                  新增一行於該行之上供輸入資料之用。
% J( N, E) O* z& O       如何離開輸入模式
. j; D+ U; g- Q) a3 y( R- ?             《ESC》          結束輸入模式。
7 ]9 s% O: R0 G0 C! T# t3 \9 m
  • 指令模式6 V& \  [, K3 c4 ~


7 I2 \7 {2 H: h: W! m# f$ \2 C1.游標之移動
1 Q" @5 U9 B* n4 C0 P& h6 k2 `0 `' D              h       向左移一個字元。+ ?, `2 M! j; `/ l4 x/ R! u  N, |
              j       向上移一個字元。( M8 \( z5 S# ]( Z' y+ t0 ]
              k       向下移一個字元。
; |* {* ~6 v+ p/ ]: X/ |5 q- Y              l       向右移一個字元。" Y4 F+ X8 G1 i8 Q7 n9 v
              0       移至該行之首* }4 n1 J) w5 Q9 m# Q: W$ ]
              $       移至該行之末。% w" n( v1 c# v5 H' B) ?
              ^       移至該行的第一個字元處。5 y. n7 ]+ M% |( D( n
              H       移至視窗的第一列。1 h0 J, `! [4 O0 f% Q
              M       移至視窗的中間那列。4 T9 [& ^; ?3 S3 B9 l
              L       移至視窗的最後一列。
3 ^. w  b" m0 W* c/ J9 L$ {             G       移至該檔案的最後一列。
3 E2 P$ R% ^8 b2 B( h             +       移至下一列的第一個字元處。) P$ Q2 e: w3 \5 ~6 n
             -       移至上一列的第一個字元處。4 q" z# R* [0 l* l7 @! p0 ]! B
             (       移至該句之首。 (註一)* H/ h( n: k6 C  J5 G
             )       移至該句之末。) m+ O% P: o& t+ m
             {       移至該段落之首。 (註二)
1 b3 H+ q- X/ x7 T0 B# V+ x* W' \             }       移至該段落之末。
4 v% h9 l: I3 S* h/ V             nG      移至該檔案的第 n 列。" @: X, ?9 a6 `! a# y$ [+ R
             n+      移至游標所在位置之後的第 n 列。
, D# }  g+ F3 R2 q             n-      移至游標所在位置之前的第 n 列。
) U  W- N1 X4 F# f  s5 F: }! ?            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
7 r& e' h# _/ M' q            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
" d- E% R$ g+ e' x            註二:段落(paragraph)在vi中是指以空白行隔開的文字。
: J8 j- a$ T0 m7 b8 r1 t2 V" J4 e& I2 C; ]( O" x) K3 b3 @
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。
( Q; f1 T' _& Q, F3 R/ x5 r           <Ctrl><b>       視窗往上捲一頁。
0 G& y* T8 r. i$ E- h  p           <Ctrl><d>       視窗往下捲半頁。
9 K; h+ ^; y* k9 a           <Ctrl><u>       視窗往上捲半頁。
/ K- C8 q1 {9 g8 r; b$ B           <Ctrl><e>       視窗往下捲一行。/ t2 v" s; H( a* g
           <Ctrl><y>       視窗往上捲一行。6 _  G1 Y; C4 t' i' G

* U0 w! L+ h; k/ P8 Z3.刪除、複製及修改指令介紹 (此單元較少使用)2 @- M7 r* J) M$ i' _  |6 ~- [
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:7 X. M  J9 ]3 r# S+ g" K
       Operator + Scope = command, `. W) Z+ {+ K, b
       (運算子)   (範圍), m; T; Y6 ]/ G* H4 h$ z# k' B
       運算子:5 w1 j- I7 C3 i* c# j
       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
8 F: t5 `2 E' s5 U       y       將資料(字組、行列、句子或段落)複製到緩衝區。
! b3 A! d+ f3 z' e" g5 \       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資; G* }" C9 R; U$ N# G* h
                料放置於游標所在位置之行列下。
0 z) K( ]0 F. A5 C" O& x0 a+ p: ~       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
2 o. r: G/ W+ o( r# T6 e                子等之資料,並插入新鍵資料。
* y# Q5 y4 p/ X- J: |5 ?       範圍:
8 o' ^% `" Q  Q& h2 R7 C( ]1 C) b! F- C       e       由游標所在位置至該字串的最後一個字元。
" a$ ~- s0 X( e6 C% Z; s( v3 B       w       由游標所在位置至下一個字串的第一個字元。
" t2 N) A1 o2 d6 S1 ?' \$ [8 ~" i       b       由游標所在位置至前一個字串的第一個字元。
( Q; Q2 V3 u0 ^/ g4 I       $       由游標所在位置至該行的最後一個字元。) H$ I9 |: b) g/ H+ u6 D
       0       由游標所在位置至該行的第一個字元。" G! q9 n: t% {* J
       )       由游標所在位置至下一個句子的第一個字元。
$ Q$ j; y, R# j4 J2 E3 [1 I       (       由游標所在位置至該句子的第一個字元。1 J1 y  K, ~$ `
       {       由游標所在位置至該段落的最後一個字元。
; f) W. n" V" G" H- x       }       由游標所在位置至該段落的第一個字元。
3 g  e( x# O/ K& U% c* c       整行動作* z, @+ ~% V2 d# j0 d
       dd      刪除整行。/ |9 Z* @! H6 A' J, l
       D       以行為單位,刪除游標後之所有字元。* ^6 ~7 ?% |+ U8 \! @
       cc      修改整行的內容。
+ s. g9 O6 b! O       yy      yank整行,使游標所在該行複製到記憶體緩衝區。) J9 U5 J0 X  f" _( M3 [

' O0 r  c3 l! R& U# z" ^4.刪除與修改
2 L$ ?: E* U* [) ~3 m; j. v4 V) R       x       刪除游標所在該字元。; e& \& Q  g/ n
       X       刪除游標所在之前一字元。
0 U1 X# g. ~, ^. e2 [, o* D       dd      刪除游標所在該行。
( c0 p9 S6 l* Z% M: R+ u       r       用接於此指令之後的字元取代(replace)游標所在字元。
; c) R' r8 e4 @# g3 G9 @                如: ra 將游標所在字元以 a 取代之。
& h5 K' l2 `, P! ^& o' u. z- K       R       進入取代狀態,直到《ESC》為止。+ `) E: C; o  [% @0 K0 q3 I
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
: \* f- \8 z  v+ J& H& T/ E3 i       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。0 ]3 d8 R$ k! P! ^9 u

; i) s& Y# [+ x& ^% r5.搬移與複製; B  W- T; c5 M
       利用delete 及 put 指令可完成資料搬移之目的。: Y4 H% ~8 y" q8 R
       利用yank 及 put 指令可完成資料複製之目的。* z! k' M+ c; b8 X5 A
       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令# Z3 V; K7 u, ]! E8 E
       可將緩衝區內的資料複製到螢幕上。
! W2 t+ \5 K; A2 h& I; O% }       例:0 x4 }- G; v4 w: I  Y
       搬移一行        ‧在該行執行 dd8 W- P+ X0 j- i
                        ‧游標移至目的地
* b# F  E+ Y) l+ \                        ‧執行 p% n$ p! Y1 J8 }5 E3 b4 }. v6 m
       複製一行        ‧在該行執行 yy' V$ R) X# [! z+ W8 g2 R
                        ‧游標移至目的地
( P+ s% V' h1 i  u0 p                        ‧執行 p3 _1 g7 v# b* V! W2 S2 r" X
2 J2 c- D9 j# v* C6 X( ?
6.指令重複) i; p/ C* N1 m2 s
       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n2 B& O3 n, b/ I/ `
       次。
* ]9 P! K4 i3 t3 a, Y) P$ P       例:
2 J- C5 x; V: G" }  L7 h& y, k       刪除10行                ‧10dd
# i4 S# D& B$ u; f) i       複製10行                ‧10yy* l) b  N( T) a" K' e
                                ‧游標移至目的地
0 O+ J" S/ H. X2 b                                ‧p0 N  ]% \. N/ |  q3 [! T& F$ O# d
       指標往下移10行 ‧10j
# V/ p3 }$ \/ N# }
6 M1 m$ t6 t- _) p  X: I; C7.取消前一動作(Undo)9 R" h, o0 Y  E; L+ t% s* T
       即復原執行上一指令前的內容。0 ^7 K; J* }* p4 S/ N& n+ L+ G
       u       恢復最後一個指令之前的結果。  |/ b  m2 C$ b! X8 x3 m
       U       恢復游標該行之所有改變。; C' n) c7 J" R$ K
% c) d2 k" c% t* ]% u  V
8.搜尋. x% ]+ F0 Y/ y
       在vi中可搜尋某一字串,使游標移至該處。
1 x! s# i& F0 P, X. [       /字串           往游標之後尋找該字串。6 Y. G1 S* A6 o; c- ]& F% U: M- a
       ?字串           往游標之前尋找該字串。
) u8 W/ r! M# A6 N) A1 Q       n               往下繼續尋找下一個相同的字串。+ R" y; a7 i  k% ]& U; E
       N               往上繼續尋找下一個相同的字串。5 ~! c! G2 o+ g: E6 ^- R
" T2 J' c- R+ j
9.資料的連接  [: O- s7 h* T! @8 w
       J       句子的連接。將游標所在之下一行連接至游標該行的後面。& b( h, i* x0 n; X! e
       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式, i7 @% _5 b  X
       (可利用a、i等指令)再按《Enter》即可。
- w: D* P( m9 F  @6 z1 ?# \, w6 K# ]1 E
10.環境的設定/ [. a. x% R: H6 i* a# b
       :setnu                設定資料的行號。
  N, n) j) v6 w5 B$ w& a. n       :setnonu              取消行號設定。, C, m3 d  g# i" E/ S6 j" s
       :setai                自動內縮。( }( t5 v, K9 d( {$ u& N8 C* T
       :setnoai              取消自動內縮。' \. b. f' _. C" u3 `* I
       自動內縮(automatic indentation)" \# a- T) k% |, w9 i' @
       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自: C" |! i$ R* T, d
       動內縮的功能,用下例解釋之:% L4 @8 A3 O: b' q. T, w' s: x3 l
       ‧vi test
5 I0 {! `' k; T. L# c1 L       ‧(進入編輯視窗後)
, B' H4 l. |: x4 s6 Y- U         this is the test for auto indent
4 l7 V$ m/ H7 d         《Tab》start indent           ← :set ai (設自動內縮)" R* z- W- K2 j' J
         《Tab》data
5 m6 `. n  I% W: n# B7 n+ B2 A. ^         《Tab》data
' q2 P7 t3 ~. C( r4 d         《Tab》data                   ← :set noai (取消自動內縮), o+ y+ \; r! B' C
       the end of auto indent.  f* h  L! `" Z( |' W
       ‧註:<Ctrl><d>可刪除《Tab》字元。
' g+ b; s; c. s- ~  E+ Z9 c5 J( `7 \  y2 H4 t! O
11.ex指令
. K7 [# V6 H) t4 f/ c# F+ n* r       讀寫資料# \, u, V& e- G, Q, i
       :w                     將緩衝區的資料寫入磁碟中。, p  r* U) i% }% r" h
       :10,20wtest   將第10行至第20行的資料寫入test檔案。  E, k3 Y9 l! i+ E% W) d# b8 u
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。
$ B2 \0 \/ u6 M2 u$ ?/ s& {       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
: M7 I# k' \2 p. m& T6 K       刪除、複製及搬移
- I4 M! F" c) k. }2 ?) @       :10,20d                刪除第10行至第20行的資料。
2 h9 K2 c. k" Y7 E* E       :10d                   刪除第10行的資料。6 @7 D8 N4 M7 Y( p. }# ^7 H
       :%d                    刪除整個編輯緩衝區。
2 B- [; k" f# m, i" `       :10,20co30             將第10行至第20行的資料複製至第30行之後。8 W, N  K! x6 h
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。& Q$ C( ^" J: g  V) p
       字串搜尋與取代4 t! {* M3 {/ g
       s(substitute)指令可搜尋某行列範圍。
' {  J; }* V: N0 n3 p, @       g(global)指令則可搜尋整個編輯緩衝區的資料。+ D" \8 i) h% B5 U8 |6 D
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
3 Z8 h$ N3 N, n* |. K7 ^       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。' k, |8 Z& ]4 b/ \$ u
       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
, c, Q! Z6 F! v3 Y. a4 H% c3 |       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。$ x4 m4 _* F& {6 g' i  b- Y3 z
       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。& u) W4 w; ?) O! x# T

  a: h* D) X2 h. T0 g4 s( j12.恢復編輯時被中斷的檔案$ W: ~( Z) ^; ?* L; F+ x0 z/ k4 _- K$ Q* I
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
2 V0 i1 ~3 r- c5 G/ M1 Q8 @: P3 A       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
0 \+ U6 a; y5 m3 {       的檔案內容。4 z# D5 {. e: }" A
       %vi -r filename
" I6 }; }, ]3 @7 T/ h* G3 \& l5 M( v5 r  z
13.編輯多個檔案" E7 T  X9 d" l3 g
       vi亦提供同時編輯多個檔案的功能,方法如下:& R6 ], c- F. j
       %vi file1 file2 ..5 g$ ~, H7 g* B8 ~% h/ A$ {
       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
( M- F4 k+ F0 L9 p3 h# P       再利用 『:n』載入下一個檔案。
& h' W7 R& }7 f: U8 X$ l( {  N$ k7 X: M+ Z
參考:
' D: Z0 b- ?' k9 H) h4 a' W8 C: A$ ~6 D9 N, u! j
http://chunchaichang.blogspot.tw/2010/08/vim-s.html
1 n$ H+ K9 I; W/ v( N2 u) B
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-2-4 14:41 , Processed in 0.071847 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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