52AV手機A片王|52AV.ONE
標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]
作者: IT_man 時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
0 v' R- L9 y) E" ?/ N H! M
5 e$ ]4 w( T' k: [$ P pvi指令說明(完整版)# T4 E, J. ^4 k, E! s% c8 D6 E
- vi 的操作模式$ h% x. t( l! x% I e
f5 W( c( n6 m( `, Q( Z8 avi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
- 輸入模式
) K4 D; L3 Z& n% ?% p: t# ^
1 j* Y _9 y( p1 x0 Z1 [ 如何進入輸入模式
, j& a& W! @3 A& g! j7 G a (append) 由游標之後加入資料。
# p* B4 k7 v( b A 由該行之末加入資料。
4 r4 S3 I# U4 W I# `- H) [ i (insert) 由游標之前加入資料。( [& ]# x- Y9 f3 [$ E, V8 f
I 由該行之首加入資料。
S& A1 m; M4 b( J' @1 o: z o (open) 新增一行於該行之下供輸入資料之用。( ]# c: u9 H% j. t+ C3 N. v$ ^
O 新增一行於該行之上供輸入資料之用。
. W6 ~" o2 O& V* \3 k 如何離開輸入模式1 Z' m! n9 ?( }
《ESC》 結束輸入模式。% z, }5 y" X/ ^ ~( o4 H
- 指令模式
* \7 `% |7 _9 b2 t' T' A+ f
`& i8 f7 ?, A9 V: @% {6 x! d1.游標之移動
) s4 P5 [2 \6 U( r# M' E h 向左移一個字元。3 i9 `( t" F( R7 W' F9 D) a5 h: |
j 向上移一個字元。4 p" S9 I/ T5 A8 b0 X$ Z6 {
k 向下移一個字元。
, p/ O6 j5 J w: V7 _ l 向右移一個字元。9 P: i9 y/ W+ F m1 X- b9 H
0 移至該行之首5 w( n: p( H j \- r! G
$ 移至該行之末。
3 `, R3 [6 w' M& R6 k5 t ^ 移至該行的第一個字元處。3 d) B" O/ ]& p% j& Q' l3 v& T
H 移至視窗的第一列。
3 j' T" a }5 D) a% k7 _5 K M 移至視窗的中間那列。
0 q' ~7 O! e, t% l4 C) Y L 移至視窗的最後一列。
, I% F' ]3 n4 k k5 S G 移至該檔案的最後一列。: Q& N1 p+ t; Y$ R4 c4 _5 Y
+ 移至下一列的第一個字元處。' p5 W4 R1 d. y2 P0 L
- 移至上一列的第一個字元處。! [, _$ d4 A. t4 Q8 a2 @+ `2 k
( 移至該句之首。 (註一)
r0 x/ ~% a' } ) 移至該句之末。
# ^ t# U9 u$ S. Q1 E# T' } { 移至該段落之首。 (註二)
2 H) l9 D8 s9 j( B2 a+ n# ~2 | } 移至該段落之末。
% f9 j, Z& ]1 X9 D6 ], I5 g2 x* i" _ nG 移至該檔案的第 n 列。' G8 P/ F }& G9 I5 F+ J
n+ 移至游標所在位置之後的第 n 列。
3 z6 U/ \8 Q1 ?, c. l n- 移至游標所在位置之前的第 n 列。7 y& Y0 J9 Q4 L" p
<Ctrl><g> 會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
" j k+ C" _% o) @# a5 S C* x 註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
% g4 v" q i, g$ ~* T; ~5 r 註二:段落(paragraph)在vi中是指以空白行隔開的文字。3 V) [9 w% z5 i/ R
) u7 f3 d Z2 f) o! _& \
2.視窗的移動 <Ctrl><f> 視窗往下捲一頁。2 X$ Z/ B& Y0 J1 h! d; I4 }
<Ctrl><b> 視窗往上捲一頁。
6 O/ n I( b& H3 \" | <Ctrl><d> 視窗往下捲半頁。4 I1 t6 ]& o+ B/ S: q
<Ctrl><u> 視窗往上捲半頁。' a" \' H7 _5 I, L: K8 W; @; N: `
<Ctrl><e> 視窗往下捲一行。
. `8 j! V. C9 k <Ctrl><y> 視窗往上捲一行。& u$ M6 n6 p3 w o, S! _' z
( n: D; \+ P# [& X+ s/ y) y
3.刪除、複製及修改指令介紹 (此單元較少使用): g7 L( w) Z" V9 d2 }% a8 Y7 @
d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:1 z L2 S9 H- R, A) q
Operator + Scope = command% {+ }9 n' c6 i2 f8 \6 N# L: _; Y
(運算子) (範圍)
- ^7 B9 S" j0 B% @' @ 運算子:
, L ^3 m. D7 F8 T; _- v6 f d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。* v5 m6 }# F/ r2 T$ S# {: R. E6 {
y 將資料(字組、行列、句子或段落)複製到緩衝區。
) T' l. x( c! W: ^" P | p 放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資* R7 b6 c7 D4 F5 u
料放置於游標所在位置之行列下。
' v5 ?0 C& f9 w! l c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句4 b% h; B, \6 D6 Q i, r: P. f) R
子等之資料,並插入新鍵資料。0 p4 |8 ~! }. J$ G; Q
範圍:
2 T4 a1 ~ A+ u$ V! p e 由游標所在位置至該字串的最後一個字元。
2 ^1 d5 U7 _6 \2 h9 r- s3 R& l1 t w 由游標所在位置至下一個字串的第一個字元。, o7 e M( n) Y5 N
b 由游標所在位置至前一個字串的第一個字元。
: n- y5 n+ T7 M1 n; v' p1 n $ 由游標所在位置至該行的最後一個字元。
. d9 w k. R+ c 0 由游標所在位置至該行的第一個字元。# @/ \, l: ~- F1 n9 }: S [2 h A
) 由游標所在位置至下一個句子的第一個字元。
% e6 t+ }& P" m& k3 A- O3 v ( 由游標所在位置至該句子的第一個字元。1 m6 F9 @( B4 m% x; q
{ 由游標所在位置至該段落的最後一個字元。; Q _) [4 T2 g* ^8 r
} 由游標所在位置至該段落的第一個字元。
! M# _8 Q0 q# O 整行動作
- K, r' e" S/ B4 Z9 d dd 刪除整行。7 H( w" l8 ` \) ?% P1 r
D 以行為單位,刪除游標後之所有字元。# Y }9 Y+ r+ D" r
cc 修改整行的內容。7 b5 A3 L7 R" M% G* O) j* k
yy yank整行,使游標所在該行複製到記憶體緩衝區。
# w; `0 P( Q! _6 O$ S( V: S, t8 V/ a! Z" R
4.刪除與修改" \ Z! j9 D9 u4 f# J
x 刪除游標所在該字元。$ Q2 ?6 }. r9 f
X 刪除游標所在之前一字元。
X' Q& o$ s; v0 }# E dd 刪除游標所在該行。/ T' m! I0 C; e" \* J6 H i8 f
r 用接於此指令之後的字元取代(replace)游標所在字元。- {1 M- Q* U( `5 X& N
如: ra 將游標所在字元以 a 取代之。+ X5 ~5 v2 U, s; S
R 進入取代狀態,直到《ESC》為止。
+ x# S4 C7 Q* z# r s 刪除游標所在之字元,並進入輸入模式直到《ESC》。
?" v! ^. g$ R" Z) a8 [/ t. i S 刪除游標所在之該行資料,並進入輸入模式直到《ESC》。9 d* K% k# I# L; z
% O+ _3 I) d$ w& Y. @- M5.搬移與複製
1 [/ J; m' n5 i+ T A! n* y3 k 利用delete 及 put 指令可完成資料搬移之目的。. t- }, N! O" h& x, s) W3 G& i* I
利用yank 及 put 指令可完成資料複製之目的。
+ \5 E# A9 W) |) H( J. c9 W yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
) W+ @) Q4 p; E" [1 M8 J2 L4 F' W$ q% b 可將緩衝區內的資料複製到螢幕上。+ G9 K) V U; Z: f$ {' f, U
例:, \3 u4 j6 {: W+ U. ^3 [
搬移一行 ‧在該行執行 dd! E; P- j. P, V# n6 v
‧游標移至目的地
6 }% e$ j& p5 T+ D ‧執行 p
$ \% T8 b3 N$ {* V* B* A8 \5 C6 N 複製一行 ‧在該行執行 yy( z1 {: W S4 f& }
‧游標移至目的地
& r" i7 i, z% D ‧執行 p
& q6 w! q8 g7 G3 b4 f5 r. m. R- H' i' s' V! K( S
6.指令重複7 [) n% s2 b3 _2 c. u! j$ W
在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n" Z4 f# J: ^: h) v, D1 r
次。3 ?1 ? Q) x* O. K" }
例:' l) T$ B, w. ]9 D' `) ]3 u
刪除10行 ‧10dd
2 Z8 i) h9 h' l6 w1 _ 複製10行 ‧10yy2 Q4 \7 P8 q9 c, i4 Z
‧游標移至目的地5 s) E l6 q E* x+ [+ L o
‧p
2 w! C1 H! J' F0 ?" P; S* N8 F 指標往下移10行 ‧10j0 D* X4 p1 z* k) P* q4 w- S
3 f2 B+ w4 M3 ^( T# Y9 ?" F
7.取消前一動作(Undo)7 M. I; u: N: I% X" m
即復原執行上一指令前的內容。7 a2 ]( e, q3 y! Y, v! E' A
u 恢復最後一個指令之前的結果。4 V* B/ [1 ~; C: M9 Z5 U) s. j
U 恢復游標該行之所有改變。
. Y/ ]2 p" q! E7 X# ]# i0 ]) Y/ R1 x' Q3 ^
8.搜尋
; G+ |( f. W. g5 T 在vi中可搜尋某一字串,使游標移至該處。# h; d$ T* u [0 @ B
/字串 往游標之後尋找該字串。
' X+ y" F$ x; G* h- \ ?字串 往游標之前尋找該字串。) P3 k7 ~6 J$ F( x5 ^' X" ~' L
n 往下繼續尋找下一個相同的字串。* ^* c5 f3 N/ G. K. a% H4 u$ a; f
N 往上繼續尋找下一個相同的字串。
6 c# j# H0 t$ [9 ]0 S; D( o7 O% g
9.資料的連接
4 F% j5 t% d4 R8 z. f& e J 句子的連接。將游標所在之下一行連接至游標該行的後面。
+ j5 X: }% Q% I2 v( m* ^* J 若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
: y& v1 d- y# K5 L' J, ?4 N2 T (可利用a、i等指令)再按《Enter》即可。
1 N9 y- c1 L7 ^5 B) @
* p' j9 J/ M, F$ l6 B7 G. ~% T10.環境的設定1 m) Q# I; {0 \ e
:setnu 設定資料的行號。' e/ q6 M; K% ?3 U$ r2 _# }, d
:setnonu 取消行號設定。
/ X! d2 f6 U7 g9 ? w6 l$ |# I :setai 自動內縮。+ W* Z5 p% u c. R
:setnoai 取消自動內縮。
: a# U; D- Z, r! F' B0 P. b 自動內縮(automatic indentation)
) O+ C) \# C* W2 e M! f 在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自# d' Y% D& D6 b6 T$ \, `7 l
動內縮的功能,用下例解釋之:/ e1 n9 J v/ G: b- ^' ]
‧vi test
1 R' n4 d8 B: f5 D ‧(進入編輯視窗後)
* D& w* h% Q& |% | this is the test for auto indent+ m& G0 }, \0 R; {
《Tab》start indent ← :set ai (設自動內縮)/ G2 I+ ?$ ~$ ~" C5 u
《Tab》data
; j% Y& @$ J1 e' t- ~ 《Tab》data
2 [( k3 b$ L7 P3 J1 B& Z! b 《Tab》data ← :set noai (取消自動內縮)" `# o/ p4 E/ u( M: d, L( O2 ^4 r
the end of auto indent.
* Q+ o' P0 g" ?: s, ?# Q9 ^ ‧註:<Ctrl><d>可刪除《Tab》字元。9 r3 H% l) l0 G8 f3 E& F
! e" _) a/ N7 G4 C2 z" v11.ex指令
4 D# v5 L6 E4 P 讀寫資料0 p- N9 _& N# e5 @& L7 D
:w 將緩衝區的資料寫入磁碟中。5 E& k) s3 p7 l" ]7 @) w% c
:10,20wtest 將第10行至第20行的資料寫入test檔案。8 E3 n: ^0 V9 K
:10,20w>>test 將第10行至第20行的資料加在test檔案之後。
% H" d( E' b, G' g6 _0 P :rtest 將test檔案的資料讀入編輯緩衝區的最後。
+ P0 r, E; I# z$ C, B: n 刪除、複製及搬移" a! o+ s) s- ~# x0 [
:10,20d 刪除第10行至第20行的資料。& y1 O. U. C8 y) \6 x5 W6 D* Z
:10d 刪除第10行的資料。0 s* `9 i' @7 T! c
:%d 刪除整個編輯緩衝區。' {% r6 i, ~) I2 |$ l
:10,20co30 將第10行至第20行的資料複製至第30行之後。
1 W% {# Y0 Y3 K- O :10,20mo30 將第10行至第20行的資料搬移至第30行之後。1 t c/ w8 V# W+ y
字串搜尋與取代- a6 K( J( o0 Z0 e4 p7 b( C8 t: j
s(substitute)指令可搜尋某行列範圍。: n. v- \4 V( f @- ^8 t6 @
g(global)指令則可搜尋整個編輯緩衝區的資料。2 @2 p0 [) p5 k
s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
; N) |+ `% ^+ @- ]! {% C/ X 件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
0 M6 k) v8 E+ w9 e :1,$s/old/new/g 將檔案中所有的『old』改成『new』。0 g0 K3 V9 f, [- p( Y" b
:10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。
" U5 `7 {/ j# w8 ]* h, T :%s/old/new/g 將編輯緩衝區中所有的『old』改成『new』。
0 ], o' p/ ~( n7 X+ G$ `7 U) w9 h% K: \0 n4 d& N
12.恢復編輯時被中斷的檔案
' h4 \1 D) x$ D 在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
; ?& |" i& v. u7 }$ h4 |5 { 被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
0 n" N; h/ K2 i8 | 的檔案內容。; s/ X+ A( \: n) T$ W
%vi -r filename
. o* } h( ~/ `9 m' m
9 H- h: x% i0 B) v13.編輯多個檔案
5 s8 L0 B! d7 Y! `- x/ C, t vi亦提供同時編輯多個檔案的功能,方法如下:
4 E# r; U2 C4 M: I2 ? %vi file1 file2 .. ], t$ r" t0 v3 ~" ^- E9 o
當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
% I( ?) c4 s4 q+ o 再利用 『:n』載入下一個檔案。5 Z. d; m8 G; B. ]
1 K4 v( Z: l, o, ]4 s
參考:
6 v0 n1 k8 f3 i y( S
6 \" p' b, h+ ]4 T; {http://chunchaichang.blogspot.tw/2010/08/vim-s.html3 l5 ~, F1 X$ A% d2 M! d" I
歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av.one/) |
Powered by Discuz! X3.2 |