一篇很好的vi教程一个人的世界.docx
- 文档编号:27672802
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:27
- 大小:29.50KB
一篇很好的vi教程一个人的世界.docx
《一篇很好的vi教程一个人的世界.docx》由会员分享,可在线阅读,更多相关《一篇很好的vi教程一个人的世界.docx(27页珍藏版)》请在冰豆网上搜索。
一篇很好的vi教程一个人的世界
一篇很好的vi教程_一个人的世界
一篇很好的vi教程
2008-03-1416:
35vi命令常见问题解答作者:
译者Elale[vi-faq中文版]0.0-引言--我怎样用这个FAQ这个文档分为了几个部分.首先,第0节和第1节介绍了什么是vi;第2节则收录了很多新
学者的问题,一些对vi没有很多经验的人也经常问这些问题.这里面包括诸如“命令模式和插入
模式之间的区别”,以及“我怎样拷贝和粘贴”之类的问题.第3节是面向vi的中级用户的,它从
问题“我如何查找和替换”开始,逐步深入,直到对vi里面的宏(Macro)的用法讨论为止.第3
节还包括了一个vi的快速参考,有一个规范的vi命令列表.再下面,是一个有关“:
set”命令的我们已经在一个运行SunOS和UCB版本vi的机器上验证了快速参考.除了SunOS带的vi外,
每个命令都可以在系统V和UCB版本vi运行,但是我个人并没有验证这一点.除非我们在文档中指明,缺省我们假定你处在命令模式下.我们还尝试保留尽可能多的术语,因为在原始的vi文档中使用了这些术语,尽管我可能
忘了它的本来含义.0.1-索引第一个文件:
0.0-引言--我怎样用这个FAQ?
0.1-索引
0.2-我可以散发这个FAQ吗?
0.3-你能为这个FAQ做什么?
1.0-什么是vi?
1.1-关于vi有什么重大的交易吗?
为什么大家都用它?
更进一步说,为什么我要用它?
1.2-噢!
这听起来不错!
有没有理由不用vi?
1.3-vi能在多少不同的操作系统下面运行?
1.4-好吧,你说服了我.我决定开始使用vi.我该从哪儿开始?
1.5-vi有其他一些可用的变种吗?
2.0-vi入门
2.1-有什么游戏帮助我们学习vi吗?
2.2-命令模式和插入模式有什么区别?
2.3-等等,我的键盘没有键,我该怎么办?
2.4-那些~s是什么东西?
2.5-我无法习惯用hjkl,你有什么建议吗?
2.6-我如何才能不存盘就退出?
2.7-我怎样插入一个文件?
2.8-我怎样查找文本?
2.9-我怎样搜索一个控制序列?
2.10-我怎样重新格式化文本?
2.11-我怎样复制文本?
2.12-啊!
我刚才敲了一个dG,然后我的论文就没有了!
我该怎么办?
(或者,我刚才犯了个错误,我该怎么办?
)
2.13-我正在写我的论文,被告知我必须将每一节都放在不同的文件里,我该怎么办?
2.14-所有的:
命令都是怎样处理的?
3.0-怎样查找和替换?
3.1-我怎样在vi中运行一个程序?
3.2-啊!
我正在写我的论文,系统崩溃了!
怎么办?
3.3-有没有使vi对程序员更友好的窍门?
3.4-宏--我怎样写宏?
3.5-我怎样将一个功能键定义成一个宏?
3.6-有没有办法缩写文本?
3.7-我怎样在当前文档中做拼写检查?
3.8-我手头有一个硬拷贝的终端,我还能用vi吗?
3.9-好了,是不是处在开放模式下的原因呀?
!
但是我现在没有用硬拷贝终端,它还是在
开放模式呀?
第二个文件:
4.0-vi档案的在线帮助在哪儿?
5.0-好玩的vi诀窍,无聊的宏
5.1-好玩的vi诀窍
5.2-好玩的宏
6.0-依字母顺序的vi快速参考
6.1-命令模式的输入选项(:
命令)
6.2-设置选项(set)
7.0-建立.exrc文件
7.1-.exrc文件的样本
8.0-vi的漏洞
9.0-术语表
10.0-关于vi的参考书目0.2-我可以散发这个FAQ吗?
可以!
只要你没有对它做任何修改,或者用它来赚钱.0.3-你能为这个FAQ做什么?
首先,把你发现的错误告诉我.如果你有什么建议我们也很欢迎.你认为还不清楚的地方
告诉我们,我们同样欢迎.
还有,使用vi!
(Spreadtheword)我很抱歉我无法将所有对这个FAQ有贡献的人都列出
来,因为许许多多的人都给过我建议和帮助,如果我将他们都列出来的话,那么恐怕这张贡献
者的清单将和这个文档本身一样长了.1.0-什么是vi?
vi是个可视化的编辑器(vi就意味着可视化--VIsual).那么,什么是可视化的编辑器呢?
(相对于非可视化的编辑器来说)?
可视化的编辑器就是可以让你在编辑文本的时候看到它们.
今天,这听起来似乎非常普通,反之,非可视化的编辑器似乎很奇怪.非可视化的编辑器的例子
可以举出不少:
如ed,sed和edlin(直到相当近的一段时间内,它是DOS自带的最后一个编辑器)
等.
vi是威廉.侨伊写的,作为BSDUNIX的一部分.后来AT&T也开始用vi,于是标准UNIX也开始
用vi了.1.1-关于vi有什么重大的交易吗?
为什么大家都用它?
更进一步说,为什么我要用它?
vi是UNIX下面的缺省编辑器,因此几乎近来所有的UNIX都捆绑了vi(近来是指1984年左右).
这意味着无论何时你跨平台使用某种UNIX,你都知道在你指尖下面有一个强力的编辑器.为什么
不是别的呢?
vi是个强大的编辑器.同样,一旦你了解了vi,你就能很快的编辑你的文件,因为它
非常能节省你的敲键次数.由于它在插入和命令两种情况下使用不同的模式,它比大多数的不
基于这种模式的编辑器要快.而且,vi非常小(我机器上面的版本只有200K).还有,vi几乎能做
任何事,只要你知道如何使它做你想做的事.1.2-噢!
这听起来不错!
有没有理由不用vi?
有.有一个非常好的理由:
vi稍微有些难学,如果你开始学的话,vi又慢又让人痛苦,
当然,一旦你学会了,vi就快多了.但是学习的过程很慢.有人曾经问我,如果vi是个比较
易学的编辑器,它是否直观(intuitive)呢?
我一般这样回答:
"是的,我们有些人是这样认为.
但是大多数人认为我们疯了."1.3-vi能在多少不同的操作系统下面运行?
UNIX.就是它.尽管如此,还是有很多vi的变种运行在不同的操作系统上.我就在以下一些
操作系统上用过vi:
UNIX,DOS,OS/2,MACSYSTEM7.(后面有一个有关细节的列表)1.4-好吧,你说服了我.我决定开始使用vi.我该从哪儿开始?
好吧,狡猾的家伙.关于vi有很多很好的书:
大多数讲UNIX的书至少有一章给了vi,而且
有不少是专门讲vi的书.我没有什么偏爱.所以你最好是问问你们那儿的vi高手们他们是从
哪儿学来的.还有,到处试.用vi打开一个不重要的文档(你的论文不象是个学vi的好实验品),
然后再到处试.我无法想象有人学习vi却不花相当多的时间去到处试试.记住:
如果你有些
地方不明白了,只要敲两次键,你就又回到命令模式下了.
我要提到的一点是,我想在这里提比较合适,就是如果要成为系统管理员或者其他对UNIX配置
做什么修改的话,最好是学学ed或者ex,因为有些版本的UNIX没有把vi放在根分区里面,这样你
就可能无计可施了.ed是个不错的选择.1.5-vi有其他一些可用的变种吗?
只能列出一部分:
STvi(STevie),elvis,vile,vim,和nvi,xvi.
elvis适用于:
Amiga,DOS,OS/2,Unix,VMS,Atari.
STevie适用于:
AtariST,DOS,Unix,MacSystem7.
MacSystem7可以在很多info-mac的镜象站点获取,在/info-mac/text下.
(例如ftp.hawaii.edu)
nvi是将和BSD4.4捆绑在一起的vi.
vim适用于:
Amiga,DOS,MacSystem7,Unix.
Amiga,DOS,和源码可以在以下站点换取:
ftp.fu-berlin.de/misc/editors/vim
MacSystem7可以在很多info-mac的镜象站点获取,在/info-mac/text下.
(例如ftp.hawaii.edu)
vile适用于:
DOS,OS/2,Unix,VMS.
xvi适用于:
DOS,Unix.
vi的变种之间很有很多差异.很多都改进了vi,大多数都可以使用在这个文档
种列出的命令,但是有一些不同的地方.更进一步的细节,你可以参考这些变种
附带的相应的文档.2.0-vi入门
对vi的初学者来说,有些基本的提示.第一,任何时候,手头都要有一份命令摘要.
我们将在后面给出一个快速参考/命令摘要.第二,找一本vi方面的比较好的书.
这个文档不是学vi的最佳途径(最起码现在还不是),我不敢保证这个文档能教会一个
对vi一无所知的人,而很多书已经做到了这一点.但是,我们这里还是给出了不少
提示.对选择书籍来说,有一个标准的原则:
买之前一定要仔细阅读.要了解这本书
对你是否有意义.确信它能在你练习vi的时候有用.和其他的书做个比较--不管怎样,
vi可能让你感到非常莫名其妙,而且你要确信这么一点:
是书让你糊涂,而不是
你低估了学vi的难度.
还有,找一些诸如"学vi"(vilearn),"vi向导"(vitutor)之类的软件来帮助你掌握
vi的基本知识.2.1-有什么游戏帮助我们学习vi吗?
这似乎很无聊,但是事实上UNIX系统里面有不少游戏可以帮助你学习使用vi.这些帮助
主要是一些基本知识.虽然我还不知道有哪个游戏可以帮你学习vi的所有命令,但我
确实知道有一些可以帮助你学习使用hjkl来移动光标.NetHack,一个类Rogue的游戏,
就对这非常有帮助.而且它是一个很大的游戏,能玩很长一段时间.我没有贬低其他游戏
的意思,这些游戏是:
rogue,moria,omega,worm,snake.2.2-命令模式和插入模式有什么区别?
vi将命令模式和插入模式区分开来,这经常被认为是vi的一个大问题,但往往这也被认为是
vi的优势所在.理解其中的区别是掌握vi的关键.vi启动时,开始处于命令模式;在这种模式
下,我们可以在文件中到处移动,改变文本的某个特定区域,剪切,复制和粘贴文本,还有更
多.插入模式是指用户可以真正插入文本.换句话说,命令模式是用来在文件中移动,而插入
模式是用来在文件中键入文本.
有些命令,例如:
a,i,c,C,O,o和其他一些可以从命令模式切换到插入模式.
键或者^C(CRTL+C)可以脱离插入模式而返回到命令模式.
你要适应这种差别.它使得vi区别于其他的编辑器.它也使你能在你的手不离开标准
键盘做很多事情.2.3-等等,我的键盘没有键,我该怎么办?
试试敲^[(CTRL+[).如果你的键盘有一个键,再试试它.如果还不行,再试试^3.2.4-那些~s是什么东西?
它们仅仅是用来让你知道你的文档末尾在哪儿.实际上它们并不在你的文档里面,所以
你用不着担心它们.2.5-我无法习惯用hjkl,你有什么建议吗?
首先,如果你的终端设置正确而且你连接的也没有问题的话,你可以使用箭头键.但是,
如果你认为你要经常使用vi,那么最好是习惯使用hjkl,因为它们敲起来更快.而且,
有时候连接出问题了,使得ESC序列都可能丢失了.(这样你可能就无法使用箭头键了--译注)2.6-我如何才能不存盘就退出?
:
q!
可以做到这一点.如果vi看起来冻住了,确信你没有错敲了个^S.敲^Q可以解开^S.2.7-我怎样插入一个文件?
:
r
例如,要插入文件/etc/motd,可以敲:
r/etc/motd.
这将把文件插入到光标处.如果你在r前面指定了一个数字,那么这条命令将把文件插入
到那个位置.2.8-我怎样查找文本?
/将向前查找,?
将向后查找.?
?
或者//将重复上次查找.在UNIX下,这已经
是个可爱的标准用法了.而且,在vi中,n将查找文本下一次的出现位置.N重复上次查找,
不过逆转了查找的方向.在查找中可以使用规范式.2.9-我怎样搜索一个控制序列?
/^V^
^V会告诉vi照字面理解下一个字符,不要把它看作是一条命令.2.10-我怎样重新格式化文本?
如果你的计算机有一个名叫fmt的程序,你要做的仅仅是在命令模式下面敲!
}fmt(记住,
不要在前面加icon_smile.gif.这可以重新格式化你的文件,从光标所在的位置一直到当前段落的结尾.
如果你的机器里面没有fmt这个程序,你就得去找个类似的软件了(我记得在公共域里面有
不少这样的程序,但是我对此了解不多)2.11-我怎样复制文本?
这有点复杂.把这节拿出来,多看几遍;还有,一定要多做实验.
"yy可以把一行文本拷贝到寄存器中(这里的寄存器是vi的术语,指可以存放剪切和
拷贝下来的东西的地方),里面的字母必须是a到z之间的一个."dd可以把一行
剪切下来放到寄存器里面.你可以在yy或者dd前面用数字指明要拷贝或者剪切的行数.如果
中的字母是大写的话,意味着把文本插入到寄存器中已有的文本之前.
"p把文本插入到光标之后,"P把文本插入到光标之前.如果寄存器中含有某
一行的开头或结尾,这一行将会被放到另一合适的行上.Y是yy的快捷方式.还有,y$,yH,
yM,等等,都是可以用的.d命令也是一样的.如果要快速的剪切和粘贴,你就无须指定寄存器
了.如果这样的话,你就不能往寄存器里面添加文本了.而且只要有一个删除命令的话,寄存器
中的东西就没有了(包括x命令).
举例来说,如果要移动上一段的话,你可以把光标移到段落的开头,敲"a13dd,再把光标移到
你想要放文本的地方,敲"ap,就可以把那段文本放到光标所在的行后面.
现在,大概你想要剪切和粘贴文本到不是行末尾的区域去.我们来看如何做到这一点:
我们
可以使用m命令来标记一个区域,这个字母可以和剪切/粘贴寄存器的字母相同,因为
它们是保存在内存中的不同位置.然后,敲"`[yy或者dd],这里的寄存器就是
要保存文本的那个寄存器,是用来标记的,yy和dd是你的操作.2.12-啊!
我刚才敲了一个dG,然后我的论文就没有了!
我该怎么办?
(或者,我刚才犯了个错误,我该怎么办?
)
u可以撤消你刚才的操作.U可以撤消你对当前行的修改(当然,一行对于一篇论文来说当然
很不够了).:
e!
可以不保存修改而重新把你的文件调进来.还有,你删除的文本都保存在从
0到9编号的寄存器里.所以,"p就可以把上第n次的删除文本粘贴出来.你可以按如下的
方法迅速地查看所有删除的文本.先试一个,不对的话,敲u,再试下一个.(为加速这个过程,
这时vi中的.命令和通常的用法不一样了.它不是重复上次操作,而是试下一个寄存器,这样
你要做的无非就是:
"1pu.u.,直到你撤消了你想撤消的删除操作)2.13-我正在写我的论文,被告知我必须将每一节都放在不同的文件里,我该怎么办?
:
[m],[n]w可以将从第m行到第n行之间的文本保存到所指定的文件中.
这种行序号方法几乎在所有的:
命令下都可以使用.如果你用命令:
[m],[n]w>>,
这些文本将添加到文件的后面.2.14-所有的:
命令都是怎样处理的?
:
后面的命令都是从ex编辑器里面过来的.这就给vi加入了很多灵活性,也使vi功能更强
大.例如,有很多的方法可以用来查找和替换,它们有很多的类似地方(事实上,它们在某种
意义上说都是一样的)3.0-怎样查找和替换?
有很多方法.最简单的是:
:
s/old/new/g,但是,这仅对当前行起作用...,所以,我们用
:
%s/old/new/g,更一般的,我们还可以用
:
[范围]s/old/new/[cg],这里,[范围]是任意的行范围,包括行号,$(文件末尾),.(当前行),
%(当前文件),或者两个行号之间加个破折号(或者可以这样:
.,+5,这表示下面5行).[cgi]是
c,g,i中间的一个或者什么也没有.c告诉vi每次替换的时候要给提示,g是说对所有一行中出现
的地方都做替换.i则是指在查找时不区分大小写.如果最后一个斜杠(/)后面没有东西的话,那
么vi只替换在行中第一次匹配的地方.
我比较喜欢这样做:
:
g/foobar/s/bar/baz/g,这个命令首先搜寻foobar,然后把它变成foobaz.它没有改变
jailbars,而其他的一些命令可能会改变jailbars.这是我的方法,但是可能比较难记.
当然,你还可以在查找的的时候使用正规式,以及在替换文本的时候使用其他一些命令.如果
你在正规式里用(和)来剥离一个序列的话,你会发现你可以做很多好玩的事情.例如:
:
g/(foo)(bar)/s/2/1baz/g将foobar替换成foobaz
还有一些特殊的序列:
&所有查找时匹配到的东西
[1-9]1到9号用(和)括起来的东西
u下一个字符将被变成大写.
U以后的字符都变成大写,直到遇到e或E
l下一个字符将被变成小写.
L以后的字符都变成大写,直到遇到e或E
[Ee]更改大小写的选择区域的终点3.1-我怎样在vi中运行一个程序?
:
!
命令可以在vi中运行程序.:
sh会启动一个交互式的外壳(SHELL).在这个外壳
里面,如果你愿意,你还可以再次运行vi.当你在编辑Makefiles和配置文件来编译
某个程序的时候,这可能比较有用.这比:
e优越之处在于它无须保存文件,而且如果
你退出外壳的时候,vi还回到原来的地方.(当然,我还是建议你先保存一下文件)3.2-啊!
我正在写我的论文,系统崩溃了!
怎么办?
不要怕!
你会收到一封电子邮件,里面就是你的论文.敲入vi-r
(这个文件名就是系统崩溃时你正在编辑的文件)你就可以恢复出你的论文来.只敲
vi-r将把所有可能恢复的文件都列出来.3.3-有没有使vi对程序员更友好的窍门?
:
setai可以让vi自动对齐.
:
setsw=#,#是移动的宽度(shiftwidth),或者说TAB键的宽度(tabwidth);你可以
用>命令来左移或右移某一行.还有,你可以使用%来将{,(或[等符号
括起来的文本都左移或右移;这时候,你必须把光标放在这些符号({,(或[)上面.
:
setsm会在你敲},]或)显示出对应匹配的{,[或(来.
:
setlisp会对lisp编程有些帮助.()被移到s表达式(s-expressions)外面,如果
原子(atoms)没有停止则{}将被移走.3.4-宏--我怎样写宏?
:
map,其中最多10个字符,最多100个字符.以后,如果
你敲了,vi就会用来取代它.所有的宏都是在命令模式下开始的,但是可以
在你想在的模式下终止.记住,在你想用的控制字符前面加上^V.
:
unmap将删除这个宏.:
map!
使得将插入到文档
中去.3.5-我怎样将一个功能键定义成一个宏?
如果是#n,n是0-9之间的一个数,那么这个宏就映射成某一个功能键了.(你
可以试一下F1-F10之间的键--译者)3.6-有没有办法缩写文本?
当然了.这可是vi呀,它能做任何事情!
:
abemailellidz@midway.uchicago.edu可以在你敲完email后,把那个没有缩写
的文本插入到文件中.:
unaemail取消缩写.3.7-我怎样在当前文档中做拼写检查?
这儿有一个宏可以做到这一点.这些应该放在你的.exrc文件中(后面我们将对.exrc
进一步讨论).它是一个相当简单的宏.它仅仅是调用ispell来处理当前文件.当然,你
的系统里面一定得有ispell这个程序.使用它的时候,只需要敲个V键就行了(因为vi并
没有用V,所以V是一个比较合适的键)mapV:
w^M:
!
ispell%^M:
e!
^M^M第二个^M使你在拼写检查完之后无须敲回车就可以到vi中.
(译注,在我的系统里,没有ispell,只有spell,我用它替换了ispell,工作的不错;还有,
^M不是两个字符,而是一个字符,通过^V^M敲进去的;另外,我个人认为第二个^M还是不要
的好,因为直接回到vi后你就无法看到拼写检查的结果了)3.8-我手头有一个硬拷贝的终端,我还能用vi吗?
好了,好了.我并认为有人会真的问这个问题.这个问题太偏了,我们大可不必理
它.(而且,它回答了一个非常普通的问题)
vi启动的时候处于一种特殊的模式下面,叫做"开放模式";在这种状态下,事情或多或少
的有些不同.删除的字符在你面前显示成一些',vi会认为你的终端窗口只有一行.^r
可以把当前行重新输出.z则把当前行周围的窗口重画一遍.3.9-好了,是不是处在开放模式下的原因呀?
!
但是我现在没有用硬拷贝终端,它还是在开放
模式呀?
这儿的问题就是vi没有认出你用的终端的类型.于是它假定你有的是个最烂的终端,
所以它决定依然处在开放模式下.这似乎没什么用处.因为没有多少人喜欢开放模式,但是开放
模式还是需要知道你的终端的一些最起码的信息的.
现在,我们来看如何解决这个问题.我们有可能把它分成几种特殊的情形,但是,一般情况下,
这并没有用处.如果你直到你的终端的类型,你可以在UNIX提示符下面设置终端类型(在CSH
及其变种下面,使用命令setenvTERM;在SH及其变种下面,使用命令TERM=;
exportTERM)
最好你能把上面的命令写在.profile文件或者.cshrc文件里面,这样你一登录它就自动地给
你设置好了.(当然,你应该知道如何使用ed,或者你能在UNIX提示符下面设置好终端类型以便能
使用vi,这样你才有可能去编辑这些文件)
如果你确实不知道你地终端类型,试一试vt100.现在大多数地终端或者终端仿真器都能仿真
vt100.如果这还不能生效的话,你只好去找个高手来帮你了.4.0-vi档案的在线帮助在哪儿?
有一个vi的FAQ,其中列出了vi档案的所有在线文件.同时它还列出了这些文档
的镜象站点.最主要的一个地址是alf.uib.no,但是这些文档在很多很多地地方
都保存着.vi-archivefaq把它们都给列出来了.你在下载这些文件之前一定要
核对一下这个FAQ.因为很有可能有一个站点比去挪威的站点更近更快些.
一个镜象站点是cs.uwp.edu/pub/vi,另一个是monu6.cc.monash.edu.au/pub/Vi,
这些站点上有很多有关vi的文件,还有一些vi的变种版本;当然,UCB版本的vi是
肯定有的,还有许多的宏.5.0-好玩的vi诀窍,好玩的宏
这一节主要讲述一些无聊的诀窍和一些无聊的宏.事实上,任何vi的诀窍和宏我们
都欢迎,只要它们不是过分冗长.如果有人向我建议而我也认为确实值得加的话,
我会考虑加进去的.5.1-好玩的vi诀窍
xp删除光标下的字符,再把粘贴到后面去.换句话说,它交换了当前两个字符
的位置.
ddp和xp类似,不过是交换两行的位置.
uu撤消和重复上次所做的修改.(这可以使你不改变什么东西就可以到你上次
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一篇 很好 vi 教程 一个人 世界
![提示](https://static.bdocx.com/images/bang_tan.gif)