52AV手機A片王|52AV.ONE
標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]
作者: IT_man 時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
C& R. G( Y3 E* ?' l
( m& [/ T( P5 _2 Nvi指令說明(完整版)
7 M. Y+ A& ?) n4 t1 P& z- vi 的操作模式
, m# P8 k1 m n; }3 e$ k
) C$ ~4 A5 h( O- P7 [3 o z1 }
vi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
- 輸入模式
( s0 C; Z' p# o' O' L
& y3 `7 r6 n0 B8 S: m 如何進入輸入模式
8 [0 _. m) [& S5 X a (append) 由游標之後加入資料。
. G3 N% R9 T. _& I A 由該行之末加入資料。8 m1 x& J" _) s ]8 y6 Q
i (insert) 由游標之前加入資料。! y" o6 P- a! h8 W, A
I 由該行之首加入資料。
% V$ t6 M% ]7 |; a( K o (open) 新增一行於該行之下供輸入資料之用。
6 f s8 k) k, _/ f O 新增一行於該行之上供輸入資料之用。
( v2 Y, D% n0 M 如何離開輸入模式
, A& w" V% Y/ `1 @ 《ESC》 結束輸入模式。2 F% t& g6 X+ z8 c. S9 U" t$ N4 R
- 指令模式: E+ p/ l$ g( q( y- k" C, \7 \) {
* e% C6 `1 s% v$ M- G" V! U
1.游標之移動
* r$ M c( u1 ?" c# k h 向左移一個字元。
2 E% H+ s( ]/ G j 向上移一個字元。
8 v: n# O7 f! b8 D! `) W k 向下移一個字元。/ W4 W( A% i; A# S. w
l 向右移一個字元。* S3 J3 r% Q5 S$ m9 g
0 移至該行之首. v' L2 m& u/ i! i
$ 移至該行之末。! ~* w- N9 b. J% d! H- w0 I
^ 移至該行的第一個字元處。
" ~1 Z: Q- D3 K0 ^8 ?0 [ H 移至視窗的第一列。
9 d0 z- ^1 d% L! _4 O% z M 移至視窗的中間那列。( S/ V/ I9 ]1 `/ S, l5 h* V2 R
L 移至視窗的最後一列。
( h R- v0 c9 C5 J: H6 H5 J6 K2 A# Q G 移至該檔案的最後一列。2 R3 N+ M, j8 b3 a6 m8 @4 F- Y
+ 移至下一列的第一個字元處。) g/ P3 U8 d( X, c) F S5 e
- 移至上一列的第一個字元處。
, E1 m% z9 E+ Q7 b* @+ O& d% p ( 移至該句之首。 (註一)9 C9 I* C0 Z) f. w6 }4 A9 D
) 移至該句之末。
- s7 A5 s7 ?7 o8 P3 T- U" ]0 k2 ~ { 移至該段落之首。 (註二)9 }& W$ [& S7 H1 ?- \
} 移至該段落之末。- n+ O2 u/ e4 K! J* r! I
nG 移至該檔案的第 n 列。 S; u8 V+ j0 S" F
n+ 移至游標所在位置之後的第 n 列。- E# `+ k C- k" |
n- 移至游標所在位置之前的第 n 列。
5 y) Z _* A G( \5 u <Ctrl><g> 會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
2 b- `* Z. _+ ]- S y% U7 h 註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。$ q; Q! C4 j, C. G' g" `
註二:段落(paragraph)在vi中是指以空白行隔開的文字。: K- W/ y5 u; t, x6 x- ^
6 l9 B+ q% R$ S/ n& u$ D. u: k2.視窗的移動 <Ctrl><f> 視窗往下捲一頁。
! g- Y! s: y" |9 F6 R7 m$ W <Ctrl><b> 視窗往上捲一頁。
2 C B& r3 h" H. i <Ctrl><d> 視窗往下捲半頁。
5 n- K2 F1 p5 y; E4 g <Ctrl><u> 視窗往上捲半頁。- L' u1 W8 P) l
<Ctrl><e> 視窗往下捲一行。
n1 n& @4 x! Z L6 K9 L! ` <Ctrl><y> 視窗往上捲一行。
: Q; O: V. [: N8 q, e. p- T, ^
3 K# ?. ~1 D) [% W# U8 M& K3.刪除、複製及修改指令介紹 (此單元較少使用)( S/ t: X4 \& J. u: g( l
d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:; P: A0 f e; S3 J' r' m
Operator + Scope = command0 O& q0 k9 K, z+ C; {1 i2 X
(運算子) (範圍)
" V- o" ~. e+ v 運算子:( e& ?& E( t) E3 l; O9 C1 J, V
d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
9 U$ F) H6 E1 O1 k2 w. \7 u. o y 將資料(字組、行列、句子或段落)複製到緩衝區。
% S7 y0 W+ q9 p0 }+ j' e p 放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
. {8 W% C% P& z( R 料放置於游標所在位置之行列下。- b# S/ g/ k* J5 C2 t8 U) I4 U
c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句
9 ?+ \- F8 b. N+ I% V 子等之資料,並插入新鍵資料。# ?# n8 U1 B' ~" ]
範圍:
, R# |$ K; B7 A K& \! ^ e 由游標所在位置至該字串的最後一個字元。$ P9 `/ l1 ^5 P, {2 o! \
w 由游標所在位置至下一個字串的第一個字元。
" U! k$ U; ]. t' K b 由游標所在位置至前一個字串的第一個字元。3 D' x4 {/ E3 d1 ] t( @, K; |) h
$ 由游標所在位置至該行的最後一個字元。" {, v9 f* i2 J! A: {
0 由游標所在位置至該行的第一個字元。) p. b% F9 F0 ?+ j( j: o
) 由游標所在位置至下一個句子的第一個字元。" p$ w* d! n& A
( 由游標所在位置至該句子的第一個字元。
2 q% U! o; L" w, H. t2 J { 由游標所在位置至該段落的最後一個字元。
' E$ H+ E& Y8 i# B1 i) o" q } 由游標所在位置至該段落的第一個字元。. A0 ^: l/ I/ M5 Z1 l0 p q. g
整行動作- P# S( q9 z' O7 ^5 T0 @
dd 刪除整行。( R! Q; J! u! M
D 以行為單位,刪除游標後之所有字元。1 K. Q8 K$ V1 _! ^- Q4 F5 z
cc 修改整行的內容。
3 q+ q9 d$ t$ ]( y8 c1 [ yy yank整行,使游標所在該行複製到記憶體緩衝區。
" w! ^ N" Q+ D3 s" R5 f
8 P# @/ G7 l3 h4.刪除與修改
+ q$ ?$ J. S* T) r3 Z x 刪除游標所在該字元。
0 U+ ?! Y0 U, L: z5 c X 刪除游標所在之前一字元。6 [7 ]/ e3 G, [6 `
dd 刪除游標所在該行。
" H/ L. Y( F5 c" H* _ r 用接於此指令之後的字元取代(replace)游標所在字元。7 z4 C, a' F; H" b! k# C- @8 V' K
如: ra 將游標所在字元以 a 取代之。/ ~# @2 l6 K3 I. @) L! C, @, n y
R 進入取代狀態,直到《ESC》為止。9 K N+ p1 L3 ~1 D( h
s 刪除游標所在之字元,並進入輸入模式直到《ESC》。5 j2 w Z9 s1 Q& d( f$ L
S 刪除游標所在之該行資料,並進入輸入模式直到《ESC》。: H& P' {4 T' {% U$ C8 y$ K
7 B# ~( b, K4 W& B9 s; |) y A% D5.搬移與複製; s8 N7 a3 z X6 y7 j2 L
利用delete 及 put 指令可完成資料搬移之目的。
* r3 }% D9 S3 j+ E 利用yank 及 put 指令可完成資料複製之目的。
: ~0 t) t; A3 F( h @1 r B yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
9 ~, |7 k d6 Z, G: g 可將緩衝區內的資料複製到螢幕上。
$ O1 |7 E5 I6 t 例:
1 ^4 @, i( p' p# F4 x 搬移一行 ‧在該行執行 dd
' M$ Z% \8 }5 I+ r. h! f/ \ ‧游標移至目的地1 H5 ~" E( {! N5 G2 c$ z8 E% ^
‧執行 p/ P q6 w/ g3 H, L! ^2 y R% T9 o. ?
複製一行 ‧在該行執行 yy. l: a' ^7 J- z+ e4 t, `, l
‧游標移至目的地
. X# Z3 x- ~7 m+ c ‧執行 p8 v8 ^* w+ @$ B' x& [* [% _( M! @
% |0 \$ S$ ]% o. R2 ]" Z
6.指令重複
& @6 v" k" U8 x7 t+ S 在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
# n I$ S' {8 T% ~ 次。2 v: \# ~+ |0 P! h. H) ^
例:
( L: S t- H, L0 v8 j! R 刪除10行 ‧10dd+ n# v5 W% T4 J$ [8 x
複製10行 ‧10yy7 y7 u' h6 u" e! ]- y6 n
‧游標移至目的地# L; C' S3 W, T7 b
‧p
( Q0 }9 |! j0 r( L+ _0 B- p 指標往下移10行 ‧10j
2 i6 c4 K; N5 u1 P; T. F7 j' A
2 i! O) G! E H* `1 W1 B7.取消前一動作(Undo)
" L' B/ }: v3 t) H( G 即復原執行上一指令前的內容。: O# N# @0 V# X% ]& }5 z( p
u 恢復最後一個指令之前的結果。" M% v8 U$ l* q3 M$ Q
U 恢復游標該行之所有改變。
1 N! b2 y% l3 Q* r& N8 H( B+ `7 a; n `- {4 n
8.搜尋
0 a ^+ N4 j( L- q- p3 l6 K 在vi中可搜尋某一字串,使游標移至該處。
0 `$ V. M6 A/ {5 l& r /字串 往游標之後尋找該字串。9 M/ G+ w" |8 i! a! _. o
?字串 往游標之前尋找該字串。
& L8 J7 l7 u' c* v5 T- N n 往下繼續尋找下一個相同的字串。
2 U- g& B5 H1 d( [1 |; w4 t, T N 往上繼續尋找下一個相同的字串。2 O& b! b' F4 w6 K$ G
. h$ p6 i7 y5 c+ }4 Z( M. l
9.資料的連接: {8 |7 k) T* H
J 句子的連接。將游標所在之下一行連接至游標該行的後面。
+ O. e8 s) T, m7 F* k9 N! c% O 若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
5 \: z+ Q* C$ k. j1 Z (可利用a、i等指令)再按《Enter》即可。
9 I) }% s% C( Y+ r8 F+ ^8 R4 {9 a3 b# `8 J& p. o2 H
10.環境的設定
' I4 {, o+ ]4 Z, E- z1 Q3 [* b$ l :setnu 設定資料的行號。
- t7 _- v+ E8 b5 ?+ K2 m7 G :setnonu 取消行號設定。
U' ]* i9 M4 E' C :setai 自動內縮。$ e$ M) [; C, K7 j
:setnoai 取消自動內縮。
' z! g4 E9 F+ x2 Q2 }- I 自動內縮(automatic indentation)
4 J6 S9 `0 f& y% e$ L 在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
Z% Y4 ^* ~ E3 K8 K0 m% Q 動內縮的功能,用下例解釋之:: _8 d) b6 s6 p p- Q7 f y
‧vi test, e, v% o6 b0 X; D
‧(進入編輯視窗後)
) ~3 q7 X4 J8 T! H* ~ this is the test for auto indent1 R0 O! O$ O( k |! i' C
《Tab》start indent ← :set ai (設自動內縮)" ^8 d% |7 F0 ?
《Tab》data
8 w: j: ~4 o. w* p) x0 p 《Tab》data
4 o- O1 ^5 B2 _6 }0 } 《Tab》data ← :set noai (取消自動內縮)5 D8 Z* p8 n& P
the end of auto indent.! N4 i9 z/ g' L" P
‧註:<Ctrl><d>可刪除《Tab》字元。+ P: T3 [+ J6 F9 |4 O+ |
8 F' j' e7 |4 Y5 S8 \11.ex指令& F+ G# _" \: }1 t7 A; ?# z
讀寫資料8 e# ^6 [# _, K* I$ a$ a4 P3 E+ a! x
:w 將緩衝區的資料寫入磁碟中。( C+ H0 d, Y( z6 A* l; @2 D
:10,20wtest 將第10行至第20行的資料寫入test檔案。
% m2 ~! N" O* d. a# ~5 R :10,20w>>test 將第10行至第20行的資料加在test檔案之後。7 C5 X3 S6 `" `: q! M0 A- h' s7 n7 F
:rtest 將test檔案的資料讀入編輯緩衝區的最後。
2 U; x( d6 @1 d0 k2 K' F" M 刪除、複製及搬移; m: J- c: o* |' a7 \/ i
:10,20d 刪除第10行至第20行的資料。8 Z2 H4 j; s& c2 v9 t* i; P! ]3 l8 D$ m
:10d 刪除第10行的資料。
# k$ L' s5 X: a: R3 u6 G :%d 刪除整個編輯緩衝區。 k3 ^" J7 a7 P# @4 G% i
:10,20co30 將第10行至第20行的資料複製至第30行之後。
% K/ I* @8 _( |/ g/ r& v :10,20mo30 將第10行至第20行的資料搬移至第30行之後。8 B6 r9 O% R6 L$ [$ v1 d4 ~5 _
字串搜尋與取代
3 b5 O7 d% H! g+ u% a s(substitute)指令可搜尋某行列範圍。
& c. [" A9 U! w6 s0 g g(global)指令則可搜尋整個編輯緩衝區的資料。, ]! P- Z- `5 p" v; j* c% Q
s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條8 [3 r& n9 N/ O; N
件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
7 x- W/ n4 |2 U :1,$s/old/new/g 將檔案中所有的『old』改成『new』。
6 G" X: N ?6 {& k( | :10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。
& e# g- x! j% j# J. K :%s/old/new/g 將編輯緩衝區中所有的『old』改成『new』。( b9 u Y- S* s3 T: F+ J) a) i
( M, N* u' d. {12.恢復編輯時被中斷的檔案0 t* B" n" H" H/ C
在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
; F7 v0 W. f6 ` 被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前, x6 C" }" H4 l
的檔案內容。& Y( k2 f6 e4 B8 T, a8 c
%vi -r filename7 A5 r j; J1 `. c" Z7 _( A
7 e- S/ D- [) ^1 j# h13.編輯多個檔案
& |- u8 J* \0 K9 Q vi亦提供同時編輯多個檔案的功能,方法如下:! f. k: y* O7 ?$ z" G, ~6 _ h
%vi file1 file2 ..
9 e h H9 U' h# { 當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
% t6 @3 S8 Y/ `( I$ e6 X. ~9 C& ? 再利用 『:n』載入下一個檔案。
' [+ Z( I1 X) c
3 A8 r+ t, y; c" u* g) P' U參考:
3 V. n3 G# l e3 c& {2 s
' S' E8 p, p8 rhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html
. h- d6 ?4 J# {8 |' C( I- c7 X; c/ b
| 歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av23.xyz/) |
Powered by Discuz! X3.2 |