52AV手機A片王|52AV.ONE
標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]
作者: IT_man 時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
- O7 J; T) n/ {5 P& G0 s. b' K4 d9 o8 y( q- O& U
vi指令說明(完整版)
+ A1 Q, x; Y, G! S, z* [8 E5 O- vi 的操作模式( y- {/ p4 y# n2 y* H
s, G- @' J8 \8 Q# z* n
vi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
- 輸入模式( [9 V7 x; H% `$ U' K7 b
, @. Z0 n; o- G: \2 \* Z 如何進入輸入模式
8 k" i' r2 q; }# h$ I' S a (append) 由游標之後加入資料。
/ Z* B$ u5 @4 O- Q A 由該行之末加入資料。
# v7 g2 Q/ K$ y5 n# I+ d) y i (insert) 由游標之前加入資料。
& {% k5 n* \' m* h2 ^ m( o9 ^ z I 由該行之首加入資料。* {5 x6 B6 J- z
o (open) 新增一行於該行之下供輸入資料之用。
. O9 W& E {4 R' I) l O 新增一行於該行之上供輸入資料之用。
9 R9 [+ V$ \ k* ] 如何離開輸入模式
5 N, y, Z0 @ ^( p, z% c7 [/ X8 R 《ESC》 結束輸入模式。
$ D' e& E1 B+ B
2 o, }% w1 x) g& U1.游標之移動
* u1 q3 d0 Y) b! U q; C h 向左移一個字元。
6 G i) a% V1 V/ @ j 向上移一個字元。
3 {* G4 E* q8 A2 Q$ B! o1 t3 O k 向下移一個字元。1 T8 |6 r- J- A' T: y1 Z
l 向右移一個字元。- F3 @4 U0 w6 g2 R1 ~
0 移至該行之首
6 _9 `' d% c, @% @! L z $ 移至該行之末。( }, V2 S, n3 f$ o, s2 `7 g" f% m
^ 移至該行的第一個字元處。
4 o- F* R% z, p9 ? J H 移至視窗的第一列。& R- }$ _# Z/ b) \! D
M 移至視窗的中間那列。+ t$ H% e8 l% j% d: X4 T @
L 移至視窗的最後一列。. J5 `7 f3 P I' r
G 移至該檔案的最後一列。
0 a! D8 S6 @6 R1 |$ k. B + 移至下一列的第一個字元處。. u/ D9 Z! ]& D, [, M& @
- 移至上一列的第一個字元處。5 n8 M9 e+ y7 g! G" p$ R
( 移至該句之首。 (註一)
+ z2 X2 X$ Z+ Q- H3 S, U ) 移至該句之末。' J8 C# T* J0 O+ g- }$ {
{ 移至該段落之首。 (註二)
# W' I6 z U+ L6 \$ d5 E. { } 移至該段落之末。
* I/ i/ i0 P9 X+ B5 ^# ?2 C7 ^ nG 移至該檔案的第 n 列。
# G: S6 ? I, F n+ 移至游標所在位置之後的第 n 列。
9 m& s! Q( r, S2 t6 b. W, B n- 移至游標所在位置之前的第 n 列。5 h, o* n& F. y. a" N
<Ctrl><g> 會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
1 a3 E, c. ^$ @/ Y2 l! { 註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
$ X4 d4 Q7 d r 註二:段落(paragraph)在vi中是指以空白行隔開的文字。
" s! ?2 e9 u7 q
2 F/ C# [, g4 F+ [& W; x2.視窗的移動 <Ctrl><f> 視窗往下捲一頁。
' L% G6 H! O$ l; ^: d& `3 j <Ctrl><b> 視窗往上捲一頁。* {: i) ?0 a2 e
<Ctrl><d> 視窗往下捲半頁。0 l; v& m I- F( ^
<Ctrl><u> 視窗往上捲半頁。
2 d# F, r0 }+ l. M <Ctrl><e> 視窗往下捲一行。8 a. ~' a5 c ]8 i- p7 G9 d2 N# y
<Ctrl><y> 視窗往上捲一行。
8 A# R, p) z7 d9 F) z/ N" m
' f5 ^+ k8 |2 ~& M% |3.刪除、複製及修改指令介紹 (此單元較少使用)
4 \: m8 D, z: U- G i d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
: v9 l0 E9 Q. s2 P Operator + Scope = command
) X* c y i' O; @: l (運算子) (範圍)
. m r$ _& N& K3 q 運算子:
7 F2 i" u1 ]& T5 _; p) H- F d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。0 z2 ]. x3 r+ u% E" |( r. a
y 將資料(字組、行列、句子或段落)複製到緩衝區。+ O4 }0 Y+ P# y( q2 X
p 放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
( [' n Q) |: y% D# Z/ p4 | 料放置於游標所在位置之行列下。
* s" R. Q$ ] Z# S. r' [+ F$ `! B c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句
% L. L+ t! ~, a2 [* a 子等之資料,並插入新鍵資料。
2 U! s/ _5 J0 j, b 範圍:7 U2 P; R- s, Q' V
e 由游標所在位置至該字串的最後一個字元。1 @5 C6 h% p" n* B8 [2 V
w 由游標所在位置至下一個字串的第一個字元。" ^; W3 c; T& @4 V
b 由游標所在位置至前一個字串的第一個字元。
8 G$ u" s! q1 X' v $ 由游標所在位置至該行的最後一個字元。
# k8 | Y$ ^4 M c 0 由游標所在位置至該行的第一個字元。
& U, n; p6 s3 ~4 h( b' M4 t( k ) 由游標所在位置至下一個句子的第一個字元。
8 _+ q- \& N* P4 e: r7 [ ( 由游標所在位置至該句子的第一個字元。
9 ~9 N+ r7 y1 U, ?4 z. B( Q/ b { 由游標所在位置至該段落的最後一個字元。! u' Y% r* Y, i& @7 A# h
} 由游標所在位置至該段落的第一個字元。
4 N% e# ?6 e4 {2 K. S* P 整行動作
, L" S) u/ ]' n F3 Q s dd 刪除整行。
. [+ y& T6 k; [8 R/ l3 F3 ~ D 以行為單位,刪除游標後之所有字元。( _5 n) F5 u, z0 a
cc 修改整行的內容。( U; U9 ^4 d2 W
yy yank整行,使游標所在該行複製到記憶體緩衝區。
2 F: Q Q, S7 q7 Y5 G# U7 B. ^
7 ^2 c0 [$ [/ i6 \4.刪除與修改+ x$ @% e9 f4 Q9 x
x 刪除游標所在該字元。2 P5 Y @( Q7 D# X/ M
X 刪除游標所在之前一字元。; t1 w3 h1 x {# \0 L
dd 刪除游標所在該行。
6 L8 ~7 @ i& H5 t$ N r 用接於此指令之後的字元取代(replace)游標所在字元。 V1 q' I/ a3 f
如: ra 將游標所在字元以 a 取代之。
/ H: g- F; ~2 b1 D! f R 進入取代狀態,直到《ESC》為止。
0 }$ O( v) h { u2 w9 w& O/ | s 刪除游標所在之字元,並進入輸入模式直到《ESC》。
8 `! j& k- i' S5 [; X$ J S 刪除游標所在之該行資料,並進入輸入模式直到《ESC》。
4 V4 @% O2 g. t# r' R i! u
! {6 g8 D6 A+ r5.搬移與複製! j& e' V% M/ N, \
利用delete 及 put 指令可完成資料搬移之目的。
* Q( o6 Y/ H1 r 利用yank 及 put 指令可完成資料複製之目的。
' U& z5 Z; ^# ?- ]2 z% } yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
6 S+ |; K' H2 n& b4 [' ~$ t 可將緩衝區內的資料複製到螢幕上。
q# E. k/ v, Z6 E! d 例:
+ C8 d: ?3 ?3 G# P. r( p7 _8 p' ]* J 搬移一行 ‧在該行執行 dd) ]+ t a& f' N' s
‧游標移至目的地
* d" U C1 R, J8 u: m ‧執行 p1 l% [" o3 c! q# X1 [; R2 X
複製一行 ‧在該行執行 yy3 G: |# H6 l- _; [/ r8 ? f8 f
‧游標移至目的地
' ?% M5 h8 r. @0 ^! f# p, t$ T ‧執行 p5 }) s& z$ Y$ ]9 m8 b4 u& j
& @6 M$ ]3 |) O& R. M {
6.指令重複3 N" T/ p7 o- f& r7 Y
在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n& r Y! T# U* \5 K* r# V; p/ t! A! s" [
次。
0 H4 _) S+ C. B' B/ ^ 例:/ C& S7 L2 b W% h
刪除10行 ‧10dd! Z# l9 g$ _1 M
複製10行 ‧10yy4 ?8 c+ |& E6 P8 s) V: j4 x0 o/ m
‧游標移至目的地
( j2 e+ w+ m7 i ‧p
* V) A/ x6 m r) t 指標往下移10行 ‧10j9 j( U( w+ B! }" ~: k3 h
+ Q$ \+ n! Z }% O0 o/ c3 R
7.取消前一動作(Undo)
, i" t1 C1 j! d+ f 即復原執行上一指令前的內容。+ `; S" Q+ r. v: \* j2 p, ]
u 恢復最後一個指令之前的結果。0 V( i) [4 O3 q' N3 T% P
U 恢復游標該行之所有改變。
$ q" y8 N# O$ S5 C( @, ]9 ^& H; c. z: H6 R# m Q: F" s
8.搜尋
" _7 e( q0 w/ m0 d6 |1 W3 a 在vi中可搜尋某一字串,使游標移至該處。
! }% t" R3 {! h /字串 往游標之後尋找該字串。' z2 L) f- p6 p( U" I0 \! X7 m# |1 r
?字串 往游標之前尋找該字串。
6 x* }; l; x( t7 p% j: Y3 j n 往下繼續尋找下一個相同的字串。
; U; z( o" h) G8 z. F, C N 往上繼續尋找下一個相同的字串。
2 t- i3 K# R& {) j- }/ m
* v& a2 r8 m8 r, ?: w. v# j9.資料的連接
2 ~8 s$ R7 W7 Z+ x J 句子的連接。將游標所在之下一行連接至游標該行的後面。7 V T2 ? I: A
若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
" l0 _5 x9 J8 w4 f8 J% a Y (可利用a、i等指令)再按《Enter》即可。
- n1 K/ M! J$ B5 P- y# ^
; c! Q, Z6 C x) U9 x$ P$ S1 |10.環境的設定
4 t% l# g2 \; h# U# Y :setnu 設定資料的行號。8 K! }9 A1 ~7 D o
:setnonu 取消行號設定。
- p* I$ l; J1 p2 l; J9 Z4 ? :setai 自動內縮。) B: C4 A- @+ x% j
:setnoai 取消自動內縮。
% x. Y8 t1 m+ T* H. M; | 自動內縮(automatic indentation)
! n& W" S' K" g# G0 L6 K( r" D 在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自; R- i' `9 _' }. f$ p$ T
動內縮的功能,用下例解釋之:
4 n0 e8 D) h+ y- o ‧vi test
' A- ^0 s! d$ x! l' L ‧(進入編輯視窗後); W/ w' e. y* y9 d7 E3 G, [
this is the test for auto indent
) P1 p% O' i; l% v 《Tab》start indent ← :set ai (設自動內縮)
4 R& @+ _/ o, ]8 T9 Q 《Tab》data
" o! X4 Z# s; T& b( y; P8 L 《Tab》data* [* i2 k4 c* ^- o/ }& g
《Tab》data ← :set noai (取消自動內縮)8 u! n0 q4 o' p; v% C- c+ y5 G
the end of auto indent.
! i, l2 o8 }4 I8 K) H d ‧註:<Ctrl><d>可刪除《Tab》字元。
1 ~) G [) E# j, O7 `
# o) R4 ~$ v; }6 F" \- H" { \. J11.ex指令5 k# W" O. x: X/ m9 |. w2 R5 u$ B2 G
讀寫資料; d. G* A9 {; D: }$ e. u" N
:w 將緩衝區的資料寫入磁碟中。
. y: @( y! i" i2 y :10,20wtest 將第10行至第20行的資料寫入test檔案。% N4 p9 k6 h6 g- a/ B
:10,20w>>test 將第10行至第20行的資料加在test檔案之後。
& y3 K/ L1 `- n7 y% i) k; b: d :rtest 將test檔案的資料讀入編輯緩衝區的最後。0 v; \9 {6 O8 R$ X' ]2 w3 |% M
刪除、複製及搬移. Z/ `& S" V( {2 ~# [( O9 y/ R# d
:10,20d 刪除第10行至第20行的資料。! g# w2 w# @, @) y3 I1 x
:10d 刪除第10行的資料。/ Z+ m/ M' k o. w
:%d 刪除整個編輯緩衝區。6 g i* z7 _9 A3 {7 L+ X
:10,20co30 將第10行至第20行的資料複製至第30行之後。! i8 p$ s6 P/ C, b4 q" F8 B9 q
:10,20mo30 將第10行至第20行的資料搬移至第30行之後。/ j' ^- \6 a# k! e7 z0 \" R
字串搜尋與取代( n( A9 x0 A5 T" V/ t# ?9 Z
s(substitute)指令可搜尋某行列範圍。5 j/ c" ^1 ~9 |$ y O) J4 ^- k
g(global)指令則可搜尋整個編輯緩衝區的資料。
; Y1 B" I2 ]6 u/ ?+ D" Z$ |' i s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條& w3 e# Z- F; \3 n$ H$ B
件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
3 c1 Q) e' J5 W4 ?9 m7 Y0 ? :1,$s/old/new/g 將檔案中所有的『old』改成『new』。
$ o" ^# E7 U$ {3 F :10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。; |8 Q& h5 Q* }! R
:%s/old/new/g 將編輯緩衝區中所有的『old』改成『new』。3 [; V( i! L: P. H
; i) B# p# n& Y. v. J9 u( ]; r, _# a12.恢復編輯時被中斷的檔案/ z/ E2 l/ p. u" O- ]1 O
在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
+ d9 J$ `" `4 V# F7 Q 被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
" V- K m/ T, z; b 的檔案內容。' l# Z1 I- n2 h7 G
%vi -r filename
& a- ^9 T" W" d B4 ^ x
: T( Y4 H/ i" x. S5 V13.編輯多個檔案. H4 r5 s! V W5 i
vi亦提供同時編輯多個檔案的功能,方法如下: r4 J4 _- u( j1 C
%vi file1 file2 ..
3 X& u# E9 f, N/ R1 E. B, L& ^ 當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
. b: p; W4 i$ X# f6 O+ p: u6 ? 再利用 『:n』載入下一個檔案。
, A4 Z& t, w7 a9 e& O
4 ]2 M$ q1 T- |. T) ]參考:$ ?5 @$ O% Q$ E# \' m6 @+ m1 m) _
. C, `' ?/ W- bhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html6 f8 N0 n" N/ r6 T8 R) Z& p/ V
| 歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/) |
Powered by Discuz! X3.2 |