Chinaunix首页 | 论坛 | 博客
  • 博客访问: 895362
  • 博文数量: 206
  • 博客积分: 10276
  • 博客等级: 上将
  • 技术积分: 2358
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-01 02:41
文章分类

全部博文(206)

文章存档

2014年(1)

2013年(1)

2012年(2)

2011年(10)

2010年(14)

2009年(15)

2008年(33)

2007年(90)

2006年(40)

我的朋友

分类: LINUX

2006-11-23 14:11:32

vi是在Unix工作站上广泛使用的功能强大的全屏幕编辑工具。

(1)   进入vi

直接执行 vi编辑程序即可。此刻屏幕上会出现 vi 的编辑屏幕,同时 vi 会将文件复制一份至内存中的缓冲区(buffer)。vi会保留在硬盘中的文件不变,而先对缓冲区的文件作编辑,编辑完成后,使用者可决定是否要取代原来旧有的文件。

(2)   离开vi

若在输入模式下,则先利用[ESC]进入指令模式,而后即可选用下列指令离开vi

q!        离开vi,并放弃刚在缓冲区内编辑的内容。

wq       将缓冲区内的资料写入硬盘中,并离开vi

ZZ       wq

x         wq

w         将缓冲区内的资料写入硬盘中,但并不离开vi

q         离开vi,若文件被修改过,则会被要求确认是否放弃修改的内容。

(3)   vi的操作模式:

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

编辑模式

如何进入编辑模式:

aappend         由光标之后加入资料。

A                   由该行之末加入资料。

i                    insert)由光标之前加入资料。

I                    由该行之首加入资料。

oopen             新增一行于该行之下以供输入资料。

O                          新增一行于该行之上以供输入资料。

如何离开编辑模式:

ESC]结束编辑模式。

命令模式

光标的移动:

h            向左移一个字符。

j             向上移一个字符。

k            向下移一个字符。

l             向右移一个字符。

0            移至该行之首。

$            移至该行之末。

^             移至该行的第一个字符处。

H            移至屏幕的第一列。

M           移至屏幕的中间那列。

L            移至屏幕的最后一列。

G            移至该文件的最后一列。

+            移至下一列的第一个字符处。

-             移至上一列的第一个字符处。

 (            移至该句之首。

)             移至该句之末。

{             移至该段落之首。

}             移至该段落之末。

nG          移至该文件的第n列。

n+          移至光标所在位置之后的第n列。

n-           移至光标所在位置之前的第n列。

会显示该行的行号、文件名称、文件中最末行的行号、光标

所在行号占总行号的百分比。

句子(sentence)在vi中是指以[!]、[.]或[?]结束的一串字。

段落(paragraph)在vi中是指以空白行隔开的文字。

屏幕的移动:

              屏幕往下卷一页。

      屏幕往上卷一页。

      屏幕往下卷半页。

      屏幕往上卷半页。

      屏幕往下卷一行。

      屏幕往上卷一行。

删除与修改:

x            删除光标所在处字符。

X            删除光标所在之前一字符。

dd           删除光标所在该行。

r             用接于此指令之后的字符取代光标所在字符。

R            进入取代状态,直到[ESC]为止。

s            删除光标所在的字符,并进入输入模式直到[ESC]。

S            删除光标所在的该行资料,并进入输入模式直到[ESC]。

移动与复制:

利用deleteput指令可完成资料移动的目的。

利用yankput指令可完成资料复制的目的。

利用yankdelete可将指定的资料复制到内存缓冲区,而通过 put 指令可将缓冲区内的资料复制到屏幕上。

指令重复:

在命令模式中,可在指令前面加入一数字n,则此指令动作会重复执行n次。

取消前一动作(Undo):

u            恢复最后一个指令之前的结果。

U            恢复光标该行的所有改变。

查找:

vi中可查找某一字符串,使光标移至该处。

/字符串   往光标之后寻找该字符串。

?字符串   字符串往光标之前寻找该字符串。

n            往下继续寻找下一个相同的字符串。

N            往上继续寻找下一个相同的字符串。

资料的连接:

J             句子的连接。将光标所在的下一行连接至光标该行的后面。

若某行资料太长亦可将其分成两行,只要将光标移至分开点,进入输入模式(可利用 ai等指令)再按[Enter]即可。

环境的设定:

set nu  设定资料的行号。

set nonu     取消行号设定。

set ai   自动内缩。

set noai      取消自动内缩。

-300自动内缩(automatic indentation),在编辑文件或程序时,有时会遇到需要内缩的状况,“:set ai”即提供自动内缩的功能。

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行之后。

字符串搜寻与取代:

ssubstitute  指令可查找某行列范围。

gglobal)指令则可查找整个编辑缓冲区的资料。

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”载入下一个文件。

阅读(1081) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~