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

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

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

[複製鏈接]
發表於 2014-11-18 08:47:14 | 顯示全部樓層 |閱讀模式
tid=95& 本帖最後由 IT_man 於 2017-5-6 23:16 編輯 5 W  H. j- R9 ^3 u

9 f' u* Y$ I$ D( m. W9 O" Avi指令說明(完整版); s8 X. f/ P; h: e! P
  • vi 的操作模式6 ~/ U: J* Z" Y& G9 \! r


# r. |- {2 t, c; \. \  ~' i8 M

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

  • 輸入模式
    ) ]8 [6 o3 f) Z6 q4 m- x* q

$ U. T0 }4 ^' o# X
       如何進入輸入模式5 R9 U, I; l# E; ]
                a (append)    由游標之後加入資料。
& x5 @0 F' ]$ M2 F                A                   由該行之末加入資料。
2 L5 H4 o# X! y4 Y3 l6 }2 o                i (insert)        由游標之前加入資料。& f2 C1 o: Z1 a
                I                   由該行之首加入資料。+ e3 r. j( J& p& v# @' G  ~$ m
                o (open)       新增一行於該行之下供輸入資料之用。3 \/ z% Z. |! L' M3 `
                O                  新增一行於該行之上供輸入資料之用。+ M+ ?8 e& v' W, D/ x0 V
       如何離開輸入模式- d! Y9 D; v3 e: k3 O
             《ESC》          結束輸入模式。3 h7 Y' F0 H9 ?- o/ w+ e4 [5 F
  • 指令模式
    $ X: H! y0 Y- t$ m0 V! Y

0 W! m' A2 Q! h  q$ m
1.游標之移動
3 g; F: S" @# R1 J" f8 l. G              h       向左移一個字元。+ Y9 [4 T  E& H& c+ g$ |4 X
              j       向上移一個字元。
( i/ e3 Q, y8 s1 T1 E+ N2 G              k       向下移一個字元。
. |5 ~& q- D% l) \: L7 N              l       向右移一個字元。0 A) Z( k) l0 I7 X& G
              0       移至該行之首/ [' P& j/ N& L% j# [8 T
              $       移至該行之末。3 m9 W. g$ X" R- i
              ^       移至該行的第一個字元處。5 g0 V5 B( b- t, T  E2 q- g
              H       移至視窗的第一列。9 w3 r# P/ a8 `& x" }0 x& R
              M       移至視窗的中間那列。) r9 ^* G( h3 r- G7 s
              L       移至視窗的最後一列。! ?4 U% m6 E1 D' g& O: W
             G       移至該檔案的最後一列。4 o3 p7 D) z' Y% {9 d" u6 h4 M
             +       移至下一列的第一個字元處。
* ]$ m; }+ Z3 E" {             -       移至上一列的第一個字元處。
0 v! q$ l, f5 O- G$ J" y             (       移至該句之首。 (註一)- d8 f0 p/ w2 J. H( K' F
             )       移至該句之末。$ K6 u0 R+ i5 G% k0 d; l
             {       移至該段落之首。 (註二)
' R9 q. G' b# L6 K- S3 o             }       移至該段落之末。
- {7 I1 j% B- s+ @. k2 `2 m% S; h             nG      移至該檔案的第 n 列。
4 ?5 c; T1 {) A             n+      移至游標所在位置之後的第 n 列。
# q8 e# }- q7 i; ~$ n! [  i3 U             n-      移至游標所在位置之前的第 n 列。( U, p" y3 A4 ?. Q0 j
            <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
" ^  C8 Q, A- Z$ J% b            註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。/ n$ l# T! o& Y: U0 T
            註二:段落(paragraph)在vi中是指以空白行隔開的文字。
8 e0 r: d* }, A/ l+ s; u; u. f/ {2 p% A1 a
2.視窗的移動       <Ctrl><f>       視窗往下捲一頁。
3 _( `- h* C4 S           <Ctrl><b>       視窗往上捲一頁。
; m0 k. E' a: Z; @           <Ctrl><d>       視窗往下捲半頁。% o4 V' @/ `) K$ N3 v) ?, T: D, ~
           <Ctrl><u>       視窗往上捲半頁。* e9 k: f$ C5 G: N+ M- Z% ~
           <Ctrl><e>       視窗往下捲一行。
9 T5 }8 f5 u7 x( Y           <Ctrl><y>       視窗往上捲一行。
' u  ]0 j* k0 ~5 `* _1 h7 B" B/ n
3.刪除、複製及修改指令介紹 (此單元較少使用)
4 q% x5 T; C2 b+ T       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
0 _4 J: P! V' B% |# ~       Operator + Scope = command0 a: I3 \& q, I8 g4 [! a( H0 j
       (運算子)   (範圍)
: g, b  s" u! f0 C# L: H       運算子:
; F/ C8 b& J% V" J* L* y7 B       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
! \: k2 j; l% e% M1 _& r       y       將資料(字組、行列、句子或段落)複製到緩衝區。
  z2 X- b. {" i  T       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
) G4 M  q+ {$ I                料放置於游標所在位置之行列下。3 d6 o" R5 M. {# C
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
8 l# T3 D8 I& H% s7 p% T0 }$ d& [                子等之資料,並插入新鍵資料。, g* Z8 G( o3 Y1 f% u0 ~
       範圍:
% m6 Q% B, X/ Y2 }& j7 l* x- h% h9 w       e       由游標所在位置至該字串的最後一個字元。0 y, B  u! Q2 R( O# z+ w
       w       由游標所在位置至下一個字串的第一個字元。
9 e' ~2 G; {+ z$ B( v0 v9 X       b       由游標所在位置至前一個字串的第一個字元。
0 t& |4 L& b7 m9 {" k( y       $       由游標所在位置至該行的最後一個字元。- A; p) j6 ?1 V
       0       由游標所在位置至該行的第一個字元。
9 e  M. Y, F  ]& A1 X" Q( y" `+ A       )       由游標所在位置至下一個句子的第一個字元。
0 O2 T2 j; r- X) K. V! a5 M8 X4 @       (       由游標所在位置至該句子的第一個字元。
/ z) |3 W4 A6 Y7 P# T2 `       {       由游標所在位置至該段落的最後一個字元。
7 F9 T. @. A/ W       }       由游標所在位置至該段落的第一個字元。
8 D8 `# j5 T5 J4 e! P       整行動作$ i  u8 ]' E4 h' k' Y
       dd      刪除整行。
, D7 M% r# X% x+ o6 u       D       以行為單位,刪除游標後之所有字元。+ k/ R1 X! `$ T/ g4 S
       cc      修改整行的內容。
. I3 n  \/ t& p! w0 J$ t       yy      yank整行,使游標所在該行複製到記憶體緩衝區。
2 \% M6 d: ~9 l( D
4 y% n1 D6 L8 q' \% j4.刪除與修改
: O5 m. x2 M  R       x       刪除游標所在該字元。( w3 [/ M' u& _0 O0 z9 B8 w/ W7 [
       X       刪除游標所在之前一字元。
1 K, C) v2 b1 C( @. g9 A       dd      刪除游標所在該行。
, _* p' y& e% \' q+ O$ d' c       r       用接於此指令之後的字元取代(replace)游標所在字元。% l: b6 }6 a6 U& T  \
                如: ra 將游標所在字元以 a 取代之。
2 \3 ?! k9 l! R& d" v, Q       R       進入取代狀態,直到《ESC》為止。
8 e0 {& H! Y/ c       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
2 r: Q/ y% y4 P7 s5 I       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。0 b4 S7 H% z4 d* }, G  X
2 w, p8 D* M& F" I8 }1 |( h
5.搬移與複製* w/ g1 @0 N  U$ M* z+ ]
       利用delete 及 put 指令可完成資料搬移之目的。
* h5 |" e3 Z1 E; M* [4 K  i       利用yank 及 put 指令可完成資料複製之目的。
; \/ F5 T0 @3 s0 L7 L       yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令: _  w9 N& e# v. _! y
       可將緩衝區內的資料複製到螢幕上。
% ^9 e3 L& l) l5 N; e4 P       例:
. H9 F6 U% @9 d' }5 i       搬移一行        ‧在該行執行 dd- e# j7 @3 e4 ^4 N+ @1 w& M
                        ‧游標移至目的地% u- V6 u4 ?' w1 G( ^9 q: l% ?
                        ‧執行 p
; y6 ^7 [6 s- W       複製一行        ‧在該行執行 yy
5 |7 \  p1 x! i1 u, b5 J8 ]4 M/ Q" G; D                        ‧游標移至目的地
" ^1 |0 ]5 n( @6 P& A                        ‧執行 p
9 r$ c+ L% o! x2 C& z% j
' E& q2 Z, ^) J& g6.指令重複0 n- n0 n! {/ _* }0 ~) M0 z
       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
! z6 F* S8 V4 y7 F. Z! j       次。
. x5 i9 p; E$ ~% x       例:
. b# b, |( t* ~+ w       刪除10行                ‧10dd
8 x# d# `" d) Q       複製10行                ‧10yy
6 j) F6 P5 s0 _                                ‧游標移至目的地
3 w- h3 O' p, Z8 z                                ‧p
' w& l/ F: T7 g5 @3 Y8 u       指標往下移10行 ‧10j& l: b: c3 t2 K  r4 p

* Y' `: {3 Z# ^9 D* M  G7.取消前一動作(Undo)
; e$ T7 d$ q; {) |2 a       即復原執行上一指令前的內容。
1 N) P8 m4 t0 j: a       u       恢復最後一個指令之前的結果。
4 ?. \( i, y+ \5 G, o       U       恢復游標該行之所有改變。0 T! r  B. S3 G* ?9 s$ ]

6 g) m# Y( L. i. A  o$ @' V8.搜尋- y: c; c; Y: w
       在vi中可搜尋某一字串,使游標移至該處。
4 s: |$ F0 o9 h. j+ h       /字串           往游標之後尋找該字串。# n' z% ~) H3 c7 A# n7 m/ K! m( v
       ?字串           往游標之前尋找該字串。
/ t+ s+ i+ t1 q! l3 d  p6 B       n               往下繼續尋找下一個相同的字串。
4 ^/ ]& Y' I+ K       N               往上繼續尋找下一個相同的字串。. N' f6 q8 I' q8 w# O, ]( \
+ b; o3 {( D% o; N& b) e. @
9.資料的連接  v6 @, ?: y  `2 X( P
       J       句子的連接。將游標所在之下一行連接至游標該行的後面。
  X2 g7 E4 B# d$ F& Z       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式+ b' R1 D+ c7 ^+ m5 S& t5 b# z
       (可利用a、i等指令)再按《Enter》即可。- [! U4 c. ^) ?. c( A
- V7 C8 i% D' {4 s  l# V7 l
10.環境的設定
9 L* S  p- w) Y9 D       :setnu                設定資料的行號。
. B9 }1 y- b' f# e( u# t' _) m8 H. E+ M       :setnonu              取消行號設定。
4 k' T' ~" U6 {) v8 G7 R7 v% y       :setai                自動內縮。: E' |( T# A7 F/ w* G( }9 Q, f
       :setnoai              取消自動內縮。4 p- P5 P$ X4 p$ \
       自動內縮(automatic indentation)
$ B; ?0 p7 |  A       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
/ z; a- D& k0 I* u- b       動內縮的功能,用下例解釋之:: b# M" K7 }# t( ?
       ‧vi test( L* L/ }2 L1 J) X+ @+ b
       ‧(進入編輯視窗後)4 m6 J- q. _  Z9 w
         this is the test for auto indent
  g$ ^; z7 [& s5 i6 f. a  I         《Tab》start indent           ← :set ai (設自動內縮)
+ y/ |  D, J& \$ d6 w+ J! t         《Tab》data
4 {& s- j& @( L3 s$ w         《Tab》data
" R; h, n8 m  W  Z( p         《Tab》data                   ← :set noai (取消自動內縮); `* o5 C- R8 Z  M2 \( I# K, `3 _
       the end of auto indent.2 R5 @' ?8 z  X8 C
       ‧註:<Ctrl><d>可刪除《Tab》字元。0 _# n. T2 N7 S+ {5 E' q1 j" m

  _+ X3 r( Q& R9 O4 L6 f6 i+ C11.ex指令
2 V  V) m- l7 a; S: M: {+ i       讀寫資料# o8 W6 T/ X- c9 g7 E1 v
       :w                     將緩衝區的資料寫入磁碟中。' M0 [9 u" ^6 o. L; j3 w4 Q. |
       :10,20wtest   將第10行至第20行的資料寫入test檔案。- ~  l0 C. ^- S) C6 G
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。
- o) M! |. T# p  Q4 r6 Y+ s) y; ~       :rtest                將test檔案的資料讀入編輯緩衝區的最後。
9 x, |* i' Y8 r( h, w       刪除、複製及搬移
: L0 \" z; |9 w' B' r       :10,20d                刪除第10行至第20行的資料。  M) M1 I1 E  }0 r  C# u7 L+ q
       :10d                   刪除第10行的資料。
. B" ^# W4 \; t       :%d                    刪除整個編輯緩衝區。1 G3 c, Y" ~+ s' y! k. ?5 R8 c
       :10,20co30             將第10行至第20行的資料複製至第30行之後。( ~" D. H5 I0 |3 d% M9 ^$ \$ g) Z6 F
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。
+ I* t3 C& B* t       字串搜尋與取代
+ a0 D6 U0 S$ l5 \* \/ A' [       s(substitute)指令可搜尋某行列範圍。4 z# c/ Y/ v, W5 O/ y
       g(global)指令則可搜尋整個編輯緩衝區的資料。1 z( U/ H0 R9 E4 T' e
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條. s9 R8 f! C( e
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
7 G" L- {& `% h- o. R       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
# H. M! U9 c9 ~& M# V$ V: P" F       :10,20s/^/   /        將第10行至第20行資料的最前面插入5個空白。
$ ?! ^% ?- e7 Q       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。$ B7 g. u6 w2 ~; L% s
, S) \6 T$ h0 e
12.恢復編輯時被中斷的檔案
% @; T9 s9 [0 h. d       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未/ ~( q3 }+ u: J$ I
       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
; v9 @; O6 l6 q- {/ _* G       的檔案內容。
+ E+ G3 C  I, X' A8 p1 G  U       %vi -r filename1 H! H" K8 @. ~0 T+ o1 g/ f

$ S- o7 ]0 n( K13.編輯多個檔案
! H9 [* g/ Y( {3 \5 F  g4 ~4 B       vi亦提供同時編輯多個檔案的功能,方法如下:
+ o' c; m& M1 a/ K# a+ i" N       %vi file1 file2 ..* e* y4 A% Y3 M" T
       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後+ K5 d+ k/ n% v& {% i
       再利用 『:n』載入下一個檔案。# S. P# ?; u  q( j" p$ m4 T3 |9 B
5 t8 {# Z- t( B: J- @% P* x
參考:
) E1 X" p% X. o& S- m$ h
1 M+ \5 S: f" u. l/ c- T% B+ Fhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html
# C6 n% r8 @7 ?' ]9 X; y0 p
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-5-7 21:16 , Processed in 0.078450 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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