52AV手機A片王|52AV.ONE
標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]
作者: IT_man 時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
1 Z. D1 d! m5 K Q5 Y
9 ~* x: n7 Q5 M* g/ f- Uvi指令說明(完整版)1 ^, Q5 h$ L5 Y: B5 G' t3 `
- vi 的操作模式
9 b- r# C! `5 [( f) c
" `* w9 Z% |5 _4 \
vi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
1 z/ d: @. g [ 如何進入輸入模式" D3 E" v/ M3 ]( R
a (append) 由游標之後加入資料。9 ^2 X o" L$ M" P
A 由該行之末加入資料。
?4 w9 w: m, X. W1 Q5 q. q0 l' \ i (insert) 由游標之前加入資料。
- @' ^4 O- X1 `2 D3 P I 由該行之首加入資料。- U& `, F( c$ F3 _6 h; V6 m' V
o (open) 新增一行於該行之下供輸入資料之用。
4 W& X9 D% h2 f `% p! y O 新增一行於該行之上供輸入資料之用。
2 V+ Q4 ^3 P% Z9 a- _ 如何離開輸入模式1 s# q+ x" N# s: ]& y
《ESC》 結束輸入模式。6 G$ @$ R: }. Z- e
0 p9 v: g3 i# O1.游標之移動
q# ~/ D( T" y9 f' e5 d' u8 o h 向左移一個字元。
2 ^) O0 B0 J! Y/ X* L2 j j 向上移一個字元。
) U& P& Y/ K7 T- w; Y1 z0 v k 向下移一個字元。9 y1 Y8 o* e2 H4 D$ X) ]
l 向右移一個字元。
. ~* ]. V' P" X9 T/ B# h/ i( W 0 移至該行之首
. j, v& i* ~9 O9 C+ H( D $ 移至該行之末。- M- p, r* p% s4 b) F! s- C2 `+ E0 ]
^ 移至該行的第一個字元處。: t5 n, s; o2 r! w* Q9 q" w
H 移至視窗的第一列。6 p& q0 o( n- s- E9 G K
M 移至視窗的中間那列。
) I/ i5 K5 p9 S7 |4 w2 i L 移至視窗的最後一列。, ~+ h( }4 U& m/ ?' V6 Z
G 移至該檔案的最後一列。) R& N8 t' W {
+ 移至下一列的第一個字元處。. I& R7 G( D% w% H! n9 K
- 移至上一列的第一個字元處。( t( z7 D6 D$ @ `5 w
( 移至該句之首。 (註一)! r; ^: l& p7 a Y3 U1 f+ N
) 移至該句之末。) A% c6 h$ Q" @8 N% | e/ I
{ 移至該段落之首。 (註二)
( d! j6 h8 G; h( A0 @; e } 移至該段落之末。
! z4 O% h- F8 X6 C/ M nG 移至該檔案的第 n 列。7 |1 T% m- }( E$ R5 u, ?. ~- z' d/ b; T
n+ 移至游標所在位置之後的第 n 列。
' B. ]. [1 v# V9 M4 N n- 移至游標所在位置之前的第 n 列。
6 z* T2 }, F* B, c, r9 |) K/ P <Ctrl><g> 會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。( V5 s+ }% F$ W/ ]
註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。5 A3 r4 p( h6 F# ^! Y
註二:段落(paragraph)在vi中是指以空白行隔開的文字。1 O) }) k6 T0 Y3 J6 ?
. g% B, D4 L5 D( J: }6 ^3 m2.視窗的移動 <Ctrl><f> 視窗往下捲一頁。% ^! Q) y6 h e' [$ D+ s
<Ctrl><b> 視窗往上捲一頁。" U! q* [. `8 J8 ~
<Ctrl><d> 視窗往下捲半頁。& i: |- e/ H: E5 ]& b9 @
<Ctrl><u> 視窗往上捲半頁。3 R' l, A6 e4 R& r
<Ctrl><e> 視窗往下捲一行。) s8 ^5 X- G |: E* n
<Ctrl><y> 視窗往上捲一行。# ?! c9 g* E J( _
8 g: j1 E8 s. r" L1 T* b4 E; S3.刪除、複製及修改指令介紹 (此單元較少使用)8 P6 D" s/ ^$ Q/ J2 H* f
d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
1 p: S# G9 t: @ Operator + Scope = command' G* d+ r3 ?. k4 Q% t
(運算子) (範圍); A9 w5 K+ _9 ~! d- p; x
運算子:6 j% F& U! B! U, y, C" y4 c/ I0 R
d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。; E: G% l5 h! O; F0 \
y 將資料(字組、行列、句子或段落)複製到緩衝區。5 B! k) A# G& l$ ~( D
p 放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
T( l+ Z0 `& v- w5 b 料放置於游標所在位置之行列下。' t, I$ ]+ s' N# e; [
c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句2 j4 W, z* y; E4 H6 K, F# ]
子等之資料,並插入新鍵資料。
D: Z1 V9 q& l$ S 範圍:0 O2 Y9 ]6 e9 ~2 V) x3 {9 g
e 由游標所在位置至該字串的最後一個字元。0 `$ x5 x( w' t! Z0 [+ L0 |
w 由游標所在位置至下一個字串的第一個字元。
0 q2 k$ V6 k0 T b 由游標所在位置至前一個字串的第一個字元。
% W- S8 x# D5 M+ _1 l4 K5 X) B $ 由游標所在位置至該行的最後一個字元。
8 F; B2 o( E9 u 0 由游標所在位置至該行的第一個字元。: l# w: t% E2 }1 `: _' {+ E& H
) 由游標所在位置至下一個句子的第一個字元。
3 P9 a* n0 L: c! P ( 由游標所在位置至該句子的第一個字元。
_4 v# e. [) r6 K2 I { 由游標所在位置至該段落的最後一個字元。. J4 l% W4 ~6 H4 W" |5 Z1 r
} 由游標所在位置至該段落的第一個字元。
6 Q7 [3 t2 J: Q. D( Y1 U 整行動作
1 z" j9 @! N# X5 `; p* U$ u" @. q1 G dd 刪除整行。; N( H+ o4 v) `" ?/ `+ k$ ?4 v
D 以行為單位,刪除游標後之所有字元。
: m' B, M2 Y+ w- Z8 C5 Q% w/ K cc 修改整行的內容。
& T7 F9 D4 Z* d- Y- |# ?/ h yy yank整行,使游標所在該行複製到記憶體緩衝區。) T( ]3 N) t) @8 ?5 A+ p. i/ z
1 G- \2 N, s" S9 N4.刪除與修改/ ~9 ~/ D! E1 d \
x 刪除游標所在該字元。* U9 m" l. ~. U# s$ N2 b& s3 p8 I
X 刪除游標所在之前一字元。' {( B" R2 k' z9 f' Q$ g( T3 |
dd 刪除游標所在該行。. {5 z5 A' G5 L. [( F* H
r 用接於此指令之後的字元取代(replace)游標所在字元。3 p3 J5 Q8 B3 r
如: ra 將游標所在字元以 a 取代之。4 r, F+ e0 J+ H4 P& k
R 進入取代狀態,直到《ESC》為止。$ u! |$ j+ L0 r% v3 C
s 刪除游標所在之字元,並進入輸入模式直到《ESC》。6 G( h. x( R( q$ L! G
S 刪除游標所在之該行資料,並進入輸入模式直到《ESC》。! x( ~ M8 y# B# k
! b# a K" [; i, r8 N5.搬移與複製! p1 q! @0 c0 ?& e# T
利用delete 及 put 指令可完成資料搬移之目的。
3 G, g% y# V( u1 r0 N( Y5 E 利用yank 及 put 指令可完成資料複製之目的。9 w+ d- O& q. Q
yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令. w k9 k* f4 x# ?, F( v! j* o
可將緩衝區內的資料複製到螢幕上。
; I* X' W' l' _ 例:" W) \6 W, _, z k) n: o
搬移一行 ‧在該行執行 dd
9 }1 |2 D$ z. z ‧游標移至目的地9 f! b, c8 S* X6 ^& I6 h! S; n1 Z* u
‧執行 p/ M E: y3 `. D$ A8 J3 h
複製一行 ‧在該行執行 yy$ o7 n0 T# P* r( n
‧游標移至目的地
! s; ^ B; u2 s8 t1 k! b: i5 y ‧執行 p
3 R2 S! V+ H( V
4 {1 ?! u J. x6.指令重複
, y& _8 u: A: e. W2 `* i 在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
& S n( T" j d6 c 次。/ @1 |- _1 t) w* _
例:
# S- m4 V+ J% G& s- M& {4 }8 H 刪除10行 ‧10dd f8 M8 T2 b% d& d: V. }
複製10行 ‧10yy
$ I7 ^5 n+ {% u ‧游標移至目的地
5 e) A4 u' f% K. i7 w% T ‧p
/ D1 w3 B) |: W% T 指標往下移10行 ‧10j
4 `( X! M. E8 t8 Z! E! h! x# X" G: c! K$ C8 |) R, ?: h( `
7.取消前一動作(Undo); s/ N9 F4 _0 M0 |! m' A, n
即復原執行上一指令前的內容。
0 Y. O7 P4 r8 k4 P) C" K u 恢復最後一個指令之前的結果。7 H2 X' `! b2 x
U 恢復游標該行之所有改變。
0 P5 }+ i3 s( t
- }8 @ w, S/ X) w1 b: A8.搜尋. s' S0 {3 [5 C
在vi中可搜尋某一字串,使游標移至該處。# j- w/ C i4 H; c" ^
/字串 往游標之後尋找該字串。' ^4 P8 _4 b" V) j1 N6 [, `
?字串 往游標之前尋找該字串。
3 i" I4 W H5 o n 往下繼續尋找下一個相同的字串。/ J/ C. [# I0 L* U k* L
N 往上繼續尋找下一個相同的字串。* U5 {; S6 W @$ g, l" x. r
# {3 |: t0 Y6 b( ?. M! E9.資料的連接
3 r6 c2 N7 p! h& P4 k J 句子的連接。將游標所在之下一行連接至游標該行的後面。+ u/ z; C! y8 b& c; I$ D
若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式; n9 Q0 m5 Y& t9 p
(可利用a、i等指令)再按《Enter》即可。: f! o1 A5 I ~* O' K7 q- [) S0 J& d
$ Z4 e3 p( I& e% n10.環境的設定
' }6 ?/ Z3 b% l ?0 Y :setnu 設定資料的行號。& x2 M8 J6 }: L ^. @; A+ a% y
:setnonu 取消行號設定。
' |, A4 }8 x( o9 J3 S5 c8 ~' B C :setai 自動內縮。$ G9 W5 ?6 C( S# c
:setnoai 取消自動內縮。# J- T# |6 v$ L, Z$ r0 Q' w/ Z; G
自動內縮(automatic indentation)
9 \3 s* }6 A; \: q! i5 |- d8 V 在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
' H. l0 V9 N1 R P- s 動內縮的功能,用下例解釋之:
* [3 l. \5 s W2 y ‧vi test1 W% R# r) K0 V8 X
‧(進入編輯視窗後)
, |' L9 D2 r! L. k. u: n1 Q& e this is the test for auto indent4 W5 t) y0 W" L" v: \ Q# V
《Tab》start indent ← :set ai (設自動內縮)6 d' v3 [ N" E* D% h" l) n
《Tab》data Q" [1 ~- V0 z$ N# ?
《Tab》data
" v1 m/ {6 {3 C; j# t 《Tab》data ← :set noai (取消自動內縮)" R9 S! k) J# D4 @
the end of auto indent." A4 A+ |) B8 G0 ?5 i
‧註:<Ctrl><d>可刪除《Tab》字元。2 L/ H: y+ y7 Q6 x0 w0 U- E
5 ]3 L& d% s$ [7 T4 y& _" `3 m
11.ex指令 B! O C/ ?* `6 w
讀寫資料
9 b9 r. M6 K6 u8 }) `/ Y ]' `: l :w 將緩衝區的資料寫入磁碟中。 ^+ v1 n$ Y a, `7 u8 h
:10,20wtest 將第10行至第20行的資料寫入test檔案。
6 }6 w$ g& }( F :10,20w>>test 將第10行至第20行的資料加在test檔案之後。7 U3 n7 @( Q2 A1 M
:rtest 將test檔案的資料讀入編輯緩衝區的最後。5 K7 m: i. G5 K7 H5 l
刪除、複製及搬移
* _# ~% J$ K! I W. D+ `) p :10,20d 刪除第10行至第20行的資料。
O" _8 X& N o- q& f9 b; { :10d 刪除第10行的資料。
# E% Q/ H0 J" D0 z7 B :%d 刪除整個編輯緩衝區。
7 j" G8 M. h2 z; O, @# |3 v :10,20co30 將第10行至第20行的資料複製至第30行之後。2 b3 W2 Y1 r+ s- S
:10,20mo30 將第10行至第20行的資料搬移至第30行之後。/ r1 {$ d& a! S: {: O& C
字串搜尋與取代% l6 G a2 V% ?6 j5 X9 Y
s(substitute)指令可搜尋某行列範圍。; U! C) f4 `/ W0 i( _* Q- v
g(global)指令則可搜尋整個編輯緩衝區的資料。) z0 R$ l5 q" k, h8 {
s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
1 K) j9 |( r ]( {+ ^0 ~ 件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。2 o, M1 U9 z ]% B
:1,$s/old/new/g 將檔案中所有的『old』改成『new』。
; `# u5 V/ S. Q4 R b% s/ z2 } :10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。
d5 r; N, H: _7 ` :%s/old/new/g 將編輯緩衝區中所有的『old』改成『new』。
~1 S' M2 e0 f. }
3 l' `: C: d! v5 E3 ?12.恢復編輯時被中斷的檔案# I( E, X1 o9 |' L# l6 }2 ]& Y
在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
$ m0 q# w' g' |+ V) x1 ?. l 被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前4 A7 } J7 D% ]& A. B7 T; c
的檔案內容。
9 X( w2 n2 _( W2 b; j: b %vi -r filename
% [6 H7 I8 }3 w
0 Q) f7 |' n5 a13.編輯多個檔案
% ?3 ]$ Z; Q& a vi亦提供同時編輯多個檔案的功能,方法如下:( Y5 {- c) ]' i
%vi file1 file2 ..% v- T! `8 y m. R
當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後 d W8 W2 f+ C& @
再利用 『:n』載入下一個檔案。# b8 g9 k9 T6 r( E+ e# u9 a
$ o7 N( V5 t) M* d: r* m參考:
: a/ _* r6 N3 ?8 p/ B
! W8 n2 |9 ^. P3 X) i3 s( @# nhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html. u( @ m$ O7 y% m. q7 B
歡迎光臨 52AV手機A片王|52AV.ONE (https://nhkie.com/) |
Powered by Discuz! X3.2 |