📄 00000056.htm
字号:
1.2 - 噢! 这听起来不错! 有没有理由不用vi? <BR> 有. 有一个非常好的理由: vi稍微有些难学, 如果你开始学的话,vi又慢又让人痛苦, <BR>当然,一旦你学会了, vi就快多了. 但是学习的过程很慢. 有人曾经问我, 如果vi是个比较 <BR>易学的编辑器, 它是否直观(intuitive)呢? 我一般这样回答:"是的,我们有些人是这样认为. <BR>但是大多数人认为我们疯了." <BR> <BR>1.3 - vi能在多少不同的操作系统下面运行? <BR> UNIX. 就是它. 尽管如此,还是有很多vi的变种运行在不同的操作系统上. 我就在以下一些 <BR>操作系统上用过vi: UNIX, DOS, OS/2, MAC SYSTEM 7.(后面有一个有关细节的列表) <BR> <BR>1.4 - 好吧, 你说服了我. 我决定开始使用vi. 我该从哪儿开始? <BR> 好吧, 狡猾的家伙. 关于vi有很多很好的书:大多数讲UNIX的书至少有一章给了vi,而且 <BR>有不少是专门讲vi的书.我没有什么偏爱. 所以你最好是问问你们那儿的vi高手们他们是从 <BR>哪儿学来的. 还有,到处试. 用vi打开一个不重要的文档(你的论文不象是个学vi的好实验品), <BR>然后再到处试. 我无法想象有人学习vi却不花相当多的时间去到处试试. 记住:如果你有些 <BR>地方不明白了, 只要敲两次<Esc>键,你就又回到命令模式下了. <BR> 我要提到的一点是,我想在这里提比较合适,就是如果要成为系统管理员或者其他对UNIX配置 <BR>做什么修改的话,最好是学学ed或者ex,因为有些版本的UNIX没有把vi放在根分区里面,这样你 <BR>就可能无计可施了. ed是个不错的选择. <BR> <BR>1.5 - vi有其他一些可用的变种吗? <BR> 只能列出一部分:STvi (STevie), elvis, vile, vim, 和nvi, xvi. <BR> elvis适用于:Amiga, DOS, OS/2, Unix, VMS, Atari. <BR> STevie适用于: Atari ST, DOS, Unix, Mac System 7. <BR> Mac System 7可以在很多info-mac的镜象站点获取,在/info-mac/text下. <BR> (例如ftp.hawaii.edu) <BR> nvi是将和BSD 4.4捆绑在一起的vi. <BR> vim适用于: Amiga, DOS, Mac System 7, Unix. <BR> Amiga, DOS,和源码可以在以下站点换取:ftp.fu-berlin.de /misc/editors/vim <BR> Mac System 7可以在很多info-mac的镜象站点获取,在/info-mac/text下. <BR> (例如ftp.hawaii.edu) <BR> vile适用于: DOS, OS/2, Unix, VMS. <BR> xvi适用于: DOS, Unix. <BR> vi的变种之间很有很多差异.很多都改进了vi,大多数都可以使用在这个文档 <BR>种列出的命令,但是有一些不同的地方.更进一步的细节,你可以参考这些变种 <BR>附带的相应的文档. <BR> <BR>2.0 - vi入门 <BR> 对vi的初学者来说,有些基本的提示.第一,任何时候,手头都要有一份命令摘要. <BR>我们将在后面给出一个快速参考/命令摘要. 第二, 找一本vi方面的比较好的书. <BR>这个文档不是学vi的最佳途径(最起码现在还不是),我不敢保证这个文档能教会一个 <BR>对vi一无所知的人, 而很多书已经做到了这一点. 但是,我们这里还是给出了不少 <BR>提示. 对选择书籍来说,有一个标准的原则:买之前一定要仔细阅读. 要了解这本书 <BR>对你是否有意义.确信它能在你练习vi的时候有用. 和其他的书做个比较 -- 不管怎样, <BR>vi可能让你感到非常莫名其妙, 而且你要确信这么一点:是书让你糊涂,而不是 <BR>你低估了学vi的难度. <BR> 还有, 找一些诸如"学vi"(vilearn),"vi向导"(vitutor)之类的软件来帮助你掌握 <BR>vi的基本知识. <BR> <BR>2.1 - 有什么游戏帮助我们学习vi吗? <BR> 这似乎很无聊, 但是事实上UNIX系统里面有不少游戏可以帮助你学习使用vi.这些帮助 <BR>主要是一些基本知识. 虽然我还不知道有哪个游戏可以帮你学习vi的所有命令, 但我 <BR>确实知道有一些可以帮助你学习使用 hjkl来移动光标. NetHack,一个类Rogue的游戏, <BR>就对这非常有帮助. 而且它是一个很大的游戏,能玩很长一段时间. 我没有贬低其他游戏 <BR>的意思,这些游戏是: rogue, moria, omega, worm, snake. <BR> <BR>2.2 - 命令模式和插入模式有什么区别? <BR> vi将命令模式和插入模式区分开来,这经常被认为是vi的一个大问题,但往往这也被认为是 <BR>vi的优势所在. 理解其中的区别是掌握vi的关键.vi启动时,开始处于命令模式;在这种模式 <BR>下,我们可以在文件中到处移动,改变文本的某个特定区域, 剪切, 复制和粘贴文本,还有更 <BR>多. 插入模式是指用户可以真正插入文本.换句话说,命令模式是用来在文件中移动,而插入 <BR>模式是用来在文件中键入文本. <BR> 有些命令,例如: a, i, c, C, O, o和其他一些可以从命令模式切换到插入模式. <BR> <Esc>键或者^C(CRTL+C)可以脱离插入模式而返回到命令模式. <BR> 你要适应这种差别. 它使得vi区别于其他的编辑器. 它也使你能在你的手不离开标准 <BR>键盘做很多事情. <BR> <BR>2.3 - 等等,我的键盘没有<Esc>键,我该怎么办? <BR> 试试敲 ^[(CTRL+[). 如果你的键盘有一个<Meta>键,再试试它.如果还不行,再试试^3. <BR> <BR>2.4 - 那些~s是什么东西? <BR> 它们仅仅是用来让你知道你的文档末尾在哪儿.实际上它们并不在你的文档里面,所以 <BR>你用不着担心它们. <BR> <BR>2.5 - 我无法习惯用 hjkl, 你有什么建议吗? <BR> 首先,如果你的终端设置正确而且你连接的也没有问题的话,你可以使用箭头键.但是, <BR>如果你认为你要经常使用vi,那么最好是习惯使用 hjkl,因为它们敲起来更快. 而且, <BR>有时候连接出问题了,使得ESC序列都可能丢失了.(这样你可能就无法使用箭头键了--译注) <BR> <BR>2.6 - 我如何才能不存盘就退出? <BR> :q!可以做到这一点. 如果vi看起来冻住了,确信你没有错敲了个 ^S. 敲^Q可以解开^S. <BR> <BR>2.7 - 我怎样插入一个文件? <BR> :r <文件名> <BR> 例如,要插入文件/etc/motd, 可以敲 :r /etc/motd. <BR> 这将把文件插入到光标处.如果你在r前面指定了一个数字,那么这条命令将把文件插入 <BR>到那个位置. <BR> <BR>2.8 - 我怎样查找文本? <BR> /<文本>将向前查找, ?<文本>将向后查找. ??或者//将重复上次查找. 在UNIX下,这已经 <BR>是个可爱的标准用法了. 而且, 在vi中, n将查找文本下一次的出现位置. N重复上次查找, <BR>不过逆转了查找的方向. 在查找中可以使用规范式. <BR> <BR>2.9 - 我怎样搜索一个控制序列? <BR> /^V^<序列> <BR> ^V会告诉vi照字面理解下一个字符,不要把它看作是一条命令. <BR> <BR>2.10 - 我怎样重新格式化文本? <BR> 如果你的计算机有一个名叫fmt的程序, 你要做的仅仅是在命令模式下面敲!}fmt(记住, <BR>不要在前面加:). 这可以重新格式化你的文件,从光标所在的位置一直到当前段落的结尾. <BR>如果你的机器里面没有fmt这个程序, 你就得去找个类似的软件了(我记得在公共域里面有 <BR>不少这样的程序,但是我对此了解不多) <BR> <BR>2.11 - 我怎样复制文本? <BR> 这有点复杂.把这节拿出来,多看几遍;还有,一定要多做实验. <BR> "<字母>yy可以把一行文本拷贝到寄存器中(这里的寄存器是vi的术语,指可以存放剪切和 <BR>拷贝下来的东西的地方), <字母>里面的字母必须是a到z之间的一个. "<字母>dd可以把一行 <BR>剪切下来放到寄存器里面. 你可以在yy或者dd前面用数字指明要拷贝或者剪切的行数.如果 <BR><字母>中的字母是大写的话,意味着把文本插入到寄存器中已有的文本之前. <BR> "<字母>p把文本插入到光标之后,"<字母>P把文本插入到光标之前.如果寄存器中含有某 <BR>一行的开头或结尾,这一行将会被放到另一合适的行上. Y是yy的快捷方式. 还有, y$, yH, <BR>yM,等等,都是可以用的.d命令也是一样的.如果要快速的剪切和粘贴, 你就无须指定寄存器 <BR>了.如果这样的话,你就不能往寄存器里面添加文本了.而且只要有一个删除命令的话,寄存器 <BR>中的东西就没有了(包括x命令). <BR> 举例来说,如果要移动上一段的话,你可以把光标移到段落的开头,敲"a13dd,再把光标移到 <BR>你想要放文本的地方,敲"ap,就可以把那段文本放到光标所在的行后面. <BR> 现在,大概你想要剪切和粘贴文本到不是行末尾的区域去.我们来看如何做到这一点:我们 <BR>可以使用 m<字母> 命令来标记一个区域,这个字母可以和剪切/粘贴寄存器的字母相同,因为 <BR>它们是保存在内存中的不同位置. 然后,敲"<寄存器>`<字母>[yy或者dd], 这里的寄存器就是 <BR>要保存文本的那个寄存器,<字母>是用来标记的,yy和dd是你的操作. <BR> <BR>2.12 - 啊! 我刚才敲了一个dG,然后我的论文就没有了! 我该怎么办? <BR> (或者,我刚才犯了个错误,我该怎么办?) <BR> u可以撤消你刚才的操作.U可以撤消你对当前行的修改(当然,一行对于一篇论文来说当然 <BR>很不够了). :e!可以不保存修改而重新把你的文件调进来. 还有,你删除的文本都保存在从 <BR>0到9编号的寄存器里.所以,"<n>p就可以把上第n次的删除文本粘贴出来.你可以按如下的 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -