文件编辑器 vi 之使用方法简介
============================
vi (visual editor)是 unix提供的文本编辑器
当我们用vi打开一个文件时,vi会将文件内容复制一份到缓冲区buffer,并对buffer进行编辑,编辑完成后,使用者可决定是否要取代原来旧有的文件。vi产生一个被编辑文件的副本文件,".filename.swp".
vi 命令选项:
-c command 在对文件进行编辑前,先执行command命令
-r filename 恢复文件filename
-y number 每屏只编辑number 行文本
vi有两种工作模式:输入模式(insert mode);指令模式(command mode);
进入输入模式:
a(append):由游标之后加入资料
A 由该行之末加入资料
i (insert) 由游标之前加入资料
I 由该行之首加入资料
o (open) 新增一行於该行之下供输入资料之用
O 新增一行於该行之上供输入资料之用
离开输入模式:
结束输入模式
游标之移动
h 向左移一个字元
j 向上移一个字元
k 向下移一个字元
l 向右移一个字元
0 移至该行之首(数字0)
$ 移至该行之末
^ 移至该行的第一个字元处
H 移至视窗的第一行
M 移至视窗的中间那行
L 移至视窗的最后一行
G 移至该文件的最后一行
gg 移至该文件的首行
+ 移至下一列的第一个字元处
- 移至上一列的第一个字元处
( 移至该句之首
) 移至该句之末
{ 移至该段落之首
} 移至该段落之末
nG 移至该文件的第 n 行
n+ 移至游标所在位置之后的第 n 行
n- 移至游标所在位置之前的第 n 行
n( 左括号移动到句子的最前面,前面加上数字可以指定往前移动 n 个句子
n) 右括号移动到下个句子的最前面,前面加上数字可以指定往后移动 n 个句子
n{ 左括弧移动到段落的最前面,前面加上数字可以指定往前移动 n 个段落
n} 右括弧移动到下个段落的最前面,前面加上数字可以指定往后移动 n 个段落
[n]> 标所在行以下n行右移一个制表符位置
[n]< 标所在行以下n行左移一个制表符位置
fx 往右移动到 x 字符上
Fx 往左移动到 x 字符上
tx 往右移动到 x 字符前
Tx 往左移动到 x 字符前
; 配合 f&t 使用,重复一次
, 配合 f&t 使用,反方向重复一次
会显示该行之行号、文件名称、文件中最末行之行号、游标
所在行号占总行号之百分比。
注一:句子(sentence)在vi中是指以"!"、"."或"?"结束的一串字。
注二:段落(paragraph)在vi中是指以空白行隔开的文字。
视窗的移动
===========
视窗往下卷一页。
视窗往上卷一页。
视窗往下卷半页。
视窗往上卷半页。
视窗往下卷一行。
视窗往上卷一行。
删除、复制及修改指令介绍
=========================
d(delete)、c(change)和y(yank)这一类的指令在 vi 中的指令格式为:
Operator + Scope = command
(运算子) (范围)
运算子:
d 删除指令。删除资料,但会将删除资料复制到记忆体缓冲区
dw 删除光标所在的单词
D 以行为单位,删除游标后之所有字元
y 将资料(字组、行列、句子或段落)复制到缓冲区
yw 将光标所在的单词存入缓冲区
p 放置(put)指令,与 d 和 y 配和使用。可将最后delete或yank的资
料放置於游标所在位置之行列下。
c 修改(change)指令,类似delete与insert的组和。删除一个字组、句
子等之资料,并插入新键资料。
cc或S 修改整行的内容。
cw 删除光标所在单词并进入文本编辑状态
C 改变一行中光标所在位置之后的部分
~ 改变光标所在字符的大小写
. 重复上一次的操作
<< 将当前行移到左边
>> 将当前行移到右边
"ad将文本删除至缓冲区a
"ap粘贴缓冲区a中的内容
范围:
e 由游标所在位置至该字串的最后一个字元。
w 由游标所在位置至下一个字串的第一个字元。
b 由游标所在位置至前一个字串的第一个字元。
$ 由游标所在位置至该行的最后一个字元。
0 由游标所在位置至该行的第一个字元。
) 由游标所在位置至下一个句子的第一个字元。
( 由游标所在位置至该句子的第一个字元。
{ 由游标所在位置至该段落的最后一个字元。
} 由游标所在位置至该段落的第一个字元。
删除与修改
===========
x 删除游标所在该字元。
X 删除游标所在之前一字元。
dd 删除游标所在该行。
r 用接於此指令之后的字元取代(replace)游标所在字元。
如: ra 将游标所在字元以 a 取代之。
R 进入取代状态,直到为止。
s 删除游标所在之字元,并进入输入模式直到。
S 删除游标所在之该行资料,并进入输入模式直到。
搬移与复制
==========
利用 delete 及 put 指令可完成资料搬移之目的。
利用 yank 及 put 指令可完成资料复制之目的。
yank 和 delete 可将指定的资料复制到记忆体缓冲区,而藉由 put 指令
可将缓冲区内的资料复制到萤幕上。
例:
搬移一行 .在该行执行 dd
.游标移至目的地
.执行 p
复制一行 .在该行执行 yy
.游标移至目的地
.执行 p
指令重复
=========
在指令模式中,可在指令前面加入一数字 n,则此指令动作会重复执行 n
次。
例:
删除10行 .10dd
复制10行 .10yy
.游标移至目的地
.p
指标往下移10行 .10j
取消前一动作(Undo)
===================
即复原执行上一指令前的内容。
u 恢复最后一个指令之前的结果。
U 恢复游标该行之所有改变。
搜寻
=====
在vi中可搜寻某一字串,使游标移至该处。
/string 往后移动到有 string 的地方
?string 往前移动到有 string 的地方
n 配合 /&? 使用,重复一次
N 配合 /&? 使用,反方向重复一次
% 移到匹配的"()"或"{}"上
资料的连接
===========
J 句子的连接。将游标所在之下一行连接至游标该行的后面。
若某行资料太长亦可将其分成两行,只要将游标移至分开点,进入输入模式
(可利用 a、i等指令)再按即可。
环境的设定
===========
:set nu 设定资料的行号。
:set nonu 取消行号设定。
:set ai 自动内缩。
:set noai 取消自动内缩。
自动内缩(automatic indentation)
在编辑文件或程式时,有时会遇到需要内缩的状况,:set ai即提供自
动内缩的功能,用下例解释之:
.vi test
.(进入编辑视窗后)
this is the test for auto indent
start indent ← :set ai (设自动内缩)
data
data
data ← :set noai (取消自动内缩)
the end of auto indent.
.注: 可删除字元。
ex指令
=======
读写资料
:w 将缓冲区的资料写入磁盘中。
:10,20w test 将第10行至第20行的资料写入test文件。
:10,20w>>test 将第10行至第20行的资料加在test文件之后。
:r test 将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
:q 结束编辑(quit) 如果不想存档而要放弃编辑过的档案则用
:q! 强制离开
zz 功能与 :wq 相同。 (我的vi里这个命令不好用)
恢复编辑时被中断的文件
=======================
在编辑过程中,若系统当掉或连线中断,而缓冲区的资料并还未
被写回磁盘时,当再度回到系统,执行下列指令即可回复中断前
的文件内容。
%vi -r filename 使用filename替换
编辑多个文件
=============
vi亦提供同时编辑多个文件的功能,方法如下:
%vi file1 file2 ..
:n 开始编辑vi激活的文件列表中的下一个文件。
:n filename 指定被编辑的新的文件。
:e filename 在vi中编辑另一个文件filename。
:e # 开始编辑另一个文件。
:e ! 重新装入当前文件,如果当前文件有改动,则丢弃以前的改动。
当第一个文件编修完成后,可利用:w将该缓冲区存档,而后再利用 :n载入下一个文件
阅读(832) | 评论(0) | 转发(0) |