时间: 2009-06-15 / 分类: WEB后端编程 - 开发与实践 / 浏览次数: / 0 个评论 发表评论
vi或者vim的基本语法
项目前端开发的架构
12条经典摄影技巧
CSS Hack浏览器兼容IE6+IE7+IE8+IE9+FF
黄金分割与摄影构图

通常喜欢是用vim来代替vi,只是vim 是vi的升级版本,所以兼容了vi的所有指令,并且添加了一些新的特性。

进入vi的命令

filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename….filename :打开多个文件,依次编辑多个文件vi

vi 的操作模式

vi 提供两种操作模式:输入模式(insert mode)和指令模式(command mode)。当使用者进入 vi 后,即处在指令模式下,此刻键入之任何字符皆被视为指令。在此模式下可进行删除、修改等动作。若要输入数据,则需进入输入模式。

输入模式

如何进入输入模式?有很多种方式可以进入,如:

a (append)      由光标之后加入数据。
A               由该行之末加入数据。
i (insert)      由光标之前加入数据。
I               由该行之首加入数据。
o (open)        新增一行于该行之下供输入数据之用。
O               新增一行于该行之上供输入数据之用。

如何离开输入模式:

按“ESC”按键 结束输入模式。

光标之如何移动:

指令模式:

h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字j至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾

作用:

b 移动到当前单词的开始
e 移动到当前单词的结尾
w 向前移动一个单词
h 向前移动一个字符
j 向上移动一行
k 向下移动一行
l 向后移动一个字符

窗口屏幕的移动

<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)指令,类似delete与insert的组和。删除一个字组、句子等之资料,并插入新键资料。

范围:

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               往上继续寻找下一个相同的字符串。
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换

r 替换光标所在的字符
R 替换字符序列
cw 替换一个单词
ce 同cw
cb 替换光标所在的前一字符
c$ 替换自光标位置至行尾的所有字符
C 同c$
cc 替换当前行

数据的连接:

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》字符。

all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“\\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息

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:

: q 不保存退出
: q! 不保存强制性退出
: w 保存编辑
: w filename 存入文件 filename 中
: w! filename 强制性存入文件 filename 中
: wq 保存退出
: x 同 :wq
ZZ 同 :wq

      站点地图 | 关于我 | 返回顶部
    Copyright © 2001-2013 { amiku.cn | zhangshunjin.com }. Powered by 

    阿米酷

    张顺金


    浙ICP备11002820号-1