52AV手機A片王|52AV.ONE
標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]
作者: IT_man 時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
6 ?& c5 y. @- j j7 ]) K
7 `# G+ ] d5 W6 K# gvi指令說明(完整版)
5 l; F, ~8 h) i" d5 g. D- vi 的操作模式* p# Q; t B. R7 ], A) R+ M
, p6 e& J/ n& D zvi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
- 輸入模式
7 _2 Z/ X8 h5 i d# g
) K- ?0 \5 J/ l+ n 如何進入輸入模式
! o: U/ M! \. X& G7 e& N a (append) 由游標之後加入資料。
" V8 ~3 b4 [( T& A5 ?2 Q2 U A 由該行之末加入資料。3 u W' n! l$ x; w3 [, \
i (insert) 由游標之前加入資料。: f6 s, B6 `1 {- C h
I 由該行之首加入資料。
) Z9 ^0 S+ J0 e2 D7 L o (open) 新增一行於該行之下供輸入資料之用。; W/ W1 y+ [% Y) A
O 新增一行於該行之上供輸入資料之用。3 G0 L- Q' j/ |
如何離開輸入模式
3 C" w* S- N |; ?+ G S' L 《ESC》 結束輸入模式。! v" A7 o9 h" w6 y- G
- 指令模式0 S& p# _$ a( r' G* U0 g2 B
8 P$ \7 Y1 g8 n$ @4 a4 t. Y
1.游標之移動
- X& E4 `; v1 t k h 向左移一個字元。
2 M4 R- l9 Z5 D/ B9 F) E j 向上移一個字元。
) i& G8 A& l$ ]$ B k 向下移一個字元。9 K" d' U A- b4 A6 x: ], A
l 向右移一個字元。! ^8 c( P. A/ |, o) Y
0 移至該行之首
- Q \- _ F, i5 G; G2 q $ 移至該行之末。
4 K) P2 j+ @2 t3 W/ U ^ 移至該行的第一個字元處。6 }, {% j1 t& V4 z' n* y
H 移至視窗的第一列。
9 W3 g1 R5 X; \, a' ? M 移至視窗的中間那列。
9 S; l( n7 a4 h0 H o2 i L 移至視窗的最後一列。5 V a+ I, m! L: ~6 s5 x' J
G 移至該檔案的最後一列。
+ P1 H5 e5 u% ?. j* m L" N( T- ?7 e + 移至下一列的第一個字元處。
+ Y9 u; k! l! l, \7 ^) w9 l' z - 移至上一列的第一個字元處。9 u& N; f# `# T1 S8 ?0 W+ u
( 移至該句之首。 (註一)
* ^+ v9 u$ O( o2 O" I ) 移至該句之末。
/ p5 o& Y/ C; n9 |4 V( f# U! w z3 g { 移至該段落之首。 (註二), M' Q4 A. o# i
} 移至該段落之末。
; @- \# C5 o1 l1 _9 s. `, l nG 移至該檔案的第 n 列。
e) _* b/ P: B- @0 f9 C, G6 m n+ 移至游標所在位置之後的第 n 列。
: m" ~# j- O3 D" ?& L n- 移至游標所在位置之前的第 n 列。
5 G; S4 t. \3 k4 V <Ctrl><g> 會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。* w0 E$ B# g4 N8 E% N( M# A
註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
6 |) G" J5 T, G+ t. u9 | 註二:段落(paragraph)在vi中是指以空白行隔開的文字。' T; @* b( g4 b/ |" e7 K% x: O
! l# m9 i2 S# U/ v% q1 l* J
2.視窗的移動 <Ctrl><f> 視窗往下捲一頁。9 I; ^$ `" j! C- Z: S3 P5 T7 y9 `
<Ctrl><b> 視窗往上捲一頁。9 ~) q) F* O3 O5 {4 N9 y2 Q
<Ctrl><d> 視窗往下捲半頁。
2 ^" y0 U$ o* l6 X( H5 l <Ctrl><u> 視窗往上捲半頁。
8 F+ i6 @0 ^ J$ Y- `# ~$ I; u) Z <Ctrl><e> 視窗往下捲一行。
1 H7 Q$ T& w+ Z) g5 ?, ^' q <Ctrl><y> 視窗往上捲一行。* ]2 k* J& g* L* r
8 v' B4 y6 ?3 \% |) u
3.刪除、複製及修改指令介紹 (此單元較少使用)* E* j( Y/ s% w, F1 L+ }, V& V0 `
d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
" V1 L6 J% ^2 r7 r Operator + Scope = command& n/ }; H3 f0 A5 ^
(運算子) (範圍)! g2 ~* e# j; U# j
運算子:
. v8 j$ h) e7 o7 e3 j7 U1 ?9 h d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
: r$ ~4 A8 m# k4 Q y 將資料(字組、行列、句子或段落)複製到緩衝區。
. @1 E; B+ `) R p 放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資9 Q7 P0 G( J: a: p
料放置於游標所在位置之行列下。. i8 ]. S. o: F/ l
c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句4 k- U8 o1 Q0 I. g, M4 _2 j
子等之資料,並插入新鍵資料。" ^: \) P& M; f% y7 K9 f, F m
範圍:
; q6 y- y; N; u: v+ @: Y e 由游標所在位置至該字串的最後一個字元。4 S r( u$ _* U1 P
w 由游標所在位置至下一個字串的第一個字元。0 J" G& P& n3 G+ e$ w6 ^
b 由游標所在位置至前一個字串的第一個字元。* f& q0 @" s$ o: N6 W7 Q3 a
$ 由游標所在位置至該行的最後一個字元。
( J) J7 M4 x) N8 W) l 0 由游標所在位置至該行的第一個字元。
/ c* {$ h# u6 x ) 由游標所在位置至下一個句子的第一個字元。
& w/ R4 J+ Q3 k6 e; V0 \( `# [ ( 由游標所在位置至該句子的第一個字元。' |# `- d" Q2 H R0 n
{ 由游標所在位置至該段落的最後一個字元。2 M3 M+ e8 I s- {/ F- ]
} 由游標所在位置至該段落的第一個字元。
& k9 r3 W' x) M8 W, ^, n3 j 整行動作% m A0 Y+ J5 J+ x
dd 刪除整行。
j- A( `- h) [ i D 以行為單位,刪除游標後之所有字元。; _7 f' q, v# Y
cc 修改整行的內容。
4 @4 ~9 G1 C9 b. k. @& p) S1 @ yy yank整行,使游標所在該行複製到記憶體緩衝區。- K- @+ y! s3 K& i @
+ ~2 d7 o- v1 E5 w3 N
4.刪除與修改
& F7 c/ J, V7 p$ Z0 R9 o x 刪除游標所在該字元。7 n2 P* Y8 h# O
X 刪除游標所在之前一字元。
2 U1 P" V K. @ dd 刪除游標所在該行。
9 S* R- u4 O* W7 m) ? r 用接於此指令之後的字元取代(replace)游標所在字元。
3 n- l7 O. m1 r! z8 ? 如: ra 將游標所在字元以 a 取代之。
. L& U Z ]8 s R 進入取代狀態,直到《ESC》為止。
. G' N W; D* A7 o- L4 z8 R s 刪除游標所在之字元,並進入輸入模式直到《ESC》。
- |( s7 S1 v/ c4 L S 刪除游標所在之該行資料,並進入輸入模式直到《ESC》。
$ [4 ~4 s& u5 |; P! L- x% C8 V- b/ r( T2 P, c! Z* r
5.搬移與複製6 z8 u& p# ^7 V( w
利用delete 及 put 指令可完成資料搬移之目的。4 r2 `7 D/ Y8 o0 M4 \
利用yank 及 put 指令可完成資料複製之目的。) E9 @& i: Y8 k8 T" @% [
yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
; {3 s& R$ \% y8 @# h 可將緩衝區內的資料複製到螢幕上。
8 q& w# r* D, ~ 例:
5 g4 v) g+ i- \- X9 v 搬移一行 ‧在該行執行 dd
+ B) }: |' h$ F1 ^: e6 T ‧游標移至目的地7 x5 V$ l+ \" R2 s% O# `( t0 Y+ J
‧執行 p; G6 o( m( G c) [+ w3 l# A/ W
複製一行 ‧在該行執行 yy
( w5 g# H6 l4 T/ J- \, A' a; O ‧游標移至目的地2 b4 }& j2 k( [9 m% P; F
‧執行 p5 K& Y+ G0 P+ f) m: H/ c* e
$ O. J+ y8 W* y$ ]6.指令重複
( _* i' Z7 A) f8 {" |- u D) k1 b 在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n0 a& i3 g8 w4 q$ i' c1 @
次。/ q5 H3 W# t( H
例:' Q4 b. v/ g7 C! H$ q
刪除10行 ‧10dd
: {8 d' d# w1 O% X, F$ x) _ O 複製10行 ‧10yy
# \! @, M8 C3 g# N7 g# A- y ‧游標移至目的地
* l z1 p, Z, {. h0 J ‧p8 i8 {4 Y' g* _7 m7 f' F
指標往下移10行 ‧10j
! a4 d9 X) j0 k n' P6 W! t( T( w5 t; h; a, e* m
7.取消前一動作(Undo)3 N% W8 U2 p" I, l' j4 t; f
即復原執行上一指令前的內容。5 U& Y8 w$ s% u8 Y+ t( ~3 [/ p
u 恢復最後一個指令之前的結果。
2 j) s6 |5 M' h* b! x9 { U 恢復游標該行之所有改變。$ L, s2 M( T- m3 x: d& I
0 D( h2 Q* F4 K8 f( \" l w$ _
8.搜尋7 V" e: @- p, |( B' Y
在vi中可搜尋某一字串,使游標移至該處。+ F4 U7 O/ s( X7 a% u
/字串 往游標之後尋找該字串。
% l' _, C0 z1 F( l ?字串 往游標之前尋找該字串。# e9 r8 b- L6 m0 |- Z. ]7 _
n 往下繼續尋找下一個相同的字串。9 C, Z6 R0 X7 ]4 E
N 往上繼續尋找下一個相同的字串。* k1 S" o0 v3 Q0 `& ]
6 X* J! G# w7 c5 T2 _# K
9.資料的連接
& w2 e4 b; ?" h; Z3 v6 P8 x J 句子的連接。將游標所在之下一行連接至游標該行的後面。
3 w( s; t' H) Q" @, O 若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式 W; Z8 T$ e) R& ^2 c
(可利用a、i等指令)再按《Enter》即可。
4 B. s" C# E% }8 I1 |1 `1 q Q& O6 ~5 W, Q" W- p
10.環境的設定
2 ]! b9 Q) N, c2 n& r# A :setnu 設定資料的行號。
- p3 g/ x' T' o+ U! J" D4 O :setnonu 取消行號設定。8 v4 m% `2 y, k6 T: G6 n' n
:setai 自動內縮。9 S! [ c% X* B7 S8 l. } Y
:setnoai 取消自動內縮。
9 S. P- {& K s. W* [& y 自動內縮(automatic indentation)- j% `! I/ D( b( G; V* n
在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自 ^- u b; p) J3 v: n: c+ x% R
動內縮的功能,用下例解釋之:8 y' Y+ q4 }' E; @# H
‧vi test
% p) X1 c5 s4 Z( f. s, |) {7 Y ‧(進入編輯視窗後) h( n# R& N% \4 e$ M5 B
this is the test for auto indent
8 l2 M" ~: l+ M# @/ A 《Tab》start indent ← :set ai (設自動內縮)
; [$ j! F2 v4 f 《Tab》data
( Q, Y0 Q+ \( }& V* H( a 《Tab》data
. L# _# U4 E" w/ I; [* w h( \ 《Tab》data ← :set noai (取消自動內縮). J* C4 ]& N5 A: a
the end of auto indent.
/ I) b; ^- F4 _. e; C" R& ` ‧註:<Ctrl><d>可刪除《Tab》字元。2 u; S% W& E. m$ t0 I
1 h$ H* |, R2 A/ \# N& Y2 H4 s11.ex指令5 g. O N/ h$ B* Y- \+ _; }
讀寫資料
# R; y `" Z* w( A1 I! J! m :w 將緩衝區的資料寫入磁碟中。
+ a" T+ k, t; A/ l a8 M :10,20wtest 將第10行至第20行的資料寫入test檔案。$ W: a7 p: }+ b: N1 K2 c
:10,20w>>test 將第10行至第20行的資料加在test檔案之後。
`% N. @2 p1 n: } :rtest 將test檔案的資料讀入編輯緩衝區的最後。
3 g( U# W2 K4 u9 r1 H 刪除、複製及搬移
! w0 u# X0 K) L/ w1 H) r2 g7 k :10,20d 刪除第10行至第20行的資料。
+ w: `" p$ I; t) Z1 a4 I- Q :10d 刪除第10行的資料。2 R& V1 u4 r" H
:%d 刪除整個編輯緩衝區。
e/ S# `- ~6 w8 l- I- U :10,20co30 將第10行至第20行的資料複製至第30行之後。
$ B; m2 P1 F: L1 r# N :10,20mo30 將第10行至第20行的資料搬移至第30行之後。
1 h; ]! N9 c. }5 I% J+ t) a 字串搜尋與取代. i/ l9 C! R& m# P: C' M8 F6 V+ D4 ^
s(substitute)指令可搜尋某行列範圍。
" u, B3 d: Z" o g(global)指令則可搜尋整個編輯緩衝區的資料。6 v6 ~: U6 q1 G# Q) H+ j
s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條* b3 P D$ _# C& j1 z3 J
件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。2 f9 S9 k3 z) r e; W9 d
:1,$s/old/new/g 將檔案中所有的『old』改成『new』。
* k# G; w) W! u# R+ q+ U" i :10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。
7 ] J+ F3 n6 X3 p: C$ z :%s/old/new/g 將編輯緩衝區中所有的『old』改成『new』。
: a4 m* q% t3 \. i( J' ?# I+ {" B! Q( i k- ?; B+ G. f, \0 j
12.恢復編輯時被中斷的檔案 a" n: O9 m6 v1 T7 L/ M. r" A& O
在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
( l9 x' g, Q# K3 L- J 被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
' i" \# }8 n; M$ E- f 的檔案內容。, u3 `4 K( c+ d& {$ x
%vi -r filename
8 d( d5 y# d9 x; v ~0 h" o8 y+ F, X0 G- C: F# w
13.編輯多個檔案
. j0 T% w" e! |* \% I) N3 X5 S5 ~9 x vi亦提供同時編輯多個檔案的功能,方法如下:2 f; {& D O. Q1 Y) }" y
%vi file1 file2 ..
* Z4 d% G* M9 ]* t 當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後& f" I! k s) p, Y* Q
再利用 『:n』載入下一個檔案。9 j' z- p' a' T& j) H1 O
. W3 D! {3 V+ `: S( E' q
參考:
& \" x. h; V4 L C) I1 K8 {8 M" ]
http://chunchaichang.blogspot.tw/2010/08/vim-s.html
7 ^6 d/ E0 I5 K$ u! V
| 歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/) |
Powered by Discuz! X3.2 |