52AV手機A片王|52AV.ONE
標題: Linux下的文字編輯器-vi詳細說明 [打印本頁]
作者: IT_man 時間: 2014-11-18 08:47
標題: Linux下的文字編輯器-vi詳細說明
本帖最後由 IT_man 於 2017-5-6 23:16 編輯
- J- Z8 E/ n% L0 ]( `7 R
- Z( a$ o: ` C4 {' Zvi指令說明(完整版)+ Z t6 N; D' h8 `8 d1 j8 c* }" X
- vi 的操作模式
% L* {8 O c% N/ Z9 H4 E
d/ S: `' p7 C: [; q9 i Kvi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 後,內定即處在指令模式下,此刻鍵入之任何字元皆 被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
- 輸入模式* a. N" b( f* p/ Y# [% p8 Q
& f( ^' ~5 K l 如何進入輸入模式' W6 c4 b$ H; P8 r! {) m
a (append) 由游標之後加入資料。
; }, o" T- M, e+ M4 d% ` A 由該行之末加入資料。. V1 s7 x1 b9 o3 [
i (insert) 由游標之前加入資料。2 g% z3 P3 l- f' x4 z
I 由該行之首加入資料。" q: O; [; Z A5 ^0 N% U1 e$ U
o (open) 新增一行於該行之下供輸入資料之用。( R6 m9 _( u2 ?" y9 F7 g
O 新增一行於該行之上供輸入資料之用。5 ], P C4 H5 W8 e5 T
如何離開輸入模式9 P0 b1 Y2 C$ O* p9 @
《ESC》 結束輸入模式。
* d% U+ s7 t5 x- V
+ l' L. ~: ] h6 d/ j
1.游標之移動
" ^$ B, z: n Q& Q/ f h 向左移一個字元。
% @+ S- B! [2 s; g7 u/ i, M8 j3 l j 向上移一個字元。
; |. m \; l* U9 ^9 w k 向下移一個字元。
% l; f8 h# V4 r% l, K8 h l 向右移一個字元。" ^$ D# _4 l" A: N
0 移至該行之首
- H: A: ?4 ~: n* [. k6 c; w $ 移至該行之末。
2 [1 y# m" k9 v ^ 移至該行的第一個字元處。
. K& @' S! Y' W4 o H 移至視窗的第一列。
- \4 y, l3 H% _+ g M 移至視窗的中間那列。
1 c, p% M7 C0 K/ p- l: ^0 f L 移至視窗的最後一列。
' W: }. p; Q$ r( ^! F G 移至該檔案的最後一列。, P0 w. g* e' Y8 R y3 V
+ 移至下一列的第一個字元處。- a% W {( Y/ J3 g
- 移至上一列的第一個字元處。
7 L, K" E6 T5 L( A% w9 [ ( 移至該句之首。 (註一)
( y+ M, Y* l( f5 m ) 移至該句之末。
% }3 o0 q/ A$ j. i- E { 移至該段落之首。 (註二)
, B" o2 y; q' t" R1 r" G- m3 Q } 移至該段落之末。
. i) p% S% S9 T H; o6 H2 t' A* N nG 移至該檔案的第 n 列。/ A4 v. x! c5 u5 z; [
n+ 移至游標所在位置之後的第 n 列。
" m, B/ `2 Z$ M& O- ^; G n- 移至游標所在位置之前的第 n 列。
3 m9 x+ E# N. C# e1 A( i <Ctrl><g> 會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標所在行號佔總行號之百分比。
& f* ?8 {2 |/ s! P 註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
+ l2 K! _3 _! s2 w H+ ~' ~ 註二:段落(paragraph)在vi中是指以空白行隔開的文字。% b* | `5 Q e9 ~8 K- n
7 ~6 n9 J! \$ o S
2.視窗的移動 <Ctrl><f> 視窗往下捲一頁。
8 Y, E6 a# d6 } ^$ X <Ctrl><b> 視窗往上捲一頁。
) s) f: Q& g/ ~) _, S5 ?$ f& a# \8 \ <Ctrl><d> 視窗往下捲半頁。
1 k6 S2 V: H& G7 N" I, v' U <Ctrl><u> 視窗往上捲半頁。9 ]% _/ M; M' \
<Ctrl><e> 視窗往下捲一行。
; D8 S+ h& z; l4 m& Z; k* l <Ctrl><y> 視窗往上捲一行。; | a0 h, F; A: ?; m* a
) m. c* j7 h% g% E- \& S0 u4 |3.刪除、複製及修改指令介紹 (此單元較少使用)6 [- _7 H* o1 f2 ^7 S
d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:6 D6 A1 J6 S1 Q" l
Operator + Scope = command
) B5 e, y2 X4 i# b" k (運算子) (範圍)
. ]* `+ h( Z) d% V6 N7 S: k/ X 運算子:
. _' Z4 f& P$ R) O q0 Q8 J: j9 [* }; B. u d 刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
& F8 Y9 i' A7 L/ |( X3 B6 T; Q" k3 t y 將資料(字組、行列、句子或段落)複製到緩衝區。
z% Y' w" b. O1 P: m: S8 B p 放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
: T* J! o2 g( m5 Z 料放置於游標所在位置之行列下。& ]# V7 Q; m+ o- p0 I
c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句! ^# T k) l/ c4 x% I( Y
子等之資料,並插入新鍵資料。# p- O$ `$ _4 ] g2 b: H: ?
範圍:* B4 L. t8 t6 r# L( U0 F+ V
e 由游標所在位置至該字串的最後一個字元。
& g# d/ i4 N5 q+ u, L2 @6 k/ S8 R w 由游標所在位置至下一個字串的第一個字元。2 x: Z- T7 L" M1 I' E
b 由游標所在位置至前一個字串的第一個字元。 p3 g A. d5 I
$ 由游標所在位置至該行的最後一個字元。
2 p2 e2 s! l3 y+ [# S8 R 0 由游標所在位置至該行的第一個字元。
6 C' z. n/ V$ ]9 \, z8 k: c. p ) 由游標所在位置至下一個句子的第一個字元。
[% H! \4 B o. C- _- y9 g ( 由游標所在位置至該句子的第一個字元。5 p, j9 K# }( d3 r
{ 由游標所在位置至該段落的最後一個字元。
& H) k9 c: a- ?* s } 由游標所在位置至該段落的第一個字元。
. C) D" x1 E6 J9 w 整行動作7 q5 T% K5 r( ?! a0 O
dd 刪除整行。
7 i4 R2 L( Z- x0 ^ D 以行為單位,刪除游標後之所有字元。7 n0 I5 O8 c8 l6 K4 h
cc 修改整行的內容。
' `( G2 x8 o1 z% w, o( l yy yank整行,使游標所在該行複製到記憶體緩衝區。
# @/ F4 U; q; ]. M. I; z8 T, b0 o1 ]7 v! u4 v
4.刪除與修改
$ M) h8 l8 c0 s! ~' s x 刪除游標所在該字元。
9 Y; R8 a9 T A8 i% f X 刪除游標所在之前一字元。
, [ q2 X9 F9 }8 B dd 刪除游標所在該行。
9 V& |" {5 P' ^. C/ h r 用接於此指令之後的字元取代(replace)游標所在字元。
/ n0 |; T1 R$ f; J5 _. Z+ q 如: ra 將游標所在字元以 a 取代之。2 n; {8 L, @0 H/ R1 s
R 進入取代狀態,直到《ESC》為止。 q/ L# `" W3 N6 J6 W5 q/ A
s 刪除游標所在之字元,並進入輸入模式直到《ESC》。
7 ]( e& T) p0 m8 V S 刪除游標所在之該行資料,並進入輸入模式直到《ESC》。
2 u* t4 G) D/ V* O3 {2 k
1 a$ A/ b# q* I2 Y1 c& m/ Z9 S5.搬移與複製
- b1 f; e& p4 h+ |4 p7 F 利用delete 及 put 指令可完成資料搬移之目的。
/ t) I- x' z! c9 N 利用yank 及 put 指令可完成資料複製之目的。% M) m- Z* ^8 \$ [ [
yank 和delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令: Y8 w1 N# B0 L* z* p* Q* u
可將緩衝區內的資料複製到螢幕上。
9 y( y9 \# i3 U9 a" [8 ~: r3 v 例:
, @9 I7 u1 V1 k8 T# T 搬移一行 ‧在該行執行 dd
$ x, J2 [8 `7 R ‧游標移至目的地
, i% r; p& J2 h E, [( A ‧執行 p
( k/ z/ F0 q: S6 Q& T& o/ g! i 複製一行 ‧在該行執行 yy8 M3 d5 `6 k9 ^, H8 f5 I) i! l7 `
‧游標移至目的地
1 Y: a! N4 P2 |6 A ‧執行 p
0 Y# i2 a* P D Q+ O1 P+ ]! X
6.指令重複
; l' o/ A, k% y, T A- B8 \ 在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
) Y0 o/ T1 H: Z" h! E3 w 次。
/ \# _* w+ C$ M1 j- x 例:* {* T) Y) j* {& ?5 H
刪除10行 ‧10dd7 ~- o) V6 }. p' y
複製10行 ‧10yy5 r3 D: y$ }& {; b5 C
‧游標移至目的地# p- C/ w; o8 U
‧p& i( W6 P: I' N C, z1 @
指標往下移10行 ‧10j
1 K$ J$ R9 ]- f% q7 G, I# G _- h' w
7.取消前一動作(Undo)
3 V3 F( B' q* Z5 p 即復原執行上一指令前的內容。
0 S8 J% s9 Y1 @ u 恢復最後一個指令之前的結果。
( M8 b/ w/ R9 U: |) ^& c. ]9 T U 恢復游標該行之所有改變。
, J9 E0 \' c2 c' V( g7 J: O8 T% F
3 w2 e' p! F6 H$ v0 J7 g8.搜尋
' x6 U) R$ I" n [% V8 B 在vi中可搜尋某一字串,使游標移至該處。" p' X+ }# E1 e4 ~1 S: S, F a
/字串 往游標之後尋找該字串。
6 a! X: [) q* |" y6 w* F) |* l, E ?字串 往游標之前尋找該字串。: l0 b: L7 {+ u
n 往下繼續尋找下一個相同的字串。/ X ^4 O; l( c, h3 @
N 往上繼續尋找下一個相同的字串。
, l, b( t H) ^% w( B7 {8 i- m" S
9.資料的連接
9 a, Q- I2 A" b1 W* C J 句子的連接。將游標所在之下一行連接至游標該行的後面。
* Q: k5 V3 N1 m! p1 R' i. p 若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式; r, J1 {5 l+ Z: j& R4 [
(可利用a、i等指令)再按《Enter》即可。% P3 L* h" A" ?- P/ {$ ?. W, e
6 J) ?8 \. C5 t10.環境的設定
0 M$ J0 f1 ^2 Y6 {4 H1 G6 w2 i- y :setnu 設定資料的行號。1 @$ |$ I) n; I' M& f8 e
:setnonu 取消行號設定。
4 b: m, r5 R/ z# y" S7 G :setai 自動內縮。
4 {9 o% ?0 Y1 H/ m1 t :setnoai 取消自動內縮。
( }2 b; p/ w0 V( h, k9 q5 j, a 自動內縮(automatic indentation)
$ u5 L# D3 W6 h( d4 O* y 在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自# ]4 u+ H6 z2 c# j5 F
動內縮的功能,用下例解釋之:
0 h7 L. E& X' l% l( l4 t ‧vi test
' u) b/ M: y0 e T ‧(進入編輯視窗後)8 q* c( j% A9 K5 N7 ]: u
this is the test for auto indent+ J9 `+ [8 U2 ~7 c7 S# F
《Tab》start indent ← :set ai (設自動內縮), h4 ]- T7 w% ^; U
《Tab》data
7 ]1 B- |: b5 D 《Tab》data
8 |# m/ s: ?6 k E 《Tab》data ← :set noai (取消自動內縮)1 y Y( O/ ?; p4 ~ c
the end of auto indent., ~6 g! H, J' F; ^3 \% A9 ?
‧註:<Ctrl><d>可刪除《Tab》字元。
- b. W4 s9 B' ~+ a
* |! a% T+ \* }11.ex指令5 P+ z; A$ ~# {! S5 M- t) S1 f
讀寫資料7 a9 u- J/ a$ _3 c7 Z J( j* h) l/ W
:w 將緩衝區的資料寫入磁碟中。1 L8 }* s: }- }0 E) U
:10,20wtest 將第10行至第20行的資料寫入test檔案。" w/ b, B; T( U4 w/ z
:10,20w>>test 將第10行至第20行的資料加在test檔案之後。2 }4 P7 h @, O- h
:rtest 將test檔案的資料讀入編輯緩衝區的最後。
6 N5 q. O4 @. ^" U: l+ t8 i+ n) n 刪除、複製及搬移
5 k9 \" w8 I& R9 g :10,20d 刪除第10行至第20行的資料。
( \, I+ D+ |2 w3 s9 @! a: S :10d 刪除第10行的資料。
* B+ {& s9 P6 Q& z0 r :%d 刪除整個編輯緩衝區。- ^3 p B+ y! S" u
:10,20co30 將第10行至第20行的資料複製至第30行之後。! |/ L( Q2 v" K
:10,20mo30 將第10行至第20行的資料搬移至第30行之後。' @7 t3 E$ Q9 _( U/ ], k4 n
字串搜尋與取代
" d7 B; { J! G# M9 Q) @ s(substitute)指令可搜尋某行列範圍。3 i2 q- o& c( J! w: [3 W5 O8 g. S
g(global)指令則可搜尋整個編輯緩衝區的資料。
( }" b+ ~0 s' t% E s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條# r& z3 U, l0 U: h8 ` {8 `, F4 b
件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
; e4 c1 F/ ?8 \/ a0 s8 M :1,$s/old/new/g 將檔案中所有的『old』改成『new』。
4 ?: S9 O! a; A3 a7 }$ S :10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。
# k4 z; Y* V+ {3 ?) S2 P$ i :%s/old/new/g 將編輯緩衝區中所有的『old』改成『new』。
# Y- f+ k5 F$ y" f! a
. B E) N* z+ F12.恢復編輯時被中斷的檔案3 }. V: C+ c, j8 s' c
在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
% v* W5 R/ X- t, [1 R& _ 被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前2 Y3 L! w) \/ d' W
的檔案內容。9 ?& W; {' u, {- V
%vi -r filename. G4 x, \7 J6 ]) g6 L. c
( s% c5 j+ W* F7 q
13.編輯多個檔案
4 G% f& p* C) e1 A9 k1 @( ` vi亦提供同時編輯多個檔案的功能,方法如下:
" G+ q: O/ ^- E) y, k %vi file1 file2 ..
( P {2 Z% a5 F N: d3 j 當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
* A- Z5 C3 ~8 ]: ?& z$ Q& W 再利用 『:n』載入下一個檔案。
% A; b% K8 T3 j# T9 n2 W8 _& M. Z0 _; S
參考:
. w3 R3 L5 Y5 T$ e; N- Y+ }
8 X8 s$ E, A' Y0 p) ]! u. W( p% Lhttp://chunchaichang.blogspot.tw/2010/08/vim-s.html! V, U/ s3 G4 k1 _
| 歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av.one/) |
Powered by Discuz! X3.2 |