vi学习使用笔记之四
我想我们在接触了vi以前一定会用一些其他的编辑器,在那些的编辑器里复制,剪切和粘贴都是最平常的操作,而在vi中这些操作也是同样的存在的。在vi编辑器有一个注册的概念(concept of register),正是这个概念使我们可以时行多次的剪切和粘贴等的操作。在一般的编辑器中我们被限制只有一个剪切板可以用,而在vi中我们最多时可以有26个剪切板可以来使用,这样就会大大的提高我们的完成工作的效率。而在vi中更是有一个相当强大的功能那就是他可以同时处理多个文件。如此强大的功能我们又来如何的操作呢?
在vi的编辑中我们可以使用d或是x来删除文本,但是经过这样的操作所删除掉的文本并没有被vi所丢弃,而是被保存起来。我们可以使用p命令来粘贴刚刚所删掉的内容。下面我们可以来试一下看一下他是如何工作的。我们可以在vi中随意的输入几行,然后我们移动到其中的一行,用dd命令来删掉其中的一行,这时我们就不会再在vi中看见他。如何叫他再回来?我们可以将光标移到任意的地方,然后用p命令,我们就会看到刚才被删除掉的内容又回来了。同样我们使用x命令来删除的东西也可以这样的粘贴回来。所不同的就是我们用dd来删除一行再用p命令时是在当前光标的下一行粘贴,而删除一个单词再用p命令来粘贴时是在当光标处粘贴。有了这样的命令有时我们就可以来处理我们输入错误的单词了。例如我们不小心将the输入成了teh,这时我们可以将光标移到e的位置,用x命令删掉,再用p命令粘贴回来,这时我们就会发现现在的输入正是我们想要的输入了。p命令可以在一个文件中使用几次,每一次都可以将刚删除的内容重新粘贴在我们所希望的地方。当然这个命令也可以使用数字做前缀来明确的指出所要执行的次数。
在使用vi进行文本编辑的过程中我们还可以对某一行进行标记,做法为我们将光标移到某一行,用命令ma来进行标记。在这里m是标记的命令,a是我们对这一行所做的标记的名称,当然我们也可以使用其他的标记名称,必竟我们是有26个字母可以用的嘛:)。在做了这样的标记以后我们可以快速的移到被标记的地方,‘a就可以使我们快速的移到刚才我们所做标记的地方。这里’是单引号,这时我们就会移到被做标记那一行的行首。我们也可以使用`a来移到我们所做标记的地方,这里`是反引号,也就是数字键1左边的那一个,不要弄错了噢:),这时我们就会移到所做标记时光标所在的位置,可以说是更精确啊。这也是这两个命令的不同之处。在进行文本编辑时我们可以列出当前所做的所有的标记。命令为 ::marks。这时vi就会列出当前的所有的标记。当然如果我们将做了标记的那一行删除的话所做的标记也就不存了。我们用标记不仅可以快速的移到做了标记的行,而且还可以用标记来删除掉一行,例如我们在某一行用ma做了标记,然后我们移到这一行的底部,这样我们就可以用在d‘a来删掉这一行。可以说这也是标记命令提供给我们的方便吧。
在vi中还有一个命令可以提供复制的操作,那就是y命令。yy命令可以复制一行,然后我们可以用p命令来粘贴。这时我们也可用标记命令来组合使用,我们可以在一行用ma标记此行,然后将光标移到这一行的底部,用y’a命令就可以来复制这一行了。然后到我们所希望的地方用p命令来粘贴。我们也可以使用Y命令来复制一行,或是用数字做前缀来明确的指明复制几行,然后用p命令粘贴到我们所希望的地方。
在vi中还有一个比较有趣的命令便是!命令。这个命令告诉vi编辑器我们要来运行一个系统命令,这时vi就会将以后的输入做为一个命令来运行,运行的结果也就是输出将替代当前光标所在的行的内容。例如我们在 Linux中知道sort是一个排序的命令,他是将一个文件或是一些输入进行排序后输出到屏幕或是其他的文件。那么我们想对vi中的内容进行排序来如何做呢?这时我们可以将光标放在文本的开头的一行,输入!10G,这时vi就知道要到10行,也就是我们要操作的内容是第1行到第10行,这时在vi的下端就会显示出!,这时我们就可以输入命令了,sort。也就是我们要输入的完整的命令应为:!10Gsort。这样回车以后vi就会对文本中的10行进行操作,将操作的结果替换掉现在vi中的文本来显示。而!!是在一行运行命令,并且输入的结果为当前行的内容。例如我们输入!!ls,就会将ls的执行结果显示在vi中,并且是当前的内容,如果此行原先有内容将会被替换掉。
如果我们完成一个文件的编辑而要开始一个新的编辑时我们最平常的做法就是退出当前的文件而重启vi开始一个新的编辑。事实我们可以直接在vi中输入:vi file而开始一个新文件的编辑。如果当前的文件你没有保存,vi会给出警告的信息,这时你可以输入:write来保存当前的文件。你也可以用:vi!file强制开始一个新文件的编辑。与vi相类似的一个命令是:view,所不同的是他以只读的方式打开一个文件,这时vi会给出警告信息,但是你也可以进行修改,只是你不能进行保存,如果你要保存,vi就会给出提示。当然在这样的情况下你可以用命令:write!来强制保存。
我们还可以使用vi来编辑多个文件。我们可以在终端输入vi file1 file2 file3,这样我们就可以来编辑多个文件了,在默认的情况下vi来显示第一个文件,如果要切换到下一个文件我们可以输入:next,这样我们就可以切换到第二个文件了。如果你没有保存,vi会给出提示信息,这时也就不可能切换到第二个文件了。这时我们可以输入:write进行保存然后再切换到第二个文件,或者是我们输入:write:next.来保存后再切换到第二个文件。或者是我们可以用:wnext来简写这个命令。当然我们也可以用命令:next!来强制切换到第二个文件。当然这样你所做的改动也就会丢失掉。为了避免这样的情况,我们可以打开vi的自动保存功能。:set autowrite.这样我们就不会为没有保存而收到提示信息了。关闭自动保存的命令为::set noautowrite.当然next命令也可以用数字做前缀来指明所要执行的次数。如何来确定我们在编辑哪一个文件呢?我们可以用这样的命令来明确我们所编辑的文件::args.这个命令会显示出我们所打开的文件,同时会显示我们正在编辑的文件。如果我们想要回到上一个文件我们可以用这样的命令::previous或是:Next.如果你要保存当前的文件并切换到前一个文件可以用这样的命令::wprevious或是:wNext.如果我们要编辑第一个文件我们可以用:first或是:rewind来快速的切换到第一个文件,同理如果我们要编辑最后一个文件我们可以用:last来快速切换。如果我们在一个文件中进行一些改动,再切换到另一个文件中进编辑,这时我们就可以用CTRL_^来切换这两个文件。