52AV手機A片王|52AV.ONE
標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]
作者: IT_man 時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯 1 f- a8 N6 u% T2 m2 G
; v7 p% p9 O+ R, w7 O+ Vvi指令說明(完整版)
9 P" P+ t) n* D( o" K3 H- vi 的操作模式
! p& T5 D0 z% n' ]
! f3 e- C$ `3 j* N/ Fvi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
- 輸入模式
3 L; b8 H( @! N) _! _* l! T/ ~
' s3 d; D- k- C, H3 ^* M, T
如何進入輸入模式
: L( D3 k5 X2 @: P* R8 ~ a (append) 由游標之後加入資料。
7 t U' m: t2 Q& C0 ~9 d0 Y: ^0 F A 由該行之末加入資料。$ l; [3 J7 X: t# _8 A6 I: f3 S4 R
i (insert) 由游標之前加入資料。. C* C" U$ N* B5 V6 w4 Z C8 I* D
I 由該行之首加入資料。
7 f6 M, s" D( c6 w) _; _4 b, X! r. T2 _3 k( Z o (open) 新增一行於該行之下供輸入資料之用。, \% f+ g' [, ~$ S3 q# q$ w; \ [
O 新增一行於該行之上供輸入資料之用。
, N. e8 L2 B, P 如何離開輸入模式/ V. W+ O: y9 q) i: }
《ESC》 結束輸入模式。( C' \0 P0 W0 f
# P9 R; P" a# y7 k& A$ c- o1.游標之移動
# i9 Y5 h: i! L3 y# Q u" J h 向左移一個字元。2 B) \# M: p \
j 向上移一個字元。
' i/ Z% X; V+ h- Q3 K0 P- e( ]: g) v) Q k 向下移一個字元。
6 Q4 D8 n |0 `5 K! p+ P l 向右移一個字元。/ | N9 F! M9 }( Q1 \- F
0 移至該行之首
' \- w/ y2 e" Z& b- A0 N8 }1 e, n $ 移至該行之末。
1 t; {- g- j& d: S: u ^ 移至該行的第一個字元處。' [* X2 {' `. g* @2 T
H 移至視窗的第一列。
, k8 l- [* e n; J M 移至視窗的中間那列。0 o" K3 r6 t/ ^
L 移至視窗的最後一列。
8 g& ]4 h& p0 y# ]$ j7 q. Q G 移至該檔案的最後一列。
2 w2 B5 f2 O; H/ \2 @( { + 移至下一列的第一個字元處。% c1 w( Q. x& T
- 移至上一列的第一個字元處。
: T! W/ [/ o% z) ~9 d2 j ( 移至該句之首。 (註一)
+ l" B" Y, C4 w5 k ) 移至該句之末。
6 `# q2 ]1 \& t5 P { 移至該段落之首。 (註二)
/ ~, a+ u! r2 i3 H) Y } 移至該段落之末。
$ r; z$ \" }3 P. B nG 移至該檔案的第 n 列。- t5 H( _# p4 G1 u b U( N5 n
n+ 移至游標所在位置之後的第 n 列。
m7 S f6 c( Q' p) g& z j n- 移至游標所在位置之前的第 n 列。$ `- r; H5 H7 ^
<Ctrl><g> 會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
9 N2 W7 t1 G) B) \; R8 H* t% T 註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
1 G7 g$ {; `, a' Q- L 註二:段落(paragraph)在vi中是指以空白行隔開的文字。1 o9 Q* p0 m6 s. u# X
% z1 c. w8 t2 ^& X$ Y2.視窗的移動 <Ctrl><f> 視窗往下捲一頁。# Q+ T1 q- D5 R r8 u6 Y
<Ctrl><b> 視窗往上捲一頁。
, b' p" C5 q$ c5 F- I) n2 E <Ctrl><d> 視窗往下捲半頁。
7 {. P" ^1 d+ s, n' B/ P <Ctrl><u> 視窗往上捲半頁。; k0 c( D9 ], y# Y
<Ctrl><e> 視窗往下捲一行。
+ U% }1 ^* ?& l( ^0 B, j <Ctrl><y> 視窗往上捲一行。
5 f. C+ w; p* O* c# u- I i) m
2 _9 N6 w$ X y- B. M7 Q3.刪除、複製及修改指令介紹 (此單元較少使用)
: h e0 N: s" |' U5 x d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
|4 P) |6 |% ^1 f. _/ G4 M+ U- n) E7 w Operator + Scope = command2 g3 y) O9 [* i, V6 R
(運算子) (範圍)
: P# a. M2 q3 W 運算子:- q! b- |, t. G) t7 m6 a6 M
d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。6 q8 J* q$ D7 Z( }# l9 j- z- p" n
y 將資料(字組、行列、句子或段落)複製到緩衝區。
4 R! w& ^9 f# x( Q p 放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資/ q& M9 a( m7 z+ ^; V O" K0 W9 s) j
料放置於游標所在位置之行列下。
' b- ?# _: v7 o2 j c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句" \3 J! F" D, d; l* f4 W6 ?$ t
子等之資料,並插入新鍵資料。: Q; f4 k1 ^2 M
範圍:7 o9 ^3 B [1 u+ O+ l
e 由游標所在位置至該字串的最後一個字元。+ |$ ^) `; u2 B: p' j, j3 \2 Z
w 由游標所在位置至下一個字串的第一個字元。
# b% g U# N! p7 H* j- b b 由游標所在位置至前一個字串的第一個字元。
0 y+ I$ n; ~) S* D' c2 @ $ 由游標所在位置至該行的最後一個字元。: N0 d: P# D, Q6 | O0 ^
0 由游標所在位置至該行的第一個字元。( x! v5 U& Y/ T- ^1 x
) 由游標所在位置至下一個句子的第一個字元。- E6 _" q9 W9 f. i1 W0 e. k8 q& D
( 由游標所在位置至該句子的第一個字元。
# x3 C6 I) ? K+ g2 \ { 由游標所在位置至該段落的最後一個字元。- \6 \# o7 h& P+ w# m" w: m6 K' l
} 由游標所在位置至該段落的第一個字元。
2 P- A! R" v8 j4 W. P) O! m 整行動作
9 k. ]( ^' R5 \7 \ V( D dd 刪除整行。) a0 n' B% Z# }) s2 {: }: a
D 以行為單位,刪除游標後之所有字元。
; Y2 Z9 N( ` A2 o: b2 z cc 修改整行的內容。
7 |$ z! V/ T/ w yy yank整行,使游標所在該行複製到記憶體緩衝區。
7 E& X* t5 W) |
+ C& f3 C4 j( V1 V" r4.刪除與修改
; E! k% E% l6 z- J3 Q* K6 N( l( w x 刪除游標所在該字元。
, Y. o3 ]: D- |4 G, H# n X 刪除游標所在之前一字元。3 w: q' K& \9 P @( }6 g) @) K
dd 刪除游標所在該行。: M" X" k# [ }' Q& ^/ S
r 用接於此指令之後的字元取代(replace)游標所在字元。
( y m: @ a: T$ { { 如: ra 將游標所在字元以 a 取代之。
/ |* L; A! I1 {" ~ O, f: { R 進入取代狀態,直到《ESC》為止。( v- f7 k" b+ b2 U5 p
s 刪除游標所在之字元,並進入輸入模式直到《ESC》。( V2 l( I) e; T) \ G G
S 刪除游標所在之該行資料,並進入輸入模式直到《ESC》。7 r, v2 x) @; J8 T+ r
$ h. _) c! v5 R+ n5.搬移與複製
& z& N; P3 ~7 ?8 t& d& q 利用delete 及 put 指令可完成資料搬移之目的。; ^1 g. J' t3 s
利用yank 及 put 指令可完成資料複製之目的。
+ d Q$ q' U+ m1 x% A- a8 l yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令' r# F) j' q2 ]# x4 |7 ?* W6 B/ S
可將緩衝區內的資料複製到螢幕上。" V* E5 e" `# y# g# z; F0 z( X, z
例:
& G5 H" ^( L9 p" J 搬移一行 ‧在該行執行 dd3 t+ Q( T( \5 x5 \# [
‧游標移至目的地4 \3 m5 ^% t, F( [$ ^4 k4 M6 i
‧執行 p" x) e. B( y3 {2 ~# r9 [
複製一行 ‧在該行執行 yy' d& j) ]/ l$ {" h$ T+ y1 e/ R5 n
‧游標移至目的地
; [# Y4 g y! _8 C [; A ‧執行 p
5 k( g( F( `1 B! Q, u9 L2 c+ m$ [% b: a3 T% v5 j4 O
6.指令重複
2 J) R4 y) W8 R# O$ P: r/ ?) H 在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
" ?9 {: O2 _8 W" ^ O0 e" \ 次。
% E# f$ n5 o8 ^7 t4 M% N8 S6 a 例:8 t- x4 l9 A1 d( J& i4 \ V' a* }
刪除10行 ‧10dd4 S5 v6 ]6 A: Q3 I5 p
複製10行 ‧10yy
0 q- R7 |) M( Y0 Q8 y; k& T: z ‧游標移至目的地
! r& n3 p( ?1 l8 j ‧p
7 E5 b" h x' S9 d" q 指標往下移10行 ‧10j, l) N3 r. A4 e( a" w0 ]
# g9 }1 R7 x' Y2 f7.取消前一動作(Undo)( |, e W# L$ q) @: f4 P3 R
即復原執行上一指令前的內容。
0 @7 ]$ P! m2 g9 `& L/ k4 L u 恢復最後一個指令之前的結果。
9 o( }6 a, s( L$ [2 J U 恢復游標該行之所有改變。+ @: z1 u* [( h! U1 G5 O; o$ m
) m& i/ i4 v% b: o8.搜尋
0 Q; A+ f: W2 Z& H+ f) n- L! p 在vi中可搜尋某一字串,使游標移至該處。
2 m9 [2 N7 e. x2 } /字串 往游標之後尋找該字串。
3 a. ?6 ?/ Q$ A* ?$ j ?字串 往游標之前尋找該字串。
: u1 Z3 m& U5 [ n 往下繼續尋找下一個相同的字串。
# j6 W1 j, A" h0 `; ]+ K N 往上繼續尋找下一個相同的字串。. T5 _# d+ A8 g" T- C
& I- q" |: C6 O; c0 p* A- O3 |
9.資料的連接/ Q+ F K' z0 j. R
J 句子的連接。將游標所在之下一行連接至游標該行的後面。. i |- \3 E4 i6 K, `
若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
3 m, V0 I, v/ I% x: a$ ] (可利用a、i等指令)再按《Enter》即可。3 a2 p5 k5 u6 n% K: ~( \
8 n. \0 \8 Z4 A0 W9 ^8 D k6 _
10.環境的設定5 k9 K ? R% c6 e. x6 K1 _' a
:setnu 設定資料的行號。
6 y$ t1 }- c7 _ :setnonu 取消行號設定。
9 @ V2 I3 ~! v :setai 自動內縮。5 @) L) A4 o' x+ f
:setnoai 取消自動內縮。* U) N! `* Q4 b/ b+ C0 z1 F8 T
自動內縮(automatic indentation)
: f( U' C5 J9 ?: f9 W" N C 在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自; @3 H& |5 C+ ?2 s0 f3 g, @
動內縮的功能,用下例解釋之:
/ P. `: O" O) s4 F ‧vi test
& i& F% J: T; w4 h: i# f0 j/ L ‧(進入編輯視窗後)' L5 p; @# z7 n' R8 g
this is the test for auto indent
- |% j1 |! j9 U* D 《Tab》start indent ← :set ai (設自動內縮)
! ^/ O4 d9 h% k, B3 P 《Tab》data, F( s& }# W# ?8 I
《Tab》data O+ @+ {; c v o2 A0 g4 T. |3 {
《Tab》data ← :set noai (取消自動內縮)
7 e( N- I/ m! K8 b I' b" m the end of auto indent.3 a$ Y$ `, C- m
‧註:<Ctrl><d>可刪除《Tab》字元。
& y" U; u* h* C' N5 v/ `
! P6 I( H; ? w& }7 t3 P11.ex指令
( J; q" m; L, Y3 ?; R/ O: V8 T8 Z& W 讀寫資料
' t( c) k' X! H& e :w 將緩衝區的資料寫入磁碟中。
' J: A0 `6 \( \' L; y2 p! A, x9 f :10,20wtest 將第10行至第20行的資料寫入test檔案。0 }% i5 h! A1 P9 [" ?1 C1 d
:10,20w>>test 將第10行至第20行的資料加在test檔案之後。
8 k- m5 J9 H7 m, ]4 S1 W M :rtest 將test檔案的資料讀入編輯緩衝區的最後。
( Q1 S) Y, q- U; r) |8 Q# x 刪除、複製及搬移' o6 r0 }6 l% ]2 i; [1 p1 F
:10,20d 刪除第10行至第20行的資料。0 q) P3 `0 N) v4 W! ]
:10d 刪除第10行的資料。, X y% f. d& |+ I5 N/ d
:%d 刪除整個編輯緩衝區。
1 M" J- Y2 F( l/ D3 I; ]: [ :10,20co30 將第10行至第20行的資料複製至第30行之後。
! g8 I) R! _& p! y" G' i :10,20mo30 將第10行至第20行的資料搬移至第30行之後。
1 h6 ~+ j' \! T2 W' J' z 字串搜尋與取代- C& b! L: T! m6 @% T
s(substitute)指令可搜尋某行列範圍。
$ w) z: d; L" q: g3 b( f g(global)指令則可搜尋整個編輯緩衝區的資料。, D* c1 e8 X3 ]7 L5 ^, L# D/ r- k
s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
9 u8 o' x$ `) ~5 W6 I2 U& W 件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。3 G9 o! ?6 X. s L' r# P" Q* H
:1,$s/old/new/g 將檔案中所有的『old』改成『new』。
+ G: _' H- f, [; ^: s/ A :10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。& b! x% `; k. B9 N
:%s/old/new/g 將編輯緩衝區中所有的『old』改成『new』。
0 m+ K9 ~3 F1 U4 _, u
$ w) @9 C7 ?, W12.恢復編輯時被中斷的檔案, E1 m3 A9 T9 ^# q/ g
在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
! }! E) T. Q3 l& N) \7 S 被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前# i* n" g% S8 a+ J+ x! c
的檔案內容。% n, E: A' ]6 i
%vi -r filename
' f) o4 S, I1 ] C+ R: b9 O: x* G* C
13.編輯多個檔案
' R! Z' ?5 y" o J/ E! b vi亦提供同時編輯多個檔案的功能,方法如下:! U D( V+ o& W1 ^* r' ]- ^
%vi file1 file2 ..( t# l5 k& @" E
當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後" M. b6 L% X( q- p
再利用 『:n』載入下一個檔案。6 L; J' P5 {& F. T5 j
# k Q3 B4 f& Y; E; E( ~( w參考:
! o9 S, Z/ }& K. K5 Y! V) s- s- Z1 F3 ^1 f
http://chunchaichang.blogspot.tw/2010/08/vim-s.html
6 P$ ^. P8 A, S, ^9 E8 t( X c
| 歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av.one/) |
Powered by Discuz! X3.2 |