52AV手機A片王|52AV.ONE
標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]
作者: IT_man 時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯 0 l/ ]! m& a3 A2 J
6 s% t# [3 m4 C" z
vi指令說明(完整版)
6 Y4 a9 t7 Y- Z: z1 B- vi 的操作模式
0 t9 w: i# r: f' e" G( H
9 l9 I' N0 O' ]1 d8 I- q+ B2 m; Svi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
- 輸入模式
+ u$ Q' Z5 x$ g: `; }% c
. s0 b- M. B' P8 ]! w
如何進入輸入模式
0 m" T3 x2 `% i7 n1 h7 H# i a (append) 由游標之後加入資料。
, M$ X4 y7 X6 m+ q" D2 D A 由該行之末加入資料。
: F) r' B& [- l8 u' Y7 q i (insert) 由游標之前加入資料。
) B: a, \% n# F( D/ S I 由該行之首加入資料。3 V5 |& h/ H! s: f' H1 e: [
o (open) 新增一行於該行之下供輸入資料之用。
( l- I+ r( E! }- q% U O 新增一行於該行之上供輸入資料之用。; C1 ]8 Y+ y; ~
如何離開輸入模式
, N' [" r1 D" ~ 《ESC》 結束輸入模式。" O' T m' d( l3 I! B8 P" M( Y
- 指令模式
& ^# Z1 b/ [ P* z; Q
! e! s1 d! I0 w3 y) `4 r1.游標之移動8 |: M8 a* |4 I0 D% M9 B0 V
h 向左移一個字元。, z/ U! w: y& K Z: r
j 向上移一個字元。
. l9 x( N2 M# t+ Z k 向下移一個字元。
1 y* U* ~. O; B W: k# ? l 向右移一個字元。( f8 b, ~# B; X7 _/ H
0 移至該行之首
" u8 M4 e, l: o; Z4 H/ ]9 I' ~6 s $ 移至該行之末。
1 R. f4 g9 ]8 h: @% o0 s- @% d ^ 移至該行的第一個字元處。
( K" x l: _1 B( J! K H 移至視窗的第一列。& U% T* n X# d- p% J' j
M 移至視窗的中間那列。
/ r. C$ \4 Y3 T, p4 ]0 @( U' W L 移至視窗的最後一列。7 s' a+ r U8 X' r7 W
G 移至該檔案的最後一列。1 H- ?& a6 k" z+ G! F
+ 移至下一列的第一個字元處。
: V8 {! @2 W. o _4 C0 I6 M8 z9 }5 U - 移至上一列的第一個字元處。0 B8 c( y; s3 f8 B6 ?& Y) u7 x/ F$ G
( 移至該句之首。 (註一)
8 V3 ^$ f* y: e* S G! {+ v ) 移至該句之末。
) W/ @$ ?! t) K- e' i9 ?2 T! e( K2 s0 [ { 移至該段落之首。 (註二)
) Y+ f* i; W4 B/ [) r } 移至該段落之末。
, A2 ` k( r1 D9 {6 g* M, @ nG 移至該檔案的第 n 列。
4 J+ g3 c; A4 U$ D- y2 P n+ 移至游標所在位置之後的第 n 列。
; f5 i- }% w ~6 K& a n- 移至游標所在位置之前的第 n 列。, V. ?4 Q7 r$ s1 M% v
<Ctrl><g> 會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
2 k8 c* X- F8 m& `5 A 註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
; k' g n/ d* _ 註二:段落(paragraph)在vi中是指以空白行隔開的文字。
% B7 k! u9 j/ U q7 C( b" @# T7 v4 F9 _
2.視窗的移動 <Ctrl><f> 視窗往下捲一頁。
W S5 O5 q7 w2 } <Ctrl><b> 視窗往上捲一頁。5 l, v: v4 D: `! f# k% \
<Ctrl><d> 視窗往下捲半頁。
0 r5 d' V1 ?. ]6 h& F( B/ ? <Ctrl><u> 視窗往上捲半頁。
& o# W- q! t$ |/ d' z+ o <Ctrl><e> 視窗往下捲一行。
6 S& y6 ~: D3 [" z6 }. z' c. W <Ctrl><y> 視窗往上捲一行。* v9 E! N" O) _) V" A* u: m: G
1 v2 c( X# f3 }3.刪除、複製及修改指令介紹 (此單元較少使用)
3 c9 F/ r/ }, l1 l) I) L5 E0 J9 p d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:4 W6 `$ H4 C- k! o7 s/ q0 ~! [) @4 B
Operator + Scope = command
1 D8 p" L2 s* @! W: r6 \% K (運算子) (範圍)
6 [5 C9 A3 p k( @" W 運算子:5 O% Y4 ?% J- S8 s5 @ Y; i6 _/ v( N
d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。. U5 P% a& D$ d+ X) n0 G. k
y 將資料(字組、行列、句子或段落)複製到緩衝區。
& q( a% ?+ X* ?0 a' [ p 放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
0 _, O# |8 D- K 料放置於游標所在位置之行列下。
% H* u) a8 ]% P c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句7 J4 N; x1 N- h' }+ b
子等之資料,並插入新鍵資料。
# O1 [0 J& Z+ y4 z$ ^0 z 範圍:
& |8 \& v# K* Q3 U, G- P* i) X e 由游標所在位置至該字串的最後一個字元。; ~. `( g! B1 C& o1 L/ o9 _0 y; U
w 由游標所在位置至下一個字串的第一個字元。8 e2 k$ C9 Y$ I& j0 e/ E, U
b 由游標所在位置至前一個字串的第一個字元。
- p: G k+ c2 j, t6 } $ 由游標所在位置至該行的最後一個字元。
3 q% k2 r0 X& W& H" t/ Y 0 由游標所在位置至該行的第一個字元。+ s" x: r7 |1 q$ {0 Z4 q; t% f3 t
) 由游標所在位置至下一個句子的第一個字元。4 a0 M3 B$ V1 |, K
( 由游標所在位置至該句子的第一個字元。2 @" N& m. ~) \; k5 _/ s* t- u
{ 由游標所在位置至該段落的最後一個字元。
6 i* W! a$ T U: M1 @. g' ]0 a$ G } 由游標所在位置至該段落的第一個字元。
; ]- G/ U% O X" j$ E2 Q 整行動作1 x# [/ K* p8 l) I, F( k# }) i
dd 刪除整行。3 w- ]% H4 f7 }' w; U+ c" G! H
D 以行為單位,刪除游標後之所有字元。7 e. _- I5 I! a5 Q' |/ A
cc 修改整行的內容。
/ s# S8 P6 Z7 J1 ~* Y yy yank整行,使游標所在該行複製到記憶體緩衝區。
$ L" o7 R2 r# o* j; W
2 n! @3 P. F# [" }# o% P* s4.刪除與修改
2 i0 t9 X) u8 o9 ]0 {: J ~ x 刪除游標所在該字元。) ]* |9 v7 ~) O
X 刪除游標所在之前一字元。 l+ K7 d" O- @+ m1 U/ V: j! }
dd 刪除游標所在該行。/ B2 K. h6 F3 x+ \
r 用接於此指令之後的字元取代(replace)游標所在字元。
3 p/ K2 j: o: ]. S 如: ra 將游標所在字元以 a 取代之。
l( X' c- `5 X: ]) ]! W R 進入取代狀態,直到《ESC》為止。% V/ ~; B. R6 q# a& O
s 刪除游標所在之字元,並進入輸入模式直到《ESC》。2 v& L: \5 q4 C- m4 y4 j
S 刪除游標所在之該行資料,並進入輸入模式直到《ESC》。1 h" F5 \1 l- d4 K# ]
, E5 ]* G- h9 F4 x( C* j
5.搬移與複製* x. [+ F) L) {7 S6 k# ?2 X6 B
利用delete 及 put 指令可完成資料搬移之目的。 T4 V* F8 z! m
利用yank 及 put 指令可完成資料複製之目的。" W1 P% M# g! ]4 B1 s1 y# X0 z
yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令, t4 X& `, l J% `) ^$ \# A+ }
可將緩衝區內的資料複製到螢幕上。
2 ? _/ p4 ]9 e" p r5 S) k 例:
% x4 u3 X4 e" _1 W; T 搬移一行 ‧在該行執行 dd4 I3 c3 ?- F! Q& e8 P, N
‧游標移至目的地
( G1 F G# `5 E+ D ‧執行 p
* D' B; L+ o/ z2 i; B' N 複製一行 ‧在該行執行 yy: w$ y# v) G: \8 F
‧游標移至目的地* K4 i9 Y J# \$ W! r
‧執行 p0 x; P" s- d- [$ f- |
" j; j% G' s2 P$ t5 z6.指令重複+ l6 M+ v' h' b6 E% V
在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n) X1 \' n+ j! s% D- i
次。+ c! \) ]( C, }& v# k/ n
例:- w9 L& e4 s0 |+ b7 ]' m
刪除10行 ‧10dd9 W# ]& s! Y, T! K4 I
複製10行 ‧10yy
8 g+ A% s: ?+ p9 k# N* Z ‧游標移至目的地
) x# E5 ~) P+ k# a: l* H0 C ‧p
' q5 p1 b; l; C" v% V7 t 指標往下移10行 ‧10j; a' L8 Z$ J8 r; [2 B) @: r0 a4 x
+ O$ f: k7 m$ p. C" V7.取消前一動作(Undo)
; V5 g1 W0 |4 v 即復原執行上一指令前的內容。
* u* L! D( Q2 B. b0 }5 I5 k u 恢復最後一個指令之前的結果。
% E0 o+ e# f1 ~) m9 f! f I; E( s U 恢復游標該行之所有改變。
& Z. z2 B0 m# k" r
9 S8 j, E5 z+ Y# D* J8.搜尋 @7 j6 k1 Q: ^7 V# h7 _6 c
在vi中可搜尋某一字串,使游標移至該處。
3 m t: {" A: N5 E/ n /字串 往游標之後尋找該字串。
$ Z- [# [" u; F4 y! B7 \ ?字串 往游標之前尋找該字串。
5 B8 `9 A& J( v, X3 [& V! t n 往下繼續尋找下一個相同的字串。" Y) s* r# H/ k/ V3 s9 J
N 往上繼續尋找下一個相同的字串。. |; P4 R/ w- m
, V* L' m# E& @" W3 }' h9.資料的連接
9 X' A9 z0 U5 z! d; V7 Q J 句子的連接。將游標所在之下一行連接至游標該行的後面。1 E. L/ ]+ I' y& Y
若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式0 }. F G9 ]7 l5 T0 d
(可利用a、i等指令)再按《Enter》即可。
9 E4 s. h6 h/ X6 e* Q' k0 I0 A9 `! X o: Q6 [" q B j
10.環境的設定
4 s. s+ a- V8 c: h0 f :setnu 設定資料的行號。
$ E7 C3 `/ Z0 v+ `# X :setnonu 取消行號設定。
. g/ @% Q; s7 t6 D; c. _. G :setai 自動內縮。- U0 L2 v# c& b! `& |. ~6 H# ^2 }
:setnoai 取消自動內縮。! h! K g4 L# Z' U! J
自動內縮(automatic indentation)% Z5 k r4 L: x1 e+ x/ p
在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
: M9 h' m+ N" }6 y4 y 動內縮的功能,用下例解釋之:
8 G7 G n' K1 [. U# f" R: D# @ ‧vi test
+ r4 T! h5 H/ C3 l" z" {6 p ‧(進入編輯視窗後)8 X* H/ D& V: B: I# R0 {
this is the test for auto indent5 X, e- Y& i: _. m. R
《Tab》start indent ← :set ai (設自動內縮)
8 m4 g; i, ~: c 《Tab》data. s: W) h! u+ J3 ^0 R& P
《Tab》data2 e6 y1 y+ d7 q, N" k) B
《Tab》data ← :set noai (取消自動內縮)' p# o! R- @# b: ]) G7 Z) z4 Z
the end of auto indent.
# s w. }- g% X+ j9 n( C ‧註:<Ctrl><d>可刪除《Tab》字元。
/ h6 ~; Q! w; v' ^. x8 l% g* ~) a* f5 v
11.ex指令
* c- n5 i4 f. {, X3 s- P. {+ ^! Q& i i 讀寫資料% |( i2 @8 C3 q, s. H8 T
:w 將緩衝區的資料寫入磁碟中。$ m3 _! g; d( P" p) ^) B
:10,20wtest 將第10行至第20行的資料寫入test檔案。0 e% d5 P; q3 `6 o. W
:10,20w>>test 將第10行至第20行的資料加在test檔案之後。
T' ?1 y- w C' z5 r ^0 z H :rtest 將test檔案的資料讀入編輯緩衝區的最後。
U4 `! N5 A* i3 G$ n: e) C 刪除、複製及搬移- d" J7 J% l% u% ] I
:10,20d 刪除第10行至第20行的資料。3 d$ y, P! ?5 a9 @! V/ ]
:10d 刪除第10行的資料。
/ X' }1 F- N6 I9 [% k& g :%d 刪除整個編輯緩衝區。+ k7 n! O; K/ \6 c
:10,20co30 將第10行至第20行的資料複製至第30行之後。! y! i2 N7 |$ J$ a s0 E% a
:10,20mo30 將第10行至第20行的資料搬移至第30行之後。: Q' ^ ?7 d) P1 i2 S/ }
字串搜尋與取代1 }, m5 I& o8 _0 n# \
s(substitute)指令可搜尋某行列範圍。: J4 \. u9 l% I" n
g(global)指令則可搜尋整個編輯緩衝區的資料。4 U( Z- {- Y/ T i
s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
9 k. |% Z# S$ f 件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
8 r/ H2 C4 a: P+ s% g% Z5 P :1,$s/old/new/g 將檔案中所有的『old』改成『new』。
: u$ ~3 ^( D X8 Q( @3 Q/ y :10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。+ o, k! v& Z; u& n, x; Y
:%s/old/new/g 將編輯緩衝區中所有的『old』改成『new』。
9 K4 x$ `0 L9 Q3 X2 d; Q, m- w* k- P' o2 l' p4 l
12.恢復編輯時被中斷的檔案2 ~, w1 E, [3 u+ u+ \
在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
- @2 y* ?' F3 K3 V 被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前5 O6 h" a) r* Q+ [
的檔案內容。. d3 F4 `$ I1 ~5 P$ O& d
%vi -r filename
/ r2 k& ^, L) f6 J) d( { \
- r% `0 u$ J7 |) K: v! A13.編輯多個檔案* n* U$ x( P. K/ z9 D
vi亦提供同時編輯多個檔案的功能,方法如下:
- ~8 D3 }3 x- V9 _ %vi file1 file2 ..
2 D$ W: k8 |+ k$ M/ E5 X 當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
! T; V2 [& {. T5 q 再利用 『:n』載入下一個檔案。( Y* J s# h( ^3 D' O, }& g
; }0 f) }2 s: Y3 p9 ]參考:
, T- ^8 g' h7 j6 u& ]/ l6 u) [9 q, P
3 U- n- Q( U3 @( ~- `$ Rhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html
3 @# f: j, u3 u- H/ H3 p" L
| 歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av.one/) |
Powered by Discuz! X3.2 |