关闭

关闭

关闭

封号提示

内容

首页 学习vi和vim编辑器(第七版).doc

学习vi和vim编辑器(第七版).doc

学习vi和vim编辑器(第七版).doc

上传者: aware 2011-10-10 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《学习vi和vim编辑器(第七版)doc》,可适用于IT/计算机领域,主题内容包含前言前言文本编辑是电脑系统最普通的操作任务之一而vi编辑器是系统上最有效的标准文本编辑器之一。通过vi编辑器你可以创建新的文件或是编辑任何已有的纯文符等。

前言前言文本编辑是电脑系统最普通的操作任务之一而vi编辑器是系统上最有效的标准文本编辑器之一。通过vi编辑器你可以创建新的文件或是编辑任何已有的纯文本文件。Vi编辑器如同很多在Unix早期阶段开发的应用程序一样有着不易使用的名声。BramMolenaar的克隆加强版vim(ViImproved)已经走了很长的一段路来消除这样的印象。Vim包含了很多的便利功能如直观的指示、帮助页面等。它可能已经成为一种最流行的vi编辑器版本所以本书的第七版为此专门在第二部分辟出七个新单元并命名为vim。当然还有很多其它有价值的vi克隆版本同样存在我们在第三部分选取了它们中的三个并命名为otherviinclones。本书的范围本书包括的个单元和个附录被分成了四个部分。第一部分vi的基础与进阶是为了让你快速入手vi并且后面的高级技巧会让你vi用的更加得心应手。最初的两个单元单元vi文本编辑器和单元简单的编辑介绍了一些你可以入门的简单vi命令。你应当不断练习直到这些命令成为你的第二天性。你可以在第单元后停止阅读在已经学习了一些基础的编辑工具后。但是vi意味着干很多又不仅仅是和基本词汇有关的过程各种各样的命令和选项能使你应对很多编辑的苦差事时更加简便。第单元MovingAroundinaHurry和第单元beyondthebasis专注于用更简单的方法去完成目标。在你第次阅读期间你至少会了解到vi能做什么和你可以利用什么命令来完成你特定的需求。后来你可以回过来再看这些单元做更深一步的学习。第单元介绍ex编辑器第单元全局替换和第单元高级编辑提供工具帮助你转移更多的编辑重担到电脑上。这几单元向你介绍基于vi的exline编辑器这几单元还向你展示了如何分配ex命令通过vi。第单元vi克隆版本的介绍材料如何体现我们的基本思想是给你们一些我们觉得对新用户有用的vi知识的概述。学习一个新的编辑器尤其是Vi命令的讨论一个键盘按钮的图片。约定第一部分Vi编辑器的基础与进阶第部分是第一单元Vi文本编辑器Unix有很多可以改进文本内容的编辑器一个简洁的历史观点在钻研vi的来龙去脉之前它会帮助你理解你工作平台上的vi的理念。尤其这会帮助你搞很多清楚vi各样更多的隐蔽的错误信息同样可以体会vi的克隆版在原始vi基础上如何进步。Vi的数据会回来当用户在终端上工作通过串行线连接到中央微型计算机。在全世界有成百上千不同类型的终端存在并被使用。每一种都做着相同的事情(清屏移动光标等等)但是那些被用来让它们执行的命令却是不同的。另外unix系统让你自己选择字符用作退格产生一个中断信号或是其它有用的命令在串行终端上例如暂停和恢复输出。这些设备以前是(现在仍然是)管理着设备终端。原始的通用字符缓冲器版本的vi摘录终端控制信息打开和关闭文件你可以用vi编辑任何文本文件。Vi复制需要编辑的文件到缓冲区中(一个在储存器中临时储存数据的地方)显示缓冲区的内容(虽然你同时只能看到一屏幕的东西)然后让你增加删除和更改文本。当你储存你编辑好的东西vi复制编辑好的缓存区的内容回到外存贮器覆盖相同名字的旧文件。要记住你一直在复制了你的文件的缓冲区上工作你的编辑将不会影响你的原始文件直到你储存缓冲区。储存你的编辑文件也叫做“写入缓冲区”或更普通“写入你的文件”。打开文件Vi是用来启动vi编辑器来打开一个已存在的文件或是一个全新的文件的unix命令。Vi命令的语法是:$vi【文件名】括号在如上的命令行中显示出文件名是可选择的。括号不可以被打出来。$符号是unix的提示。如果文件名被忽略vi编辑器将打开一个没有名字的缓冲区。你可以指定名字当将缓冲区写入文件。就现在不过还是让我们坚持在命令行给文件起名。文件名在它的目录下必须是独一无二的。一个文件名可以包括任何bit的字符除了斜线号()这个符号是保留用来在路径名中分离文件名和目录名的空字符零bit的字符。你甚至可以在文件名中包括空格通过打反斜杠号在空格之前。实际上不过文件名通常包含各种组合的大小写字母数字点号()和下划线()。记住unix系统是区分大小写:小写字母和大写字母是区分的。也要记住你必须按ENTER去告诉unix你已经输入完你的命令。当你在目录下想打开一个新文件是在文件名前加上vi命令。例如如果你想打开一个新文件叫practice在当前目录下你需要输入:$vipractice既然这是一个新文件缓冲区是空的屏幕显示如下:~~~"practice"newfile波浪线(~)递降排列在屏幕左边显示出在文件中没有内容甚至不空行。在底部的提示行(也叫状态行)显示文件名和文件状态。你也能编辑在目录下任何存在的文本文件只要通过指定文件名。如果有unix文件有这样的路径homejohnletter。如果你已经在homejohn目录下用相对路径。例如:$viletter将文件letter副本复制到屏幕。如果你在另一个目录要给出完全路径才能开始编辑:$vihomejohnletter打开文件的问题当你调用vi是信息openmode出现。你的终端类型可能没有被正确的识别。快速退出编辑模式通过输入:q。检查环境变量$TERM。它应当符合你的终端名。或者去告诉你的系统管理员提供准确的终端类型设置。你看见如下信息之一:VisualneedsaddressablecursororuplinecapabilityBadtermcapentryTermcapentrytoolongTerminal:UnknownterminaltypeBlockdevicerequiredNotatypewriter你的终端类型要么没有定义要么terminfo和termcap进入方面可能有一些问题。输入:q退出。检查你的$TERM环境变量或者告诉你的系统管理员为你的环境选择一个终端类型。newfile信息出现当你觉得这个文件早已存在。检查一下你在文件名是否用对了大小写(unix的文件名是区分大小写的)。如果你没有错你可能在错误的目录下。输入:q退出。然后检查文件是否在正确的目录下(在unix提示下输入pwd)。如果你在正确的目录下检查在这目录下的文件列表(通过ls)是否有存在文件名相近的名字。你调用vi但是你却得到冒号提示(显示你在ex行编辑模式)。你可能在输入了什么东西在vi刷屏前。进入vi通过输入vi在ex提示(:)下。如下之一的信息出现:ReadonlyFileisreadonlyPermissiondenied“Readonly”表明你只能查看文件你不能保存你的修改。你可能调用了vi的查看模式(按了view或是viR)或者你对此文件没有权限。看一下在第页标题为“保存文件的问题”的内容。如下之一的信息出现:BadfilenumberBlockspecialfileCharacterspecialfileDirectoryExecutableNonasciifileFilenonASCII你要打开编辑的文件不是一个正常的文本文件。输入:q!退出然后检查你想编辑的文件可能有文件命令。当你输入:q因为前面提到的任一困难出现时出现如下信息:Nowritesincelastchange(:quit!Overrides)你已经不小心修改了文件。通过输入:q!退出vi。你在对话期间的修改将不会保存在文件中。做法正如先前提到的现在的“模式”的概念是非常重要的对于vi的工作来说。有两种模式命令模式和插入模式你起始于命令模式你的任何键盘敲击都将被看做是命令。在插入模式你输入的任何东西都将变成你文件中的文本。有时你可能不小心进入插入模式或是相反的离开插入模式一不小心。不论发生何种情况你输入的东西将会影响你的文件时是你所不期望。按ESC键去强制vi进入命令模式。如果你早已进入命令模式vi编辑器会嘟嘟响提示当你按ESC键时。(因此命令模式此时有时又叫做“嘟嘟响模式”)一旦你安全的再命令模式中你就可以动手修复任何突发性的变化然后继续编辑你的文本。保存和退出一个文件你可以退出编辑文件任何时候保存你的编辑然后退出到unix的提示界面。Vi编辑器的退出并保存的命令是ZZ。ZZ是大写的。让我们假定你创建了一个文件叫practice来练习vi命令你打了六行的内容。为了保存文件首先检查你在命令模式通过按ESC键然后按ZZ。按的键结果ZZ结束编辑和保存命令ZZ。你的文件被保存为正常的unix文件。Ls你同样可以用ex命令保存你的编辑。输入:w保存你的文件但是不会退出vi输入:q退出如果你没有做任何编辑输入:wq同时保存你的文件和退出。(:wq和ZZ相等。)我们会在第章详尽解释如何用ex命令暂时你只需要记住一些关于编辑和保存的命令。退出并不保存编辑当你第一次学习vi编辑器尤其如果你是一个无谓的实验者有两个其它的ex命令可以容易的解除你创造的任何混乱。如果你想清除所有你在对话框内的编辑然后回到原始文件怎么办?如下命令::e!ENTER你就退回到你上一次保存的文件内容你现在可以重新开始了。如果你想清除你的编辑内容并只是退出vi怎们办?如下命令::q!ENTER你就退出了编辑而且回到了unix的提示符。这两个命令你将失去自从你上一次保存到现在所有你编辑在缓冲区的东西。Vi一般不会让你知道扔掉了你的编辑。感叹号加到:e和:q命令后面让vi忽略这个禁止继续操作即使缓冲区已经被修改。保存文件的问题你尝试写入文件但是得到如下之一的信息:FileexistsFilefileexistsusew!ExistingfileFileisreadonly输入:w!file覆盖已存在的文件或是输入:wnewfile保存已编辑的文件到新的文件。你想写入文件但是你没有写入这个文件的权限。你得到信息“Permissondenied”用:wnewfile将缓冲区的内容写出到新的文件如果你在这个目录下有写入的权限你可以用mv取代原来版本通过复制这个文件。如果你没有这个目录下写入的权限输入:wpathnamefile将缓冲区的内容保存到你有权限写入的目录下去(例如你的主目录或是tmp)你尝试写入你的文件但是你得到信息告诉你文件系统已满。输入:!rmjunkfile去删除(很大)没用的文件释放一些空间。(通过一个感叹号开始ex命令让你使用unix。)或是输入:!df看一下在其它的文件系统里是否有空间。如果有在文件系统上选择一个目录写入你的文件到那目录下:wpathname。(df是unix命令检查一个磁盘上的空闲空间。)系统让你处在打开状态然后告诉你文件系统已满。Vi在磁盘上的临时文件已被存满。输入:!lstmp看一下是否有其它文件你可以移走已得到一些磁盘空间。#如果有建立一个临时的unixshell以移除文件或建立其它的unix命令。你可以建立一个Shell通过输入:sh输入CTRLD或exit终止shell回到vi。(在现在的unix系统上当使用一个作业控制shell你可以简单的输入CTRLZ暂停vi回到unix提示符输入fg回到vi。)一旦你已经释放一些空间写入你的文件用:w!。你尝试写入你的文件但是你得到一个信息说你的磁盘配额已经达标。尝试强行系统保存你缓冲区的内容通过ex命令:pre(:preserve的缩写)。如果没用找一些文件移除。用:sh(或CTRLZ如果你正在用作业控制系统)搬离vi和移除文件。用CTRLD(或fg)回到vi当你已经做完。然后写入你的文件用:w!。练习学习vi的唯一方法就是练习。你现在知道了足够的知识去创建新的文件和回到unix提示符。创建一个文件叫practice插入一些文本然后保存并退出文件。打开一个叫practice的文件在当前目录下:vipractice插入文本:iamtextyoulike回到命令模式:ESC退出vi保存编辑:ZZ#你的vi可能保持它的临时文件在usrtmpvartmp或你现在的目录你可能要到处闲逛明确找到是哪里空间用完了。Vim一般保持它的临时文件在你编辑文件的目录下。第二单元简单编辑这一章将介绍用vi编辑本章是用来当自学教程的。本章我们将学习如何移动光标和如何做一些简单的编辑。如果你从没有用vi工作过你应该阅读全章。稍后本章将向你展示如何长进你的技术以更快更好的编辑。对于精于vi的用户来说一个最大的好处就是有很多的选项可供选择。(对于新手来说一个最大的坏处就是vi有太多的复杂编辑命令。)你不可能学习vi通过学习没一个vi命令。起步通过学习本章介绍的基础命令。记录下常见的命令使用时的图像。当你学习vi注意让更多的任务你是可以交给编辑器的然后找到命令完成它。在接下来的一章你会学到更多vi高级的特征但是在你掌握高级的之前你必须先掌握简单的。这一章包括:移动光标加入和改变文本删除移动和复制文本更多的方法进入插入模式Vi命令Vi有两个模式:命令模式和插入模式。你一进入文件你就进入命令模式编辑器就一直等你输入命令。命令能让你移动到文件的任何地方去编辑或是进入插入模式和加入新的文本。命令同样可以被用来退出文件(保存或忽视你的编辑)以回到unix的提示符。你可以理解为不同的模式代表了两种不同的键盘。在插入模式你的键盘功能相当于一个打字机。在命令模式每一个键有一个新的意义或初始一些指令。有好几种方法告诉vi你想进入插入模式。最常用的方法之一就是按i。i不会出现在屏幕上但是之后你按的无论你按什么都将会出现在屏幕上也将会存入缓冲区。光标标记现在插入点。*想告诉vi你想停止插入文本按ESC。按ESC就移动光标回到一个地方(所以那是你最后输入的字符)回到vi的命令模式。例如假如你已经打开一个新文件想插入单词“introduction。”如果你输入了iintroduction在屏幕上显示的是introduction当你打开一个新的文件vi开始于命令模式只要第一个按(i)就打断进入插入模式。之后所有的键盘输入都将被认为是文本输入直到你按ESC。如果你需要修正一个错误然而你却在插入模式退格并修正错误。基于你在使用的终端类型退格可能会清除你先前已经输入的或可能只是回退了。在其它的事情中所有你回退的都将被删除。记住你不能用退格键回退到你进入插入模式的点的前面。(如果你已经禁用了vi的兼容性vim允许你用退格回退到你进入到插入模式的点的之前。)Vi有一个选择让你定义一个正确的页边白和提供自动回车当你到达它的时候。就目前当你正在插入文本按ENTER换行。有时你自己不知道是在插入模式还是在命令模式。无论什么时候vi不会回应如你所期望的按ESC一两次以检查你在什么模式下。当你听到蜂鸣声你就在命令模式。移动光标你可能用只用一小会的时间在编辑会话加入新的文本在插入模式很多时候你会很多时间编辑以退出文本。在插入模式你可以定位光标到文件的任何地方。既然你开始所有基础编辑(改变删除和复制文本)通过定位光标到你想改变的地方你想能移动光标到目的地越快越好。*一些版本在状态行显示你在(inputmode)插入模式有以下vi命令来移动光标:上下做和右每一次移动一个字母向前或向后一个文本块如一个单词一个句子一个段落。向前或向后翻过一个文件一屏幕一次。在图一个下划线表示出现在光标的位置。圈圈显示了光标从它现在的位置移动到通过不同的vi命令到的位置。图简单的移动命令。简单的移动键hjk和l权利在你指尖将移动光标。h左一个空格j下一行k上一行l右一个空格你同样可以用光标箭头键()用和上升和下降或用ENTER和BACKSPACE但它们不常用。一开始似乎用字母键替代箭头键移动光标有点麻烦。过了一段时间然而你就会发现这将是你最喜欢vi的一点之你可以移动光标甚至不用将你的手指离开中心键盘区域。在你移动光标之前按ESC以确认你已经在命令模式下。用hjk和l在文件中从光标现在的位置前后的移动。当你在一个位置已经移动到极限时你会听一记嘟声然后光标停止了。例如一旦你在一行的开始或者结尾处你就不能用h或l回到前一行或下一行你必须用j或k。简单说来就是你不能移动光标超过代表空行的波浪线(~)你也不能移动光标到第一行文本之上。数值参数你可以先于移动命令前加入数字。图显示出l命令如何光标向左移动四个字符就好像你已经输入l四遍了(llll)。图和数字的复合命令能输入复合命令给你更多的选择和每一个你学的命令更强的功能。把这个记住就如你被介绍了额外的命令。当你保存文件practice时vi显示一个信息告诉你有在那个文件里有多少行。行不一定如出现在屏幕上的轮廓线一样有相同长度(一般限制在个字符)。一行就是任何文本被插入在新行之间(新的一行将被插入进文件当你在插入模式中按ENTER键。)如果你在按ENTER键之前输入了个字符vi认为这个字符就是一行(即使这些个字符在屏幕上明显的被分成了好几行)。正如我们在第一章中提到的vi有一个选项允许你设置到右边白的距离然后vi会自动换行。这个选项是wrapmargin(它的缩写是wm)。你可以设置一个wrapmargin个字符::setwm=这个命令不会影响你已经输入的行。我们会谈论更多的设置选项在第章。(这个真的不能等!)如果你不用vi的自动wrapmargin选项你应该换行用回车键以保持可控制的行的长度。vim有nocompatible(兼容模式)设置允许你“跳过空白”行的尾部到下一个用l或空格。两个在一行中移动的有用的命令:(数字零)移动到行首。$移动到行尾。在如下的例子中行号被显示出来。(行号可以在vi中被显示出来通过用数字选项通过在命令模式下输入:setnu开启这个功能。这个操作将在第七章介绍。)逻辑上的第()行并不符合你在屏幕上所看见的第()行。如果光标现在在单词word的d上然后你按$光标会移动到这一周期最后的单词word。如果你输入光标会移回到单词move中的m第行的开头。文本块的移动你同样可以在文本块间移动光标:单词句子段落等等。w命令光标每一次向前移动一个单词计数符号和标点符号相当于单词。如下的一行显示出用w命令的光标的移动:Cursor,delete,lines,insertcharacters,你同样可以移动光标通过一个单词而不包括计数符号和标点符号用W命令。(你可以把它看做一个“大的”或“大写”的Word。)光标的移动用W就是这样:Cursor,delete,lines,insertcharacters,一个单词的向后移动就用b命令。大写的B允许你回移一个单词不包括计数符号。正如先前所提到的移动命令采取数值参数所以用无论是w或b命令以可以用数字增加移动。w向前移动两个单词B向后移动个单词不包括计数符号。为了移动到专门的一行你可以用G命令。单个G移动到文件末尾G到文件的开头还有G则到第行。这个将会有更多的细节描述在接下来的第页的一章“G(GOTO)命令”。图校对编辑我们将讨论句子和段落的移动在第章。现在呢练习使用你所知道的光标移动命令将它们结合数字乘数。简单的编辑当你进入你文件的文本时它很少是完美的。你找到打字错误或是想改进短语有时你的程序有一个错误。一旦你进入文本你就能去改变它删除它移动它或复制它。图显示出你对于这个文件想编辑成的样子。编辑被校对符号标示出来。在vi编辑器中你可以实现这些编辑通过一些简单的基础的按键:i是插入(你早已经看到过了)a是附加c是改变和d是删除。要移动或复制文件你用了很多组命令。你移动文本用d为了“删除”然后用p为了“放置”你复制文本用y为了“移出”然后p为了“放置”。每一种编辑在本节中都会被描述。图显示出你所用的vi命令编辑在图中所做的标记。插入新的文本你已经看到在插入模式下向文件中输入新的文本。你同样可以在插入模式下当编辑存在的文本增加遗失的字母单词和句子。在文件practice如果你有以下句子:YoucanscrollThepage,movethecursor,deleteLine,andinsertcharacters图用vi命令编辑正如光标标示出来的位置。要插入Withascreeneditor在句子的开头输入如下:按键结果k用k命令移动光标向上两个移动到你想要插入的地方iwitha按i进入插入模式开始编辑文本屏幕编辑器ESC完成编辑文本按ESC结束插入模式回到命令模式附加文本你可以附加文本在你文件的任何地方只要用附加命令a。这个工作几乎和i是一个样的除了文本被插入在光标后而不是光标前。你可能已经意识到当你按i进入插入模式光标不会移动直到你输入了一些文本之后。相反当你按a进入插入模式光标向右移动一个空格。当你输入文本它出现原始光标位置的后面。改变文本你可以替换你文件中的任何文本用修改命令c。要告诉c多少文本要修改你可以符合c和移动命令。这种方式一个移动命令充当成文本对象让c命令去影响。例如c可以被用来从光标改变文本:cw到单词的末尾cb回到前两个单词c$到行的末尾cO到行的开头发表一个修改命令之后你可以用选中的文本替换任何多的新文本一个字母没有一个字母或成百上千行也行。C就像i和a一样让你进入插入模式直到你按ESC键。当修改只在本行起效时vi在文本的末尾用$标记要被修改的东东所以你可以看到行的什么部分被影响。(再看cw的例子。)单词去修改一个单词结合c命令(修改)与w对付单词。你可以用一个长一点的或短一点的单词(或任何文本)替换一个单词(cw)。cw可以被认为是“标示删除单词和插入新的文本直到ESC被按。”假如你有如下一行文本在你的文件practice中:Withaneditoryoucanscrollthepage,你想修改an成ascreen。你只需要修改一个单词:按键结果w用w移动到你想开始编辑的地方cw敲修改单词的命令。文本的末尾将会被标示一个$(英镑符号)Ascreen输入替换的文本然后按ESC回到命令模式。cw同样可以用在一个单词的部分上例如要修改spelling到spelled你可以定位光标到i输入cw然后输入ed用ESC完成操作。一般vi命令的组成在修改命令我们也提到到这一点你可能已经注意到如下形式:(命令)(文本对象)命令就是修改命令c文本对象就是移动命令(你不需要输入括号)。但是c不是唯一一个需要文本对象的命令。d命令(删除)和y命令(拷贝)如同这样的形式一样。记住移动命令同样可以采取数值参数所以数字可以被加到文本对象的cd和y命令。例如dw和dw是删除两个单词的命令。按照这种思路你可以看到很多vi命令有如下一般形式:(命令)(数字)(文本对象)或者等价的形式:(数字)(命令)(文本对象)这就是如何工作的。数字和命令是可选择的。没有它们你只简单的有移动命令。如果你加入一个数字你有一个复合移动。在另一个方面复合一个命令(cd或y)与一个文本对象组成一个编辑命令。当你意识到有多少复合体以这样一种方式出现vi就确实变成了一个强大的编辑器!行要替换当前整个一行用到特殊修改命令cc。Cc修改整个一行用输入无论多少的文本替换这一行直到输入ESC。它不关注光标在这一行的哪里cc替换整个一行的文本。一个命令像cw工作与cc这样的命令是不同的。在使用cw原来的文本保持直到你输入替换它任何原来的遗留下来的文本(到$)消失当你按ESC。在使用cc然而原来文本先被删除让你在空行插入文本。“覆盖”发生时的任何修改命令只会影响少于一整行但是“空行”发生时的任何修改命令会影响到一或更多行。C替换字母从当前光标的位置到行末。它有相同的功能如复合c与特殊行末标志$(c$)。命令cc和C对于其他命令来说是真的很简洁所以它们和其它vi命令的一般形式是不一样的。你会看到其它快捷键当我们讨论删除和拷贝命令的时候。字符一个其它的替换编辑就是r命令。r以一个字符替换另一个字符。你不用按ESC键退回到命令模式当编辑完之后。如下这行中有一个拼写错误:Pithascreeneditoryoucanscrollthepage,只有一个字母需要改正。你不希望用cw在这个例子中因为那样的话你就需要重打整个单词。用r替换光标所在的一个字母:按键结果rW输入替换命令r接着输入要替换的字母W。替换文本假如你想修改只是一些字母不是整个单词。替换命令(s),它本身替换一个字母。与前面的计数你可以替换许多字符。正如修改命令(c)文本的最后一个字符将会被标记上一个$所以你可以看到多少文本将被修改。S命令通常情况下是大写的让你修改整个一行。相对比C命令修改从当前光标开始行剩余的部分S命令删除整个一行无论光标在哪。Vi让你在行首进插入模式。前面的计数替换许多行。S和s命令都让你进入插入模式当你结束输入新的文本按ESC。R命令就像他的小写的副本替换文本。不同的是R简单的进入重击模式。你输入的字母替换了屏幕上显示的字母替换字母直到你输入ESC。你可以一行最多一个当你输入ENTERvi将开新的一行高效的让你进入插入模式。修改大小写修改字母的大小写是一项特殊的替换工作。波浪(~)命令会修改一个小写字母成一个大写字母或一个大写字母成小写。定位你的光标到你想改变大小的字母下然后输入一个~。这个字母的大小写将会修改。光标将会移动到下一个字母。在老的vi版本中你不能指定一个数字前缀或文本对象用~去起作用。现在的版本允许数字前缀。如果你想同时修改多于一行的大小写你必须筛选文本通过unix命令如tr将在第单元描述。删除文本你同样可以删除你文件中任何文本用删除命令d。想修改命令删除命令要求一个文本对象(一部分要修改的文本)。你可以删除单词(dw)行(dd或D)或用其它移动命令我们以后会学到。所有这些删除你要移动到你想开始编辑的地方给出用删除命令(d)和文本对象如w代表单词。单词假如你有如下的文本段:Screeneditorsareareverypopular,SincetheyallowedyoutomakeChangeasyoureadthoughfile光标正如显示的。你想删除在第一行的一个are:按键结果w移动光标到你想开始编辑的地方(are)dw给出删除单词命令(dw)去删除单词aredw删除光标标记开头的这个单词。注意单词后面的空格也被删除了。dw同样可以被用来删除单词的一部分。在这个例子中:Sincetheyallowedyoutomake你想删除allowed结尾的ed。按键结果dw给出删除命令(dw)去删除单词开始于光标所在的位置。dw一直删除在这一行中下一个单词前的空格但是我们不想这么干在这个例子中。要保留单词间的空格用de只删除一个单词的末尾。输入dE删除单词的末尾包括标点符号。你同样可以删除反向(db)或到一行的开头或结尾(d$或d)行dd命令删除光标所在的整个行。dd不会删除行的一部分。像它的补充ccdd是一个特殊的命令。使用在前面的例子中相同的文本正如所示的光标所在的第一行的位置:Screeneditorsareareverypopular,SincetheyallowedyoutomakeChangeasyoureadthoughfile你可以删除前两行:按键结果dd给出命令删除前两行(dd)。注意即使光标没有定位在行的开头整个一行还是被删除D命令删除从光标开始到行末。(D是d$的缩写。)例如与光标定位所示:Screeneditorsareareverypopular,SincetheyallowedyoutomakeChangeasyoureadthoughfile你可以删除行的一部分即从光标往右的部分。按键结果D给出命令删除行的一部分即光标的右边(D)。字符通常你只想删除一个或两个字符。正如r是一个特殊的修改命令去替换一个字符x是一个特殊的删除命令去删除一个字符。x只删除光标所在的字符。如行所示:zYourcanmovetextbydeletingtextandthem你可以删除字母z通过按x。‡一个大写的X删除光标之前的字符。前缀在前面任一命令加上一个数字就是删除字符的个数。例如:x会删除光标下和右边的五个字符。删除出现的问题你已经删除错文本你想恢复到原来。有好几种方法恢复已删除的文本。如果你刚刚删除什么东西然后你意识到你想恢复只要简单的输入u取消上一次操作即可(例如,一个dd)。这个只对你还没有给出其它进一步操作时有效因为u只能取消最近一次操作。或者一个U会还原行道它原始的状态这个方法不管前面做过任何次修改都可以使用。你可以还是回复最近一次删除然而用命令p由于vi保存最近九次删除到九个删除缓存区。如果你知道例如第三次删除时你想恢复的输入:“p”去把缓存区的数字为的内容放到行光标下。这只对一个已经删除的行有效。单词或行的一部分不被保存进缓存区。如果你想恢复一个已经删除的单词或行的碎片u就没用了用p命令自身。这恢复任何你已经删除的。在后来的分段中将讨论更多关于命令u和p。注意vim支持“无限”取消使得生活方式更加简便。看一下在页的“撤销取消”一章以获得更多信息。‡x的记忆一般认为像“x光透射”打字机的错误。当然谁还在用打字机呢?移动文本在vi你移动文本通过删除它然后把它移动已删除的文本到文件中的任何地方像一个“剪切和粘贴”每一次你删除一个文本块删除的东西一般暂时保存在特殊的缓存区。移动到你的文件中的其它地方用放置命令(p)把文本放到新的地方。你可以移动任何文本块尽管移动行比移动单词要有用。放置命令(p)把缓存区的文本放在光标后的地方。大写版本的命令P把文本放在文本之前。如果你删除一个或更多的行p把删除的文本放到新的一行光标之下。如果你删除少于一整行p把已经删除的文本插入当前行在光标之后。假如在你的文件practice中有以下文本:YoucanmovetextbydeletingitandthenLikea"cutandpaste"PlacingthedeletedtextelsewhereinthefileEachtimeyoudeleteatextblock你想移动第二行likea"cutandpaste"到第三行下。使用删除你可以做以下编辑:按键结果dd光标在第二行删除这一行。文本被放进了缓存区(保留记忆)p给出粘贴命令p恢复已经删除的行到光标下。结束这个句子的记录你可能同样需要修改开头的大小写和标点符号(用r)以适应新的结构。一旦你删除文本你必须恢复它在下一次修改命令和删除命令之前。如果你做了其它的编辑影响了缓存区你已删除的文本将彻底消失。你可以重复粘贴一遍又一遍只要你不做新的编辑。在第四单元你会学到如何保存删除的文本进编号的缓存区所以你可以恢复以后。交换两个字母你可以用xp(删除字符和粘贴在光标之后)交换两个字母。例如:在单词mvoe中字母vo被颠倒了。为了更正颠倒把光标放在v上然后按x再按p。碰巧单词transpose帮你记住xp的顺序x代表transp代表pose。没有命令交换两个单词。在单元“更多的映射键例子”页中我们将讨论一个简短的命令序列可以交换两个单词。复制文本一般你可以保存编辑时间(和按键)通过复制你的文件的一部分用到其他地方。用两个命令y(拷贝)和p(粘贴)你可以复制任何大小的文本然后粘贴被拷贝的文本到文件的其它地方一个拷贝命令拷贝被选中的文本到一个特殊的缓存区它将一直被保存到下一个拷贝(或删除)发生。你可以然后放置这些复制的东西在文件中的任何地方用粘贴命令。正如用修改和删除拷贝命令可以被用来与任何移动命令联合(yw,y$,yy)。拷贝命令最频繁的用于一行(或更多)的文本因为拷贝和粘贴一个单词通常比简单的输入一个单词要花更长的时间。快捷键yy作用于一整行就像dd和cc干的那样。但是快捷键Y由于某种原因操作的方式和D还有C不一样。不是从当前位置复制到行末而是Y拷贝一整行这是Y和yy干着相同的事情。假如你的practice文件中有如下的文本:WithascreeneditoryoucanScrollthepageMovethecursorDeletelines你想操作三个完整的句子开始于Withascreeneditoryoucan。不移动文件作出此编辑一遍又一遍你可以用一个拷贝命令和粘贴命令去复制要被增加的文本。按键结果yy拷贝你想拷贝进缓存区的行文本。光标可以放到你想拷贝的行的任何地方(或一系列行的第一行)j移动光标到你想粘贴被拷贝的文本的地方p粘贴被拷贝的文本到光标下的一行用命令P。jp先移动光标到下一行然后粘贴文本到光标下用命令p拷贝与删除用相同的缓存区。每一个新的删除和粘贴覆盖前一个拷贝的缓存区的内容。正如我们将在第一单元看见前九个粘贴或删除可以被再调用粘贴命令。你同样可以拷贝和删除直接进入个命名的缓存区允许你第一时间修改各样的文件块。重复和撤消你的最后一个命令每一个你给出的编辑命令都被存放在一个临时的缓存区直到你给出下一个命令。例如如果在一个单词后你输入the在你的文件中命令被用来插入文本随着你进入的文本被暂时的保存起来。重复每一次你做相同编辑一遍又一遍你可以保存次数通过复制它用重复命令点()。定位你的光标到你想重复编辑命令的地方输入点号。假如你的文件有如下几行:WithascreeneditoryoucanScrollthepageWithascreeneditoryoucanMovethecursor你可以删除一行然后删除另外一行简单的输入一个点号。按键结果dd删除一行用命令dd。重复删除。老一点的vi版本在重复命令有问题。例如如此的版本可能有困难重复一个长的插入当右边距被设定好时。如果你有如此的一个版本这个漏洞将会迟早伤你。事后对于这个没有什么你是可以做的但是它会帮助你事先通知。(现在的版本似乎没有这个问题。)有两种方法你可以用来防止潜在的问题当重复长的插入文本。你可以写入你的文件(:w)在重复长的插入文本之前。(回到这个的拷贝如果插入文本工作不正确)。你可以取消右边距的设置像这样::setwm=在后面的单元“更多的映射键例子”在第页我们将展示你一个简单的方法使用右边距。在一些vi版本中命令CTRL重复最近的插入文本。CTRL被输入进在插入模式然后回到命令模式。取消正如早些提到的你可以取消最近的命令如果你做错了。简单的按u。光标需要放到原来编辑发生的行。要继续先前的例子展示删除行在文件practice中:按键结果uu取消了最近一次命令恢复了被删除的行Uu的大写取消在但单一行上的所有编辑只要光标保持在那一行。一旦你离开那一行你就不能用U。注意你可以用u取消你的最近一次取消切换两种文字版本。u同样可以取消UU会取消一行中任何修改包括那些用u的工作。一个技巧:事实上u可以取消它自己使得一个极好的方法去在文件中随意走动。如果你曾想回到你上一次编辑的地方去简单的取消它。你会弹回上一次的一行。当你取消取消时你就会待在那一行。Vim让你用CTRLR去“重干”一个取消操作。配合无限的取消你可以向后移和向前移通过修改你的文件的历史。看一下单元“取消取消”在第页以获得更多信息。更多的方法插入文本你已经在光标前输入以下文字序列:itexttobeinsertedESC你同样已经在光标后插入文本用a命令。这里有一些其它的插入命令可以插入文本在光标周围不同的位置:A附加文本到当前行的末尾I插入文本在行的开头o(小写的字母o)打开光标下的空行以输入文本O(大写的字母O)打开光标上的空行以输入文本S删除光标当前字母然后用新的文本替代S删除一行以新的文本代替R重击存在的字符以新的字符替换所有这些命令都将让你进入插入模式。插入文本之后记住要按ESC回到命令模式。A(附加)和I(插入)挽救你免于在调用插入模式之前不得不移动你的光标到行的末尾或行的开头。(A命令让你免于按$a两个键。尽管一个按键看起来没有节省多少但越熟练越不耐烦一个编辑器你变成你就想节省更多的按键)。o和O(开)使你节省不用不得不插入一个回车。你可以输入这些命令在一行中的任何地方。s和S(替代)允许你删除一个字符或一整行然后替换删除的东西以任何新的文本。s相当于两个键的命令cSPACES相当于命令cc。s最佳的用法之一就是用很多字符修改一个字符。R(“大”替换)是很有用的当你想开始修改文本但是你不知道究竟多少。例如不用再猜测到底是cw还是cw只要输入R然后输入你想替换的文本。插入模式的数字参数除了o和O插入命令只列出了(加上i和a)加上数字前缀。和数字前缀你可能要用iIa和A去插入一排下划线或交替字符。例如输入i*ESC插入个星号输入a*ESC附加个字符(对星号和连字符)。这是比较好的一种重复一串单一字符的办法。和一个数字前缀r替换字符数目和一个单个字符重复实例。例如在c和c代码中要修改||成你要移动光标到第一个管符号(|)然后输入r。你可以用一个数字前缀和S去替代好几行。这更快和更加灵活然而去用c和一个移动命令。一个用s和数字前缀好的实例就是当你想修改一些字符在单词中间时。输入r是不正确的输入cw会修改太多的文本。使用s和数字前缀通常和输入R一样。有一些其它的命令组合一般工作在一起。例如ea是有用的对于附加新文本到一个单词后。它帮助你训练自己认识到这些有用的组合所以他们会变得自动的。连接两行用J有时当编辑一个文件你非正常结束留下一系列短行非常难看。当你想合并两行成一行把光标移动到第一行的任何地方然后按J合并两行。假如你的文件practice如下:WithaScreeneditorYoucanScrollthepage,movethecursor按键结果JJ连接光标所在的行和下一行重复最后一个命令(J)用去连接下一行和当前行。非常老的vi版本很难重复超过一行的有价值的文本。用一个J和一个数字参数连接想要连接的行数。在这里的例子你可以连接三行用命令J。问题清单当你输入命令文字跳跃到屏幕上而且没有发生任何你想让它发生的。搞清楚你没有输入J命令当你想j时。你可能不小心干扰到CAPSLOCK键而你没注意到它。Vi是大小写敏感的那个大写命令(IAJ等等)和小写命令(iaj)是不同的。如果你干扰到这个键所有你的命令将被不会解释成小写而是大写命令。再次按CAPSLOCK键回到小写按ESC确认你在命令模式下然后输入U还原最后一行的修改或u取消最后一个命令。你将可能同样不得不做一些附加的编辑以完全恢复你的文件混乱的部分。基础vi命令的复习表格列出了一些你可以使用通过组合命令cd和y与文本对象。最后两排展示对于编辑的附加命令。表格和列出了一些其它的基本命令。表格总结了余下的再本章介绍的命令。表格编辑命令文本对象修改删除复制一个单词cwdwyw两个单词不包括标点cW或cWdW或dWyW或yW前三个单词cb或cbdb或dbyb或yb一行ccddyy或Y到行末c$或Cd$或Dy$到行头cdy单个字符rx或Xyl或yh五个字符sxyl表格移动移动命令hjkl当下一行的第一个字符但前一行的第一个字符到单词的末尾e或E向前一个单词w或W向后一个单词b或B到行末$到行首表格其它操作操作命令从缓存区粘贴文本P或p打开vi打开文本如果精确vi文件名保存编辑退出文件ZZ不保存编辑退出文件:q!表格文本创建和操控命令编辑行为命令在当前位置插入文本i在行首插入文本I附加文本在当前位置a在行首附加文本A在光标下开新的一行o在光标上开新的一行O删除行并替代文本S重击存在的字符代以新字符R连接当前和下一行J切换大小写~重复上一次操作取消上一次修改u恢复行到原来的状态U只用表格中列出的命令你可以勉强使用vi了。但是为了利用vi的真正威力(提高你的生产力)你将需要更多的工具。接下来的章节将介绍这些工具。第单元迅速移动你不会只用vi建立新的文件。你会用很多时间在vi里编辑存在的文件。你很少想打开文件至第一行然后移动它一行又一行你想直接到文件中特定的位置开始工作。所有的编辑起始于你移动光标至你想开始编辑的地方(或用ex行编辑命令以识别你想编辑的行号)。这个单元告诉你如何考虑以不同的方式移动(通过屏幕通过文本通过记号通过行号)。在vi中有很多种方法移动因为编辑速度取决于以很少的见到你想到的地点。这个单元包括:通过屏幕移动通过文本块移动通过查找记号移动通过行号移动通过屏幕移动当你阅读一本书时你在书里关于地点的概念是页数:你停止阅读的页数或附录中的页数。你不需要这种便利当你编辑文件。有些文件只有几行你可以一下子看见整个文件。但是很多文件有成百上千(或成千上万)行。你可以将文件想成文本在一长卷纸上。一屏幕就是行文本(通常)在那长卷上。在插入模式中当你填满一屏幕的文本你将结束在屏幕底下一行的输入。当你到达尾部然后按了ENTER最上面一行卷看不见了然后一个空行出现在屏幕下方以输入新的文本。这就叫卷页。在命令模式你可以在文件中随意移动去看任何文本通过向上或向下翻页。而且由于光标移动可以复合数字前缀你可以快速地在你的文件中移动。滚动一屏幕有vi命令去向前和向后滚动整个和半个屏幕的文件:^F向前滚动一屏幕^B向后滚动一屏幕^D向前滚动半屏幕(下)^U向后滚动半屏幕(上)(在上面的命令列表中^符号代表CTRL键。所以^F得意思是按住CTRL键的同时按住f键。)也有其它命令去让屏幕向上滚动一行(^E)和向下滚动一行(^Y)。但是这两个命令不会将光标送到行的开头。光标会原来行的位置当命令发出时。用z重新定位屏幕如果你想滚动屏幕向上或向下当你想让光标保持在你离开行的位置用z命令。zENTER移动当前行到屏幕顶端并滚动z移动当前行到屏幕中央并滚动z移动当前行到屏幕底部并滚动和z命令用数字前缀结合是毫无意义的。(毕竟你只需要一次重新定位光标到屏幕的顶端。重复一样的z命令不会移动任何东西。)反而z懂得一个数字前缀如一个行号它会被用到在当前行的地方。例如zENTER移动当前行道屏幕顶端但是zENTER移动第行到屏幕顶端。刷新屏幕有时当你在编辑从你计算机系统里出来的信息会显示到你的屏幕上。这些信息不会变成你编辑缓存区的一部分但是它们妨碍了你的工作。当系统信息出现在你屏幕上时你需要重新显示或刷新屏幕。无论你什么时候滚动你刷新了屏幕的一部分(或全部)所以你可以一直去掉这些不要的信息通过滚动它们离开屏幕然后你初始的位置。但是你同样可以刷新屏幕而不滚动通过输入CTRLL。在一屏幕中移动你同样可以保持你当前屏幕或看到的文件的样式在屏幕间随意移动:H移到出发点屏幕最上一行M移动到屏幕中间一行L移动到屏幕最下一行nH移动到从最上面一行开始数下面第n行nL移动到从最下面一行开始数上面第n行H移动光标从任何位置到屏幕的最上面一行或“初始位置”。M移动到中间一行L移动到最后。要移动到第一行的下面一行用H。按键结果L用L命令移动到屏幕的最后一行H用H命令移动到屏幕上的第二行(H命令移动到屏幕的最上面一行)行移动在当前屏幕下同样有命令通过行移动。你早已看过j和k。你同样可以用:ENTER移动到下一行的第一个字符。移动到下一行的第一个字符。移动到上一行的第一个字符。这三个命令移动上或下一行的第一个字符忽略任何空格或制表符j和k于此相反移动光标到行下的第一个位置即使这个位置是空白的(假定光标开始在第一个位置)。移动当前行不要忘记h和l移动光标向左和向右还有那个(零)和$移动光标到行的开头或末尾。你同样可以用:^移动到当前不是空格的第一个字符n|移动到当前行第n个字符正如早先行移动命令所显示的^移动到行的第一个字符忽略一切空格和制表符。于此相反移动到行的第一个位置尽管这个位置是空的。文本块移动其它你能想象得到的方法在vi文件中移动就是通过文本块单词句子段落或章节。你已经学过通过单词向上和向下移动(wWb或B)。此外你可以用这些命令:e移动到单词末尾。E移动到单词的末尾(忽略标点)(移动到当前句子的开头。)移动到下一句的开头。{移动到当前段落的开头。}移动到下一段落的开头。移动到当前章节的开头。移动到下一章节的开头。为了找到一个句子的结尾vi寻找以下的标点符号之一:?或!。Vi找出句子的末尾当标点后跟着至少两个空格或当它出现作为行中最后非空的字符。如果你在句点后只留下一个简单的空格或如果句子以一个引号结尾vi不会辨识这个句子。一个段落被定义成一个文本直到下一个空行或直到一个默认的段落宏定义。(IP,PP,LP,或QP)从MS编辑和格式化程序宏包。相似的一个章节被定义成文本到下一个默认的章节宏(NH,SH,H,或HU)宏辨别段落或章节的分隔符可以被定制通过:set命令将会在第单元介绍。记住你可以复合数字与移动命令。例如)向前移动个句子。同样记住你可以编辑使用移动命令:d)删除当前行到末尾的内容y}拷贝(复制)接下来

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/30
1下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部