vi指令明(完整版)
vi指令明(完整版)
.vi 的操作模式
==============
vi 提供操作模式:入模式(insert mode)和指令模式(command mode)
。使用者入 vi 後,即在指令模式下,此刻入之任何字元皆被
指令。在此模式下可行除、修改等作。若要入料,需入入
模式。
.入模式
=========
如何入入模式
a (append) 由游之後加入料。
A 由行之末加入料。
i (insert) 由游之前加入料。
I 由行之首加入料。
o (open) 新增一行於行之下供入料之用。
O 新增一行於行之上供入料之用。
如何入模式
《ESC》 束入模式。
.指令模式
=========
游之移
h 向左移一字元。
j 向上移一字元。
k 向下移一字元。
l 向右移一字元。
0 移至行之首
$ 移至行之末。
^ 移至行的第一字元。
H 移至窗的第一列。
M 移至窗的中那列。
L 移至窗的最後一列。
G 移至案的最後一列。
+ 移至下一列的第一字元。
- 移至上一列的第一字元。
( 移至句之首。 (一)
) 移至句之末。
{ 移至段落之首。 (二)
} 移至段落之末。
nG 移至案的第 n 列。
n+ 移至游所在位置之後的第 n 列。
n- 移至游所在位置之前的第 n 列。
<Ctrl><g> 示行之行、案名、案中最末行之行、游
所在行行之百分比。
一:句子(sentence)在vi中是指以『!』、『.』或『?』束的一串字。
二:段落(paragraph)在vi中是指以空白行隔的文字。
.窗的移
===========
<Ctrl><f> 窗往下一。
<Ctrl><b> 窗往上一。
<Ctrl><d> 窗往下半。
<Ctrl><u> 窗往上半。
<Ctrl><e> 窗往下一行。
<Ctrl><y> 窗往上一行。
.除、及修改指令介 (此元少使用)
=========================
d(delete)、c(change)和y(yank)一的指令在 vi 中的指令格式:
Operator + Scope = command
(算子) ()
算子:
d 除指令。除料,但除料到。
y 料(字、行列、句子或段落)到。
p 放置(put)指令, d 和 y 配和使用。可最後delete或yank的
料放置於游所在位置之行列下。
c 修改(change)指令,似deleteinsert的和。除一字、句
子等之料,插入新料。
:
e 由游所在位置至字串的最後一字元。
w 由游所在位置至下一字串的第一字元。
b 由游所在位置至前一字串的第一字元。
$ 由游所在位置至行的最後一字元。
0 由游所在位置至行的第一字元。
) 由游所在位置至下一句子的第一字元。
( 由游所在位置至句子的第一字元。
{ 由游所在位置至段落的最後一字元。
} 由游所在位置至段落的第一字元。
整行作
dd 除整行。
D 以行位,除游後之所有字元。
cc 修改整行的容。
yy yank整行,使游所在行到。
.除修改
===========
x 除游所在字元。
X 除游所在之前一字元。
dd 除游所在行。
r 用接於此指令之後的字元取代(replace)游所在字元。
如: ra 游所在字元以 a 取代之。
R 入取代,直到《ESC》止。
s 除游所在之字元,入入模式直到《ESC》。
S 除游所在之行料,入入模式直到《ESC》。
.搬移
==========
利用 delete 及 put 指令可完成料搬移之目的。
利用 yank 及 put 指令可完成料之目的。
yank 和 delete 可指定的料到,而藉由 put 指令
可的料到幕上。
例:
搬移一行 ?在行行 dd
?游移至目的地
?行 p
一行 ?在行行 yy
?游移至目的地
?行 p
.指令重
=========
在指令模式中,可在指令前面加入一字 n,此指令作重行 n
次。
例:
除10行 ?10dd
10行 ?10yy
?游移至目的地
?p
指往下移10行 ?10j
.取消前一作(Undo)
===================
即原行上一指令前的容。
u 恢最後一指令之前的果。
U 恢游行之所有改。
.搜
=====
在vi中可搜某一字串,使游移至。
/字串 往游之後找字串。
?字串 往游之前找字串。
n 往下找下一相同的字串。
N 往上找下一相同的字串。
.料的接
===========
J 句子的接。游所在之下一行接至游行的後面。
若某行料太亦可其分成行,只要游移至分,入入模式
(可利用 a、i等指令)再按《Enter》即可。
.境的定
===========
:set nu 定料的行。
:set nonu 取消行定。
:set ai 自。
:set noai 取消自。
自(automatic indentation)
在文件或程式,有遇到需要的,『:set ai』即提供自
的功能,用下例解之:
?vi test
?(入窗後)
this is the test for auto indent
《Tab》start indent ← :set ai (自)
《Tab》data
《Tab》data
《Tab》data ← :set noai (取消自)
the end of auto indent.
?:<Ctrl><d> 可除《Tab》字元。
.ex指令
=======
料
:w 的料入磁碟中。
:10,20w test 第10行至第20行的料入test案。
:10,20w>>test 第10行至第20行的料加在test案之後。
:r test test案的料入的最後。
除、及搬移
:10,20d 除第10行至第20行的料。
:10d 除第10行的料。
:%d 除整。
:10,20co30 第10行至第20行的料至第30行之後。
:10,20mo30 第10行至第20行的料搬移至第30行之後。
字串搜取代
s(substitute)指令可搜某行列。
g(global)指令可搜整的料。
s指令以第一足件的字串其取代的象,若行有足
件的字串,也能取代第一,若想取代所有的字串需加上g。
:1,$s/old/new/g 案中所有的『old』改成『new』。
:10,20s/^/ / 第10行至第20行料的最前面插入5空白。
:%s/old/new/g 中所有的『old』改成『new』。
.恢被中的案
=======================
在程中,若系掉或中,而的料未
被回磁碟,再度回到系,行下列指令即可回中前
的案容。
%vi -r filename
.多案
=============
vi亦提供同多案的功能,方法如下:
%vi file1 file2 ..
第一案修完成後,可利用『:w』存,而後
再利用 『:n』入下一案。
1 楼 liuxinglanyue 2010-12-30 繁体字啊
收藏一篇这样的文章,操作linux编辑应该很快了。