Vi使用与操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Vi使用与操作
在介绍如何使用vi之前,了解vi具有两种基本模式是很重要。

这两种基本模式为输入模式和指令模式。

输入模式为输入命令,文本就会显示在屏幕上;而指令模式为输入命令就执行命令,而不会显示文字。

理解指令模式最简单方式就是想象平时剪切、复制以及粘贴数据时所发生的情况。

在默认状态下,vi以指令模式下启动,因此你输入命令时不会显示文字,除非你输入命令切换至输入模式。

大多数vi命令不会屏幕上显示任何东西,你只需要知道它们的工作过程就足够了。

使用[Esc]键可以在输入模式和指令模式之间切换。

如果你已经处于指令模式中,使用[Esc]将会告诉vi,你已经输入命令并将要执行命令。

如果你没有输入任何命令,在指令模式中按下[Esc]键将中断操作。

现在我已经介绍了vi的基本操作,你可以动手试用一下。

首先,在你的工作站打开一个终端窗口,你只需在$提示中输入vi然后按回车键就可以启动vi编辑器。

接着,你将看到弹出一个页面左下角有一个~符号的空白文件。

这一符号不容易看到,但是你看到的这些~符号正是表示处于文件的底部。

当对文件保存之后,这些符号就不会显示出来。

若要编辑某个文件或者为一空白文件命名,你可输入vi filename。

vi filename可以是一个已经存在的文件名或者是一个给新文件指定的名称。

通用输入模式
vi编辑器的使用
格式: vi 文件名
各个工作模式的互相切换:
----从命令模式切换到插入模式按:i键
按:s键
按:insert键
按:a键
按:o键
----从插入模式切换到命令模式按:esc键
----从命令模式切换到命令行模式按:shift+":"
----从插入模式切换到命令行模式按:esc ----> shift + :
----从命令行模式切换到插入模式按:esc ----> 按插入指定i
3.>命令模式下常用命令:
x---删除当前光标所在字符
dd--删除当前光标所在整行
u---恢复删除(按一次u恢复一次) yy--复制整行
p---粘贴/放置
r---修改光标所在字符
R---进入替换状态
s---删除光标所在字符,并进入编辑模式
S----删除光标所在行,并进入编辑模式
4.>命令行模式常用命令:
:q--不保存退出(如果对文件进行了修改而没有保存,会警告,且无法离开。

)
:q!-强制退出(如果对文件进行了修改而没有保存,不会警告而退出。

)
:wq-保存退出
:wq!--对只读文件强行保存退出
:w filename--另存为某文件名
:w--保存文件
ZZ---等价于:wq[b:21dbfe2917][/b:21dbfe2917]
------------------------------------------------------------------------------------------
VI高级命令集锦
来源:ChinaITLab
2002-12-4 2:26:00
最后由jazy编辑
鉴于大家在使用VI 的
以下关于VI编程的高级技巧
得体会对这些经验进行进一
时候有一定的陌生,在这里借花
,希望对大家学习UNIX有所帮助
步的扩展。

献佛,从兄弟版[SHELL]中整理出
,并希望大家能结合使用HPUX的心
1.交换两个字符位置
xp
2.上下两行调换
ddp
3.把文件内容反转
:g/^/m0/ (未通过)
4.上下两行合并
J
5.删除所有行
dG
6.从当前位置删除到行尾
d$
7.从当前位置复制到行尾
y$ 如果要粘贴到其他地方 p 就可以了
由于vi 是建立在 EX 上的所以当键入 : 时就来到了 EX 命令状态8.
:ab string strings
例如 ":ab usa United States of America" ,
当你在文见里插入 usa 时
United States of America 就蹦出来了
9.
:map keys new_seq
定义你当前键盘命令
10.
:set [all]
vi or ex 的编辑状态
如显示每行 :set nu
11.
在命令状
态下,nyy表
贴在光标处的
示拷贝从光标行起的下n行内容
,p表示paste,可刚复制的内容粘
下面。

12.
单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S
13.
:%s/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串
14.光标控制
k:上移 nk 上移n行
j:下移 nj 下移n行
将光标移到第n行,按下 mk
将光标移到第m行,按下 "ay'k
即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等
这样就可以将你常用的需要复用的内容粘贴到不同的寄存器中以备用
想粘贴到某处,直接将

光标移到某地,按下 "ap 即可
,以此类推,b,c........寄存器
在当前屏幕中
H 跳到第一行
M 跳到中间一行
L 跳到最后一行
15.
表8-2 删除命令
删除命令操作
d l 删除当前字符(与x命令功能相同)
d 0 删除到某一行的开始位置
d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)
d w 删除到某个单词的结尾位置
d 3 w 删除到第三个单词的结尾位置
d b 删除到某个单词的开始位置
d W 删除到某个以空格作为分隔符的单词的结尾位置
d B 删除到某个以空格作为分隔符的单词的开始位置
d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置
d)删除到某个语句的结尾位置
d 4)删除到第四个语句的结尾位置
d(删除到某个语句的开始位置
d } 删除到某个段落的结尾位置
d { 删除到某个段落的开始位置
d 7 { 删除到当前段落起始位置之前的第7个段落位置
d d 删除当前行
d /t
e x t 删除从文本中出现“ t
该字样所出现的
e x t”中所指定字样的位置,一直向前直到下一个
位置(但不包括该字样)之间的内容
d fc 删除从文本中出现字符“c”的

位置,一直向前直到下一个该字符所出现的位置(包
该字符)之间的内容
d tc 删除当前行直到下一个字符“ c”所出现位置之间的内容D 删除到某一行的结尾
d $ 删除到某一行的结尾
5 d d 删除从当前行所开始的5行内容
d L 删除直到屏幕上最后一行的内容
d H 删除直到屏幕上第一行的内容
d G 删除直到工作缓存区结尾的内容
d 1 G 删除直到工作缓存区开始的内容
修改命令操作
c l 更改当前字符
c w 修改到某个单词的结尾位置
c 3 w 修改到第三个单词的结尾位置
c b 修改到某个单词的开始位置
c W 修改到某个以空格作为分隔符的单词的结尾位置
c B 修改到某个以空格作为分隔符的单词的开始位置
c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置c 0 修改到某行的结尾位置
c)修改到某个语句的结尾位置
c 4)修改到第四个语句的结尾位置
c(修改
到某个语句的开始位置
c } 修改到某个段落的结尾位置
c { 修改到某个段落的开始位置
c 7 { 修改到当前段落起始位置之前的第7个段落位置
c tc 修改当前行直到下一个字符c所出现位置之间的内容C 修改到某一行的结尾
c c 修改当前行
5 c c 修改从当前行所开始的5行内容
.重复上一次修改!
表8-4 替换命令
替换命令操作
s 将当前字符替换为一个或多个字符
S 将当前行替换为一个或多个字符
5 s 将从当前字符开始的5个字符替换为一个或多个字符
vi替换使用规则:
:g/s1/s/s2/s3/g
第一个g表示对每一个
s2都用s3替换
包括s1的行都进行替换,第二个
g表示对每一行包括s1的行所有的
s表示替换,s2是要被替换的字符串
替换字符串
,他可以和s1相同(如果相同的话用//代替),s3是
16.
fx
往右移动到 x 字符上
Fx
往左移动到 x 字符上
tx
往右移动到 x 字符前
Tx
往左移动到 x 字符后
(注意:以上四个命令中,其中x是键入的字符);
分号,配合 f 和 t 使用,重复一次
,
逗号,配合 f 和 t 使用
,反方向重复一次
17. vi 环境选项 Solaris ksh
noautoindent
nomodelines
noshowmode
autoprint
nonumber
noslowopen
noautowrite
nonovice
tabstop=8
nobeautify nooptimi
ze taglength=0
directory=/var/tmp paragrap
s
hs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tag
noedcompatible
prompt
tagstack
noerrorbells
noreadonly
term=vt100
noexrc redraw
noterse
flash
remap
timeout
hardtabs=8
report=5
ttytype=vt100
noignorecase scroll=1
1 warn
nolisp
sections=NHSHH HUuhsh+c
window=23
nolist shell=/b
in/ksh wrapscan
magic
shiftwidth=8
wrapmargin=0
mesg
noshowmatch
nowriteany
For C-Shell:
setenv EXINIT "set nu"
For Bourne or Korn Shell:
EXINIT="set nu"; export EXINIT
For Korn Shell Only (alternate m
ethod):
typeset -x EXINIT="set nu"
在 .profile 里设置 vi 的环境选项 , 以上均测试过
18.标记文本
mchar 用字母char标记当前光标的位置
`char 移至char所标记处
'char 移至char标记所在行的开头处
" 移至当前行上一次所在位置(在光标移动之后)――一个双引号'' 移至当
引号
前行上第一次所在位置的行的开
头处(在光标移动之后)――两个单
19.
同时vi多个文件时,CTRL-SHIFT-6回
切换。

到上一个文件,在本次vi的文件和上次vi的文件之间
但是我发现一个BUG:在用CTRL-SHIF
时,
T-6切换到上一个文件后,用:args查看多文件vi状态
屏幕底部仍然显示目前vi的是刚才的文件。

(在HP-UX,Solaris,AIX上通过)
也可以使用:
:e#
进行切换
20.
sco 下VI 要在文本前同样的字符加用
%s/^/要加的内容/g 要在文本后同样的字符加
%s/$/要加的内容/g
21.
如何去掉文本中的 ^M
unix语句实现。

硬回车?不必用binary传回去再
ascii传回来的方式,用shell或者
cat filename |tr -d '\015' >newfile
不同的unix系统还存在一些其他不同的命令,如:doscp
sed 也可以实现这个功能.
dos2unix filename filename2
反之
unix2dos filename filename2
在vi 中用:$s/^M//g
^是crtl-V crtl-M
22.如何在“unix命令行”下将一个文件的某字符串用另一个串换掉
sed 's/string1/string2/gp' file1 > file2
23.将/etc/hosts下所有的地址都ping 2次
1 #/usr/bin/sh
2 #grad /etc/hos
ts and ping each address
3 cat /etc/hosts|grep -v '^#
' | while read LINE
4 do
5 ADDR=`awk '{print $1}'`
6 for MACHINE in $ADDR
7 do
8 ping $MACHINE -n 2
9 done
10 done
-----------------------------------------------------------------------------------------
任何用户最常做的事要数创建和编辑文件,包括文档、报告和文字,vi(Visual Editor)是一个有效而相对简单的全荧幕编辑,使用vi,只要记著少量基本指令,就可以开始起步,再学习其他更复杂的指令,而系统管理员则使用vi管理和维护系统。

vi是包含在SCO System V作业系统中的全荧幕编辑,其实,vi不
独存在於SCO UNIX内,而是UNIX内相当普及的文件编辑。

开启文件
无论是开启新档或修改旧文件,都可以使用vi,所需指令为:
$ vi filemane
如果文件是新的,就会在荧幕底部看到一个信息,告诉用户正在
创建新文件。

如果文件早已存在,vi则会显示文件的首廿四行,
用户可再用游标(cursor)移动文件。

This is what vi looks like.


上面是一个经vi开启的模拟文件,一行开始处的波折号(~)表
示文件的结尾。

指令态与插入态
vi使用了两种状态,一是指令态(Command Mode),另一是插入
态(Insert Mode)。

当vi处於指令态时,打入的内容会视作指令
来解释;另一方面,当vi处於插入态时,就可以打入正文(text)给文件。

大多数vi指令是单字符,由插入态改变为指令态,指〈Esc〉键;
而由命令态转为插入态,则可以使用下面的插入令,直接打入,
无需再按〈Return〉键。

—指令i在游标处插入正文
—指令I在一行开始处插入正文
—指令a在游标後追加正文
—指令A在行尾追加正文
—指令o在游标下面新开一行
—指令O在游标上面新开一行
要记著一点,在插入态处,不能打入指令,必需先按〈Esc〉键,返回指令态。

假若户不知身处何态,也可以按〈Esc〉键,不管处於何态,都会返回指令态。

存档及退出
在修改文件时,如何存档及退出指定文件都非常重要。

在vi内,行使存档或退出的指令时,要先按冒号(:),改变为指令态,用户就可以看见在荧幕左下方,出现冒号(:),显示vi已经改为指令态,可以进行存档或退出等工作。

下面就是一些这方面常用的指令。

:q!放弃任何改动而退出vi,也就是强行退出
:w存档
:wq存档并退出vi
:x与wq的工作一样
:zz与wq的工作一样删除正文
删除或修改正文都是利用插入态,故此,下面所提及的指令只需在插入态内,直接选入指令即行。

—x删除游标处字符(Character)
—nx删除游标处後n个字符
—nX删除游标处前n个字符
—ndw删除游标处下n个单词(word)
—dd删除整行
—d$或D删除由游标至该行最末
—u恢复前一次所做的删除
修改正文
当使用vi修改正文,加减字符时,就会采用另一组在插入态操作的指令。

—r char由char代替游标处的字符
—Rtext〈Esc〉由text代替游标处的字符
—cwtext〈Esc〉由text取代游标处的单词
—Ctext〈Esc〉由text取代游标处至该行结尾处
—cc使整行空白,但保留游标位置,让你开始打入
—如删除指令一样,在指令前打入的数,表示执行该指令多少次。

正文模式检索
要检索文件,必需在指令态下进行。

所谓「
模式」,就是一个特
定字符串,其中可含空格符。

—/str〈Return〉向前搜寻str直至文件结尾处
—?str〈Return〉往後搜寻str直至文件开首处
—n同一方向上重复检索
—N相反方向上重复检索
—vi缠绕整个文件,不断检索,直至找到与模式相匹配的下一个
出现。

其他
如果要在vi执行期间,转到shell执行,使用惊叹号(!)执行系
统指令,例如在vi期间,列出当前目录内容,可以打入
:!If
另一方面,用户可以在主目录中创建.exrc环境文件,用set打入选项,每次调用vi时,就会读入.exrc中的指令与设置。

下面是.exrc环境文件的实例:
set wrapmarging=8
set showmode
set autoindent
set number。

相关文档
最新文档