52AV手機A片王|52AV.ONE
標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]
作者: IT_man 時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯 : u; o# Q( l; Q/ c/ g
; v6 H- z$ z! ~vi指令說明(完整版)
8 w) x) k) h; x1 F- vi 的操作模式- y* V$ S. U; J# d0 e" x7 g
) a7 f$ I: D1 F& a1 L
vi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
7 F- D) @6 A8 L' W2 v H 如何進入輸入模式* _- N$ ^8 b: A
a (append) 由游標之後加入資料。( G2 b- h" k: T% N: M# l$ G" f! C. J
A 由該行之末加入資料。! `( l. ^) L6 t# ~! O
i (insert) 由游標之前加入資料。
* ^9 b( S6 R9 h) W I 由該行之首加入資料。
$ h) D( Y, i6 E6 @ o (open) 新增一行於該行之下供輸入資料之用。
% I9 g4 D5 e2 p) M( Z O 新增一行於該行之上供輸入資料之用。
; a9 @5 w2 d) }0 r E 如何離開輸入模式
2 }$ H p t! r* b. V7 }% f, z9 } 《ESC》 結束輸入模式。
" ^0 L; z+ m9 G5 ?- 指令模式- I% S9 e& s) }+ t8 M
2 t7 X; g S0 ~# P! V
1.游標之移動 d- K: G/ b3 q0 I3 w
h 向左移一個字元。* p6 ]% F, K0 c1 x. E \* a
j 向上移一個字元。
5 O% u6 Z) i1 T% a" _ k 向下移一個字元。
5 ^8 F" ]0 n2 f l 向右移一個字元。8 w- A: L* E* O' ~0 ]
0 移至該行之首
: |! W! N! r' j5 h* n $ 移至該行之末。, I* e* t6 G( D( @8 o& H
^ 移至該行的第一個字元處。
' f8 u0 n# H* x$ L* M' y8 v. x H 移至視窗的第一列。: z: p; U# r: S; W+ Y" P
M 移至視窗的中間那列。
% x* W- W, t) u Y, n L 移至視窗的最後一列。
6 }; ], z3 P1 Q2 L G 移至該檔案的最後一列。$ T: R Q+ y' m( L
+ 移至下一列的第一個字元處。
6 O0 k: `. Z. F1 \ - 移至上一列的第一個字元處。
4 i- D( E' G; b4 d: x' h ( 移至該句之首。 (註一)
4 E$ w, G. e; e; o4 o4 P ) 移至該句之末。6 \1 K4 \0 I W/ s
{ 移至該段落之首。 (註二)
- W r0 M+ f) J1 X# B, G+ V } 移至該段落之末。
9 F; a) D7 ~& p. X4 M2 Q nG 移至該檔案的第 n 列。0 }4 i" }. J) N7 n- V
n+ 移至游標所在位置之後的第 n 列。
8 M) d5 }8 f* D; Z+ l1 B n- 移至游標所在位置之前的第 n 列。9 j v. |; F k6 }
<Ctrl><g> 會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。; m p q; O }7 [
註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。, ~. b R5 i) ?7 ~7 l$ E
註二:段落(paragraph)在vi中是指以空白行隔開的文字。6 v8 j+ m5 H" o5 `$ e" A$ J/ M7 K
5 F! F2 |1 H' d: e, z6 ]2.視窗的移動 <Ctrl><f> 視窗往下捲一頁。7 `' p5 g! e& W( f
<Ctrl><b> 視窗往上捲一頁。+ V, ]) t" U: T" p7 Z
<Ctrl><d> 視窗往下捲半頁。6 Y8 \$ ^$ D' W8 k
<Ctrl><u> 視窗往上捲半頁。
5 F' z, X+ O" _8 O <Ctrl><e> 視窗往下捲一行。
- Y% W; X; V0 _8 V, P <Ctrl><y> 視窗往上捲一行。) i, [! b5 A0 R
1 g5 [" Y- |/ s/ d: o
3.刪除、複製及修改指令介紹 (此單元較少使用)0 f& n; N6 T3 Q7 S k2 x& F
d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:8 s1 V4 h. y* H
Operator + Scope = command! F: `, G* E; N# Z9 O$ \$ ^
(運算子) (範圍)' p* ~1 L; \" ]7 t
運算子:
; _5 b& {) o4 }1 v0 U d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
7 n4 j* P" V8 m y 將資料(字組、行列、句子或段落)複製到緩衝區。0 u( ~/ e- W& B
p 放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資2 {1 p9 w5 D* A5 z+ f! b. l7 ^* T
料放置於游標所在位置之行列下。" p* Z1 x$ }$ X" s1 j) d4 D' s3 e7 O; i/ \
c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句
- r8 t( j) @% d* X+ H 子等之資料,並插入新鍵資料。$ [; |+ c% }$ u5 N7 V
範圍:# \3 {: {, n- M* Z, n8 N
e 由游標所在位置至該字串的最後一個字元。
) r k8 I4 b, e7 C7 j' t w 由游標所在位置至下一個字串的第一個字元。5 ~4 f8 U1 @$ v+ Z& a6 x
b 由游標所在位置至前一個字串的第一個字元。! g2 A1 u- [. d# a) G
$ 由游標所在位置至該行的最後一個字元。9 S# F* w' z% `) K( x
0 由游標所在位置至該行的第一個字元。
$ {- M) `0 G- k W3 h; g+ p ) 由游標所在位置至下一個句子的第一個字元。6 J4 n5 U$ D+ X2 x) P
( 由游標所在位置至該句子的第一個字元。6 y$ q% A) k- P1 E4 v7 C
{ 由游標所在位置至該段落的最後一個字元。
' t9 i4 ?. w3 k" I6 [0 F- @ } 由游標所在位置至該段落的第一個字元。
, F. r0 j6 d9 \' H- d: o 整行動作! w% t+ {* T4 K- M1 A: m
dd 刪除整行。" m+ n1 m$ y* e3 r" ?* K, q# m
D 以行為單位,刪除游標後之所有字元。& t$ t- L7 h5 ~
cc 修改整行的內容。4 ]8 r3 [0 V2 v
yy yank整行,使游標所在該行複製到記憶體緩衝區。
# z. d. i( c7 p& A# Y
9 |, m* f R6 R, I4.刪除與修改
; T2 C. B( c. r. L6 ~% b3 @ x 刪除游標所在該字元。$ v) u3 s3 p4 V6 X6 c6 H
X 刪除游標所在之前一字元。* ^1 B, M. i' Z5 P6 m, O
dd 刪除游標所在該行。
3 ]0 u; U# r: m; W, v r 用接於此指令之後的字元取代(replace)游標所在字元。9 R6 ^# d+ E$ J5 f/ E2 C; |
如: ra 將游標所在字元以 a 取代之。
0 b7 p2 d/ \; m% e! w9 U6 u. c R 進入取代狀態,直到《ESC》為止。
; C! r/ A% m( I- r1 E& e% s s 刪除游標所在之字元,並進入輸入模式直到《ESC》。
8 x$ s. f0 k, o6 Q8 X" M9 } S 刪除游標所在之該行資料,並進入輸入模式直到《ESC》。
$ q; c0 [" @% l* Q5 b! N- p9 `7 S5 x% Y8 x0 a7 G
5.搬移與複製
; Z3 K9 l' L% U% f1 A3 z& S E, j 利用delete 及 put 指令可完成資料搬移之目的。4 w/ k$ |- W: m0 P; }$ P- V; m* H! \
利用yank 及 put 指令可完成資料複製之目的。2 P& N/ O+ H# F
yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令5 @+ T4 W- y: Y( l
可將緩衝區內的資料複製到螢幕上。+ c' u3 J+ c+ ~9 h [- ~
例:
" {5 a3 q/ R5 r+ W3 R h0 }# N( n 搬移一行 ‧在該行執行 dd
% K+ }3 d7 n) l; d# j ‧游標移至目的地
8 R. ~+ e9 J9 M4 E/ L ‧執行 p
7 m3 ~; ?% n3 \ 複製一行 ‧在該行執行 yy
1 D- m, y3 v9 s, z$ b! R ‧游標移至目的地
8 }6 f# d4 m! a( {/ T* c ‧執行 p
+ k% w" y0 F2 z: H+ |
* f. D: Z) P4 ?/ J4 v5 n8 t Y6.指令重複
5 s; E3 p! w, k$ x 在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n9 h1 z: N4 R1 C2 a
次。
, \" h4 x" r1 j) l! K 例:
: |; w m N7 Y- w' z 刪除10行 ‧10dd* f: C' u/ ~7 F3 E; W. a
複製10行 ‧10yy( |/ d+ @$ i7 ~- i
‧游標移至目的地
; S- Y2 T7 h# R7 i* f ‧p
# v' A5 q1 Y2 I4 k+ y* g8 t 指標往下移10行 ‧10j: r4 [- |% G* t& q* @
/ }+ b6 m$ j) U$ u7.取消前一動作(Undo)0 Z3 i% l2 l/ C. ^( C4 ?% o
即復原執行上一指令前的內容。6 L# a3 V h4 z' o
u 恢復最後一個指令之前的結果。$ x& Z9 e- i2 }; R t
U 恢復游標該行之所有改變。
, z7 u0 A; L8 P* c6 q2 A6 y) K7 Y
% g! F" b# S7 `! O; C! S8.搜尋* Y: v/ E6 t8 f
在vi中可搜尋某一字串,使游標移至該處。
3 H! e; }+ } \7 } /字串 往游標之後尋找該字串。3 C0 X7 S; v! Y/ s6 O
?字串 往游標之前尋找該字串。
" g0 V7 u# K1 K" O& {! x n 往下繼續尋找下一個相同的字串。
3 [: E) l# K2 H9 W: K N 往上繼續尋找下一個相同的字串。+ F1 L/ I" j3 P& [! E9 J3 ^6 n( k
) f' g. M% R4 p) B5 J9.資料的連接
* a* l, _# A5 U1 {5 \; Z9 Y! ~ J 句子的連接。將游標所在之下一行連接至游標該行的後面。
; k1 ?! I7 J7 [' W 若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式9 J" D9 J r7 W5 u
(可利用a、i等指令)再按《Enter》即可。0 Q Y I, Z+ E6 u: v; L1 s8 H( I
: Y: p3 F! \4 f; D9 q7 h: c7 a3 U1 z10.環境的設定* ?6 W; |( A7 G+ R9 D0 u; C
:setnu 設定資料的行號。7 M c, M5 {9 _! s9 h; U
:setnonu 取消行號設定。' q5 n! Y, Y$ e" A" c/ \
:setai 自動內縮。
% m& O- Z: h0 {, J/ L* ] :setnoai 取消自動內縮。
) ~0 @* t: Z: A0 N$ G 自動內縮(automatic indentation); q& p; `3 z3 p0 L9 l5 O# E, S
在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
: @' H8 N; I. d* h8 u( |6 a K! l" u" l 動內縮的功能,用下例解釋之:
6 k0 v ~. \4 z& C# B ‧vi test
3 E# ?1 |) q" X' w ‧(進入編輯視窗後)4 N3 ` J) w' ]) _8 r# N
this is the test for auto indent
3 E8 y; h# @6 c3 i. Y2 |' \ 《Tab》start indent ← :set ai (設自動內縮)
& N( w5 i( j6 G+ {3 m/ t" P 《Tab》data
F* B+ K3 o- f 《Tab》data
, q! t* {" d8 F' Z' R x# p1 G) g) ? 《Tab》data ← :set noai (取消自動內縮)0 l' q! F( Q4 F4 W/ R m1 P* s4 D
the end of auto indent.7 I; R$ N, A) b, J6 ~8 Q: D( S
‧註:<Ctrl><d>可刪除《Tab》字元。
4 `2 a" t. m& \- W) A! P4 U# P k$ R
0 u8 |4 R" X/ Y! X% i11.ex指令1 l2 ~1 k- V& q, v
讀寫資料# F1 P0 {) c5 j$ k _6 h
:w 將緩衝區的資料寫入磁碟中。, ^- t" b0 w/ ]" `6 I3 L& @
:10,20wtest 將第10行至第20行的資料寫入test檔案。
7 X W0 N. U# p% Q9 |- M: j3 } :10,20w>>test 將第10行至第20行的資料加在test檔案之後。; C7 _# c* g- T& J0 G- X
:rtest 將test檔案的資料讀入編輯緩衝區的最後。% J. W" K9 y$ O1 a: j, `+ i
刪除、複製及搬移
7 |/ d* ^; ~$ E' k0 W& R# _ :10,20d 刪除第10行至第20行的資料。
8 F" r3 z) e i, v' ~" D :10d 刪除第10行的資料。2 J; O! O9 V$ B6 l) k* X4 U
:%d 刪除整個編輯緩衝區。
3 @+ z! |- f; S) w( h' o$ q :10,20co30 將第10行至第20行的資料複製至第30行之後。
" K* d6 {" k" e :10,20mo30 將第10行至第20行的資料搬移至第30行之後。
+ [% b* R" ~, s" { 字串搜尋與取代
/ ?/ j2 p5 }, a2 V0 W s(substitute)指令可搜尋某行列範圍。
" o3 o) h0 C3 z( Z1 c% ` g(global)指令則可搜尋整個編輯緩衝區的資料。 J2 l: r; d/ F& y% R
s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條9 K7 V' K0 @$ @. [! k
件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。 V4 }% i" f% x2 e6 V: d
:1,$s/old/new/g 將檔案中所有的『old』改成『new』。
. s# e8 X# z! L( x4 ~ :10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。+ M( K7 N* S/ p
:%s/old/new/g 將編輯緩衝區中所有的『old』改成『new』。' {- f& B8 |( a e
2 L8 ^/ O J9 s
12.恢復編輯時被中斷的檔案9 l- e" I8 N4 ?9 ^% @5 Q& C% `
在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未; P1 L2 Q5 v; x! x& }, ^
被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前' p) r. }: l% x \' a, u5 g/ h
的檔案內容。
: B4 r1 M9 Q0 n %vi -r filename
y" u7 u' h: c3 {/ @4 |2 v- i$ u6 c: }! K! ^
13.編輯多個檔案9 p! S' N6 |5 {3 u4 q' f6 P
vi亦提供同時編輯多個檔案的功能,方法如下:4 v2 c6 E9 Y& c7 n
%vi file1 file2 ..) d5 D0 L7 r' {4 j$ c$ D
當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後, [) j" h, w6 v) z) n/ ]; e4 E) m
再利用 『:n』載入下一個檔案。5 W0 c9 c% ]& g4 {8 H) E$ E4 o
7 W% X3 c, J7 Y, @參考:
5 ~& b+ m( c5 h% U* J' C- }4 s+ X+ n& `- G) b
http://chunchaichang.blogspot.tw/2010/08/vim-s.html
, M# \1 O7 M; p+ K* A, C) y
歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av.one/) |
Powered by Discuz! X3.2 |