现在的位置: 首页 > 综合 > 正文

vi 编辑器的使用

2013年10月02日 ⁄ 综合 ⁄ 共 24276字 ⁄ 字号 评论关闭
vim使用在于积累, 实用多了自然就会了, 每学一个功能都要记录下来, 便于以后翻看。微笑

一 Vi的启动与退出
vi中有两种模式:一是命令模式,一是编辑。命令模式是用来输入命令行来完成工作的。而编辑模式是用来编辑文本的。在两种模式中切换可以通过Esc 来完成。在我们完成了文本编辑以后可以这样的来退出:
:q 这是退出的命令,如果你已经做过了改动,那么就会提示错误。
:q! 这也是一个退出命令,与上一个不同的是,我已经做过了改动,但是我想放弃这些改动,从而用这样的命令。
:w 这是文件写入的命令,但是执行完这个命令后并没有退出vi.
:wq 这个命令的意思是保存并退出

:ZZ
二 Vi的基本编辑命令
在 启动了Vi以后是在命令模式的,这是可以输入i(insert)进入插入模式。这时会在Vi窗口的下端显示出你这时的状态。这时你就可以来输入文本了。在 这样的情况下,你可以用Backspace来Delete来删除一个字符。用方向键来控制光标。其实在知道了这样的几个命令后就可以用来编辑文档了。但是 这样的几个命令并不能保证你能高效的来完成你的工作。而事实上在命令模式下我们用键盘来移动光标而不用将手离开键盘去按方向键,这样就可以大大的增强你的 编辑速度。我们可以用h(left),j (down),k(up),l(right)这几个键来移动光标。我们可以将光标放在一个字符上同时按下x键来删除这个字符。我们可以将光标放在某一行同
时按下dd,这样就可以将这一行删除。当然有的时候也许我们做了一些事情,不过我我们觉得以前的要更好一些,我们想要恢复到以前的状态,在这样的情况下我 们可以u和U这两个命令。u要撤销上一次的修改,而U将是撤销所记录的所有的修改。而有的时候我们觉得现在的工作要好一些,我们希望撤销刚才所做的撤销工 作,也就是我们要重做这些工作,这时我们可以使用CTRL_R命令来达到我们的目的。有时我们可以使用新增的命令,使用a和A来完成这样的工作。a在当前 光标所在的字符后面进入插入状态,而A是在一行的末尾进入插入状态。使用这两个命令可以方便我们进行文本的插入操作。在vi的编辑模式中,是将回车换行看
作新的一行的开始。有时我们希望新插入一行,这时可以使用o和O这两个命令来完成。o是在文本的下面新增一行并进入插入模式,而O是在文本的上一行新增一 行并进入插入模式。有了这些命令,现在的我们就可以比较方便的来完成我们的文本编辑工作了。但是有时候得到在线的帮助对于我们来说显得更为重要,要得到 vi的帮助,可以在命令的模式下输入:help,这样就可以得到vi的在线帮助了。要想退出帮助,可以输入退出命令,:q.为得到更明确的帮助,我们可以 明确的指明我们所需要知道的内容。例如我们想知道x一些更详细的内容我们可以输入:help
x.我们要想得到其他的帮助,我们就可以这样来得到我们想要的帮助。在vi中可以使用数字和命令组合的方式得到新的命令,例如3h,这样就可向左移动3个 字符。同样可以使用数字和其他的移动键进行组合来达到快速移到的目的。也可以是数字和其他的命令组合形成新的命令,例如3x就可一次删除3个字符。为了我 们更快速的掌握vi的使用,vi本身也提供了一个学习的教程,只要你能耐心的做下来,我想使用vi对你来说应不再是一件难事了。进入vi的学习教程,可以 在终端输入vitutor.这样就可以进入vi的学习教程,为了得到更多的帮助信息,可以在vi的窗口内输入:help
tutor.这样就会得到更多的关开Tutor的帮助信息的。

在上一节的学习中,我们只是学习一些使用vi进行文本编辑的基本的命令。 有了这些的基本命令我们就可以完成一般的文本编辑任务。在这一节中我们要学习一些其他的一些编辑命令,这些命令将包括其他的一些光标移动命令,如何在一行 中快速的查找我们想要的东西,其他的一些文本删除和更改的命令,键盘宏和特殊字符的输入。啊:)

在vi的编辑中,我们可以有多种的光标移动命令:

我 们可以用w命令向前移动一个字符,用b命令向后移动一个字符。就像其他的vi命令一样,我们也可以用数字来做前缀从而组成新的命令,来快速的移动。例如 4w就是向前移动4个单词,而5b则是向后移动5个单词。而我们在编辑的过程中又如何来快速的移到一行的开始或是结尾处呢?在vi中$和^可以来完成这样 的工作。$可以使光标移到一行的结尾处,而^可以使光标移到一行的开始处。$命令可以和数字进行组合形成新的移动命令,而^也可以和数字进行组合,但是组 合后组成的新的命令中数字却不起任何的作用。

在我们的文本编辑中我们就会移动光标是我们经常要做的事情,但是我们很快就会发现查找我们要 找的字符串也是我们经常要做的一件事。那么如何在文本编辑中快速的查找到我们想要的字符呢?在vi的编辑命令有几个这样的小命令可以帮助我们来完成这样的 工作:f是向前搜索的命令。例如fx是向前搜索字母x.利用f向前搜索的命令我们也可以快速的移动到指定的位置。而F是向左搜索的命令,也就是向后搜索。 例如Fx是向后搜索字母x。与f和F这两个命令相类似的是t和T这两个命令。t命令类似于f向前搜索命令,所不同的是t搜索到时并不是将光标停在目标字符
上,而是停在目标字符的前一个字符上。和他相反的就是这个F命令。当然这几个命令都可以和数字组合来形成新的命令来完成我们的工作。在搜索的工作过过程我 们可以使用ESC来退出搜索而开始我们新的工作。

在我们的工作中常常要求我们移动到指定的行,那么我们如何来做到这一点呢?我们当然可以 使用数字和方向键组合来完成。虽然这种方式不够快速,但是确实可以来实现。而在vi中提供了一个新的命令来完成,那就是G。例如3G可以使我们快速的移到 第3行。而1G则可以使我们移到文章的最顶端,而G则是定位到文章的最后一行。那么在vi的编辑中我们又如何来知道我们在第几行呢?我们可以使用:set number来叫vi加上行号,这样我们就可以很容易的知道我们所在的行号了,取消行号的命令为:set nonumber。那么在没有行号的文章中我们又如何来知道我们所处在的位置呢?我们可以使用ctrl+G命令来知道。这个命令可以清楚到告诉我们总共有
多少行,而当前我们又在多少行,以及所占的百分比等信息。在我们进行编辑的过程中我们可以使用CTRL-U和CTRF-D来进行上下的翻页。当然这样的功 能也可以通过功能键来实现。

在我们的文本编辑过程中另一件我们要常做的事情就是文本的删除了。我们可以使用dd来删除一行,我们还可以使 用dw来删除一个字符。删除的命令操作d是一个相当灵活的命令,我们可以用他来进组合来完成工作。例如d3w则是一次删除3个字符,而3dw则是指一次删 除一个字符,而这样的操作进行3次,即总的是也是删掉3个字符。而在d$则是删除从当前位置到本行结束的所有字符.也d命令相类似是的c命令,这是一个更 改的命令,所不同的是他在删除一个字符的同时进入插入状态,这样我们就可以进行另外的文本操作了。另一个有兴趣的命令则是.命令。.命令可以使vi重复执
行刚才执行的命令。

在我们进行文本编辑的时候,有时要用到合并行的命令,也就是将几行合并为一行,这时我们可以使用J命令。这个命令可以 将本行和下一行合并为一行。当然,就像大多数的Linux命令一样,我们可以使用数字来使几行合并为一行。例如3J就可以将当前行下的三行(包括当前行) 合并为一行。那么我们又如何时来做替换文本的工作呢?我们可以使用r的命令。例如rx就可以当前光标下的字符替换为x。我们当然也是可以用数字来组合以形 成新的命令来进行工作,例如5rd就是将当前光标以后的5个字符替换为d。有时我们要进行大小写的转换,这时我们就可以用~命令。这个命令可以实现在大小
写的转换。

在vi中一个比较有趣的东西便是键盘宏了,这个可以使我们实现多个命令的记录,有时这样可以高效的完成我们的工作。例如我们现 在的文本是 stdio.h stdlib.h math.h 但是我们都知道在C语言的编辑中我们所需要的是 #include #include #include 如何来做到?如果你有足够的耐心可以一句一句的来加,但是在这里我们可以使用键盘宏来完成我们的工作,这样我们就可以体会到他的强大之处了。开始输入 qa.其中的a是一个宏的名字,我们可以用任何我们喜欢的字母来代替,q是开始录制宏的命令标志。这样我们就可以开始我们的宏输入了:
^ 移到一行的开始 i#include 在一行的开始插入#include 在结束处加入> j 移到下一行 q 结束宏的录制这样当我们要使用宏时就可以输入@a,这样就可以执行这个宏了。我们还可以在执行命令前加上数字来告诉vi执行几次。这样我们就可以快速的完 成我们的一些工作了。在vi的编辑中我们还可以输入一些由平常的键盘不可以输入的字符,有关这样的信息我们可以输入:help digraphs得到更多的信息。 (注:在vi中我们通常所指的一行是以回车做为标志的,即只有输入回车才算是一行的结束,从而开始新的一行)附:打印特殊字符现在还弄不懂,看了那书也还
是弄不出来,希望朋友们能把成功的做法分享一下

vi学习使用笔记之三
我们在使用vi进行编辑文本的时候常作的一件事就是要在所编辑的文本中进行查找。如何快速的查找到我们想要的东西呢?在vi中我们可以使用f,F和t,T 来进行向前或是向后查找。
除了这些命令,我们还可以使用其他的一些命令来快速高效的完成我们的工作。在vi的编辑操作中,我们可以使用/string命令来查找字符串string,打下回车后,光标就能跳到正确的地方。在这个命令中/后的字符是我们想要查打的字符,而回车键则表明了命令的结束。
但是有时我们所想要查找的字符具有特殊的意义,例如.*[]^%?$~等等,那么我们又如何来查找这些具有特殊意义的字符呢?这时我们可以使用放在所要查找的字符前,这样再使用/来查找就可以正确的查找了。
有 时我们在进行查找操作时想要查找的内容并不仅在一处,我们想要做的是在整个文章中进行查找。那么我们又如何来进行我们刚才的查找命令呢?我们可以这样的来 做:/。这样我们就可以继续我们刚才的查找操作了。在这里回车是命令结束的标志。我们还可以使用n命令来继续刚才的查找命令。这两个命令都能达到同样的效 果,但是显然用n可以有更少的键盘操作。偷懒嘛:)
在vi中他还具有记录查找命令历史的作用,这样我们就不用输入刚才输入的查找命令了,而是只 需要在他所记录的查找命令进行一下查找就可以了。例如你刚才做过的三次查找分别是:/one,/two,/three.而现在输入/,然后按方向键的上或 是下我们就看到刚才查找的内容显示在vi的下面,这时只要打下回车我们就会找到我们要找的内容了。当然在vi中还在一些其他的查找选项,例如我们可选择高 亮的显示查找的文本,命令为::set hlsearch,关闭高亮显示的命令为::set nohlsearch.如果也想同时关掉刚才高亮显示的结果,可以用这样的命令::nohlsearch。在我们进行查找的选项中,我们还可以有这样的命
令::set incsearch。在我们打开这个选项以后,我们在进行查找时就会显示出不断匹配的过程。例如你想查找的内容是include,在打开这个选项后你可以 输入/i,光标定位在i上,再继续输入n光标定位在in上,如此直到查打到我们所要求的。关闭这个选项的命令为::set noincsearch。一般来说我们在进行查找时总是在向前查找,那么又如何来向后查找呢?我们可以使用?命令。这个命令就是向后查找的命令。而还有一 个命令N是逆向查找的命令,他可以实现立即反向查找。(注:在查找的时候我们还可以用一些其他的表达式来进行查找,例如/^string是在开头进行查
找,而/string$是在一行的末尾进行查找。不过看书我的理解是这样的,不过总是试验不成。而/c.m则是查找所有第一个字母为c,而第三个字母为m 的字串,由此可以实现一些查找的匹配)

我想我们在接触了vi以前一定会用一些其他的编辑器,在那些的编辑器里复制,剪切和粘贴都是最平 常的操作,而在vi中这些操作也是同样的存在的。在vi编辑器有一个注册的概念(concept of register),正是这个概念使我们可以时行多次的剪切和粘贴等的操作。在一般的编辑器中我们被限制只有一个剪切板可以用,而在vi中我们最多时可以 有26个剪切板可以来使用,这样就会大大的提高我们的完成工作的效率。而在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_^来切换这两个文件。

在使用vi进行文本编 辑的时候我们也可以打开多个窗口进行编辑。这也正是vi编辑器的强大这处。那么我们如何来打开多个窗口进行文本编辑呢?我们又如何在多个文本窗口中进行切 换呢?如何来控制窗口的大小呢?在vi编辑器还有一个缓冲区的概念,利用缓冲区我们可以进行多文本的编辑。
在使用vi进行文本编辑的时候我们也可 以打开多个窗口进行编辑。这也正是vi编辑器的强大这处。那么我们如何来打开多个窗口进行文本编辑呢?我们又如何在多个文本窗口中进行切换呢?如何来控制 窗口的大小呢?在vi编辑器还有一个缓冲区的概念,利用缓冲区我们可以进行多文本的编辑。打开一个窗口最简单的方法就是下面的命令::split。输入这 样的命令后vi就会将当前的窗口平分为两个。并且在这两个窗口中显示的是同一篇文章。如果你在其中的一个窗口进行文编辑,那么另一个窗口也会同步的显示出 你所做的工作。如何在两个窗口中进行切换呢?在gvim中要方便得多,只要用鼠标就可以进行窗口的切换。而在vim中则需要用命令来实现。CTRL_Ww
这个命令可以实现在两个文本窗口中进行切换。切换窗口还有另外的命令:CTRL_Wj 可以将光标定位在下一个窗口中,而CTRL_Wk可以将光标定位在上一个窗口中。如果想关闭 一个窗口可以用命令ZZ或是:q.当然了CTRL_Wc也可以做到同样的事情。我们打开一个窗口一般并不是要在两个窗口中显示同一个文件,我们常常需要的 是在两个窗口中显示两个文件来加快文件编辑的工作。如何在新窗口中打开一个文件来进行编辑呢?我们可以用这样的命令::split file.这样我们就可以在另一个窗口中打开文件file开始我们的编辑工作了:)。那么我们如何来控制窗口的大小呢?我们在输入split命令时可以带
上一个参数,这个参数 也就指定了打开的窗口的大小。例如我们可以这样的输入::3 split file。这样我们就可 以在一个新窗口中打开文件file,而这个窗口的大小有三行。当然我们也可以将这个命令中的空格去掉,也就是写成::3split file这样也可以达到同样的作用。与split命令相类似的一个命令就是:new命令。所不同的就是split命令打开一个新窗口,但是在两个窗口中显 示同一个文件,而new命令则是打开一个新窗口开始一个新文件的编辑.我们还可以打开一个新窗口,在这个窗口中打开一个文件来读。命令为:sview。这
个命令是:split和:view这两个命令的组合。在这样的多文本窗口中进行操作时我们常做一个工作就是要改变窗口的大小。可以使我们来改变窗口大小的 命令为: CTRL_W+这个命令增大窗口,默认增量为1 CTRL_W-这个命令减小窗口,默认值为1 CTRL_W=这个命令可以将几个窗口的大小变得相等。另外还有一个命令countCTRL_W_可以使得当前窗口变得count这样的高。如果没有指定 count将会使得当前窗口变得尽可能的最大。 :buffers 这个命令就会列出当前的编辑中所有的缓冲区状态。在这个状态列表中,前面的数字就是缓冲区的数字标记,第二个标记就是缓冲区当前的状态,而后一个则表明与
空上缓冲区所关联的文件名。他的一些状态是这样的: - 非活动的缓冲区(Inactive Buffer) h 隐藏的缓冲区(Buffer is hidden) % 当前的缓冲区(current buffer) # 交换缓冲区(Alternate buffer) + 文件已经被修改如果我们要选择一个缓冲区我们可以用这样的命令::buffer number number就是缓冲区状态列表中所显示出来的数字。我们也可以用文件名字来选择缓冲区: :buffer file 关于缓冲区有一些有用的命令可以快速的完成我们的工作:我们可以用下面的命令来分割当前的窗口开始编辑一个缓冲区::sbuffer
number 如果我们指明了数字,那么当前窗口就会显示数字所标记的那缓冲区中的内容,而如果没有指明数字,那么就会利用当前的缓冲区。当然这个命令我们也可以用文件 名来做为参数进行操作。对于缓冲区还有一些其他相关的命令: :bnext 到下一个缓冲区 :count bnext 到下一个缓冲区执行count次 :count sbnext 命令:split 和 :count bnext组合形成的命令 :count bprevious 到前一个缓冲区count次 :count sbprevious :count bNext
与:bprevious作用相同 :blast 到最后一个缓冲区 :brewind 到第一个缓冲区

在现在的vi版本,或者是说是在vim中,与其先辈区分开来的一个特征就是现在的 版本中有一个可视模式。这种可视模式可以使你加亮一个文本块然后整体进行命令操作。例如你可以用高亮显示出一个文本块,然后用d命令来删除这个文本块。这 种可视模式与其他的编辑相比的一个好处就是你可以在做改动以前看到你的操作对于所编辑的文本产生的影响。那么我们如何为用这种有趣的可视化模式来进行我们 的文本编辑工作呢?
vi编辑器学习使用之六在现在的vi版本,或者是说是在vim中,与其先辈区分开来的一个特征就是现在的版本中有一个可视模 式。这种可视模式可以使你加亮一个文本块然后整体进行命令操作。例如你可以用高亮显示出一个文本块,然后用d命令来删除这个文本块。这种可视模式与其他的 编辑相比的一个好处就是你可以在做改动以前看到你的操作对于所编辑的文本产生的影响。那么我们如何为用这种有趣的可视化模式来进行我们的文本编辑工作呢? 要进入可视化模式,我们可以输主命令v,这样在vi的状态行就会显示我们已经进行可视化模式了。在这样的模式下,我们移动光标,那么在光标起始的位置和光
标现在的位置之间的文本都会以高亮显示的。这时我们可以对这些高亮显示的文本整体进行命令操作,例如这时我们可以输入d命令,那么这些高亮显示的文本就会 被删除掉。一般来说可以化模式可以具体的分为三种可视化模式,一种就是我们刚才用v命令进入的所谓的字符式可视模式(character-by- character visual mode)。在这种模式下,我们在进行文本选择以高亮显示时是以字符为单位的,我们可以一个字符字符的来选择。而第二种就是所谓的行可视化模式 (linewise visual mode),这时我们可以输入V命令来进入这种可视化模式。这时我们所进行的操作是在以行为单位来进行的。还有一个命令可以使我们进入可视化模式,这就是
CTRL_v,这就是我们所要说到第三种可视化模式,他可以使一个矩形内的文本高亮显示,然后以这些文本为整体进行编辑操作。在可视模式下我们也可以得到 一些相关的帮助信息。当然在输入命令时要在所希望帮助的名称前有v_做为前缀。例如我们想得到一些关于在可视模式下进行删除操作的命令,我们可以这样的来 得到帮助信息::help v_d 当我们要退出可视化模式时,我们可以按ESC键退出。当然CTRL_c也可达到同样的作用。与ESC作用相同的还有CTRL_和CTRL_N. 在可视化模式下我们可以进行各种各样的编辑操作。如d命令可以删除那些高亮显示的文本内容,而D命令只是来删除一行,哪怕这一行中只有部分文本是高亮显示
的。与d和D命令类似的是复制y和Y命令。y命令是将高亮显示的文本复制下来,而Y只是将一行文本复制下来。c命令可以将以高亮显示的文本删除掉然后进入 编辑模式,而C命令的作用与其相类似,所不同的只是C命令只是删除一行文本。我们还可以利用可视化模式将几行文本合并为一行。J命令可以将高亮显示的文本 内容合并为一行,同时以空格来区分各行,而如果我们不希望看到这些空格,我们可以使用gJ命令。我们在可视模式下进行文本编辑时也可以进行可视化模式的选 择和切换。你可以在任何情况下进行这种切换,而切换的做法只是简单的输入那种可视化的命令操作。例如现在我们在字符模式的可视化模式下进行操作,而现在我
们想切换到块模式的可视化模式,这时我们只是要简单的输入CTRL_v可以了。当然我们也可以先用ESC来关闭当前的可视化模式,然后再选择我们所希望的 可视化模式. 对于程序员来说似乎这种可视化模式会有更大的用处,我们可以用一种可视化模式来高亮显示文本,然后用>命令来进行文本的缩进,我们还可以用,这个命 令中I是插入文本的命令,string是我们要插的文本,而Esc则是结束插入操作的命令。这时就会看到我们所输入的文本显示在文本块的左侧,也就是开头 的地方,当我们结束插入操作时我们就会惊奇的发现我们所输入的文本也会同时出现我们所定义的文本块内所包含的其他行的开头部分。同样当我们用c命令来操作
时我们也会发现类似的情况。当然了,在用c这个命令进行操作时你所输入的文本应不超过一行,否则的话将会只有第一行的文本会被改动。而C命令也会有相类似 的情况。我们也可以类似的来得到一些关于块操作的命令帮助:例如::help v_b_r

vi编辑器学习使用之七
vi是一个强 大的编辑器,他不仅可以用来处理我们平时的文本工作,他还可以用来写程序文件。在vi中有许多命令可以方便的完成我们的程序处理工作。在用vi 进行程序处理时,vi充分的显示出来了他的强大之处,他可以实现在语法加亮显示,实现自动缩进,实现括号匹配,还可以在程序中实现查找和跳转。

vi编辑器学习使用之七
vi 是一个强大的编辑器,他不仅可以用来处理我们平时的文本工作,他还可以用来写程序文件。在vi中有许多命令可以方便的完成我们的程序处理工作。在用vi进 行程序处理时,vi充分的显示出来了他的强大之处,他可以实现在语法加亮显示,实现自动缩进,实现括号匹配,还可以在程序中实现查找和跳转。
我们可以用这样的命令在vi中打开语法加亮显示的功能::syntax on。这样以后我们在输入的字符中,vi就会自动的识别出关键字,字符串以及其他的一些语法元素,并以不同的颜色来显示出来。这对于程序员来说是一个巨大的帮助。当然你可以自定义语法加亮显示的颜色。
一 般情况下,vi的这种语法加亮显示的功能可以工作的很好,但是有时我们也遇到一些小小的麻烦。也许我们都遇到过背景是白色而字体是浅黄色的情况,在这样的 情况下是非常难读的。vi编辑器有两种语法加亮的办法,一种是当背景为浅色时用,而另一种是当背景为深色时用的。当我们启动vi时,他会检测我们所使用的 端是哪一种背景颜色,是浅色还是深色,然后再应用语法加亮的颜色方案。当然了,有的时候vi也是可以检测出错的。我们可以用这样的命令来知道我们的背景的 情况::set background?。这样vi就会在底端给出我们具体的显示。如果vi检测的并不正确,我们可以用这样的命令来为他赋下正确的值::set
background=light或是:set background=dark.当然我们要清楚的知道,这样的操作要在打开语法加亮的命令之前来执行。vi实现语法加亮显示的功能是通文件的扩展名来文 件的类型从而实现功能的。但是有时我们在编辑一个C程序文件时并没有使用传统的扩展名,那么我们如何来告诉vi我们正在编辑的文件的类型呢?解决的办法就 是用filetype这个选项。例如我们要告诉vi我们正在编辑的是一个C程序文件我们可以这样的来做::set filetype=c。这样以后vi就会知道我们正在编辑的是一个C程序文件并正确的加亮语法显示。
除了语法加亮显示的功能以外,vi还提供了缩 进的功能。命令<<将使当前行向左移动一个移位宽度,而命令>>将使当前向右移动一个移位宽度。这个所谓的是移位宽度具体是多少 呢?在vi中默认的是八个空格的宽度。然而平时的经验可以表明当缩进是四个空格宽度时最有利于程序的阅读。那么我们如何将这个移动宽度定为四个空格的长度 呢?这时我们就可以用下面的命令来做到::set shiftwidth=4.而这时的命令仅是对当前的一行有效,我们也可以像其他的vi命令一样的在命令前用数字做为前缀还指定命令作用的范围。如5& lt;<就将缩进五行。
在vi中还有许多自动进行缩进的选项,一般有以下的几种:C缩进(cindent):这是C语言的缩进形式,采用这 样的缩进方式的程序语言有:C,C++,Java等。当采用这种缩进格式时,vi就会自动的采用标准的C语言形式。还有一种形式是 smartindent:在这种缩进模式中,每一行都和前一行有相同的缩进量,同时这种缩进形式能正确的识别出花括号,当遇到右花括号(}),则取消了缩 进形式。另外的一种缩进形式便是所谓的自动缩进(autoindent):在这种缩进形式中,新增加的行和前一行有相同的缩进形式。vi编辑器可以很好的
识别出C,C++,Java以及其他的一些结构化程序设计语言,并且能用C语言的缩进格式来很好的处理程序的缩进结构。我们可以用这样的命令来打开C语言 形式的缩进结构::set cindent.这样以后vi编辑器就会用C语言的缩进形式来正确的处理程序文件。一般而言C缩进结构可以满中绝大多数人的需要,当然了不同的人有不同的 编程风格,如果你不喜欢这样的缩进结构,你可以自己定义自己的缩进形式。也许我们做程序设计的人并不想每一次想要编辑C程序文件时都要用命令:set cindent来打开C缩进形式,为了解决这样的问题,我们可以改写vi的配置文件来使vi能够自动的完成这样的工作。我们
在.vimrc(UNIX/LINUX)或是_vimrc(WINDOWS)中加入下面的几句:
:filetype on
:autocmd FileType c,cpp:set cindent
第一行是打开vi文件类型识别功能,第二行是如果所识别的文件类型为C或是C++文件那么便打C缩进形式。
在 vi中除了C缩进形式以外我们还有smartindent缩进形式可以来用。在smartindent这种缩进模式中能够正确的识别出{和}。同时增加了 识C语言关键字的功能。如果一行是以#开头的,那么这种格式将会被特殊对待而不采用缩进格式。这种缩进格式不如cindent,但是却强于 autoindent。另外的一种缩进形式便函是autoindent。在其他的一些结构化程序设计语言如Pascal,Per或是Python语言中, 我们所希望的是新的一行能和上一行有相同的缩进形式,这时我们便可以打开autoindent缩进形式,:set
autoindent。这样就可以很好的来满足我们的要求了。
vi不仅有这些功能,而且还有更多的功能来快速的处理程序文件。其中一个便是可以快速的在文件中定位变量及宏定义等。其中一些常用到的命令有:
[CTRL_I/]CTRL_I    在本文件中以及在由#include命令包含进来的文件中进行查找光标下面的文字
gd/gD    查找变量的定义
[CTRL_D/]CTRL_D    跳到宏定义的地方
[d/]d/[D/]D    显示宏定义
这 几个命令中有一些需要说明的地方:[CTRL_I/]CTRL_I命令用来查找光标下面的文字,查找的范围不仅是在本文件中进行查找,而且还要查找 由#include所包含进来的文件中进条查找。变显查找的命令gd和gD有时并不能完美的完我们想要做工作。这是因为vi在理解C和C++的语法方面有 一些小的限制。但是大多数的情况下这几个命令还是可以很好的来完成我们工作的。[d/命令可以显示以当前光标下的内容为为名字的第一个宏定义,]d也有着 同样的作用,所不同的只是后者是从当前光标处查找下一个宏定义。当然这两个命令也可以在由#inlcude所包含进来的文件中进行查找。[D/]D命令可
以用来列出文件中的宏定义。这两个命令有着同样的作用,所不同的只是前者是列出当前光标以后的宏定义,而后者是从当前光标处的下一个宏开始列出文件中的宏 义。(注:此处由此书看来似乎是这样的,但是自己亲自来做时并没有出现这样效果)
我们在编写程序时常常要做的一件事便是括号的匹配,我们在vi中 可以用%命令来确定匹配的括号。例如我们将光标定位在其中一个括号处,然后执行命令%,光标就会定位在与其相匹配的括号处。有时我们在编写了一段程序后却 想着要将这一段程序进行缩进,这时我们可以用这样的命令来做到:将光标定位在第一个或是最后一个包含着所要缩进的程序块的括号处,然后执行下面的命 令:>%,这样就可以将这个程序右缩进一段距离。但是我们发现执行这个命令后花括号也一样的进行了缩进,有时我们这并不是我们想要的,我们想要的是 仅括号内的文本进行缩进。这时我们又应如何来做呢?这时我们可以用这样的命令:>i{.这个命令是说仅括号内的文本进行缩进。我们还可以用可视化的
模式来缩进文本块,具体的做法是这样的:
1 将光标定位在左括号或是右括号处。
2 进入可视化模式:v
3 选中括号内的文本:i}
4 缩进:>
当 我们用vi来编辑我们的程序文件时,他提供给了我们定位程序函数的功能。这对于我们想要理解一个程序是非常有帮助的。vi所定位的函数被包含在一个由 ctags的程序建立的文件当中。要建立一个名为tags的这样的文件,我们可以输入这样的命令来完成:$ctags *.c
这样以后当我们在vi中来编辑我们的程序文件时我们就可以任意的跳转到我们想要去的函数处,当然这得要求我们想要到函数存在。我们可以用这样的命令来到达我们要到的地方:
:tag function
这个命令甚至可以查找得到在其他文件中的函数。
在 完成函数跳转的功能命令中还有几个强大而有趣的命令。CTRL_]命令跳转到以光标下的字符串为函数名的函数处。这样就大大的方便了我们在C程序查找函数 的需要。例如你正在看一段名为write_block的函数程序,而在这个程序中调用了函数write_line。这个被调用的函数具体是来做什么的呢? 我们可以将光标定位在这个函数上,然用执行命令CTRL_]。这样vi就会马上跳转到这个函数的定义处。我们就可以清楚的看到这个函数的实现的方法。而在 这个函数中又调用了函数write_char,这时我们可以用同样的方法来查看这个函数的定义过程。命令:tags可以列出我们已经访问过的函数名称。但
是我们在走了一段路以后想回去又该怎么来做呢?命令CTRL_T可以使我们回到上一个访问的函数处。我们为了在函数跳转的命令,我们要用命令ctags建 立这文件来存放在C程序中所出现在的函数名,这时vi要建立一个栈来存入函数名。我们用命令CTRL_T回到上一个访问的函数处,这时我们还可以用命 令:tag来向前走一步,即回到前一个访问的函数处。我们也还可以像其他大多数的vi命令一样在此命令之前用数字来做前缀,指明要执行的次数。我们还可以 用这样的命令::tag function。这样我们就可以来到指定的函数处。
当我们用命令:tag时是将当前窗口中的内容由函数的内容所代替 了。我们也可以打开一个新窗口来显示函数的内容。这时我们就要用到下面的命令::stag tag。这个命令是要打开一个新窗口来显示tag指定的函数内容。我们也可以用命令CTRL_W_]来打开一个新窗口显示以光标下的字符串为函数名的函数 内容。我们也可以在这个命令前加下数字count做为前缀,这打开的窗口就是count这样的高度。
我想我们常会有这样的情况,那就是我们想要跳 到一个函数处却记清他的名字究竟是什么?这是我们要怎么办呢?在vi中有一个很好的解决办法,那就是我们可以用:tag /name来找到你想要的内容。例如在我们上面所举过的例子中曾提到了函数write_line。但是现在我们记不得他的全名了,只是记得好像有一个 line。这时我们如何来找到呢?我们可以用这样的命令来做::tag /line。这样vi就会将我们带到write_line定义的地方。我们还可以借助于一些表达式来精确的定位我们要去的地方。例子如我们似乎记得有一个
函数是以read开头的,这时我们可以这样的来查找::tag /^read。这个是说read所要查找的内容是以read开头的。或者说我们不能十分清楚的记得一函数的名称是DoFile,do_file还是 Do_File。这时我们也可以这样的来查找::tag /DoFile|do_file|Do_File。或者是我们可以写成这样的表达式::tag /[Dd|o_=[Ff|ile。这样我们就可以找到我们想要的内容了。一般情况下我们用这样的命令来查找时并不能精确的得到我们想要的东西,而是得到许 多匹配的选项。而我们可以用命令:tselect来列出所有这些合要求的内容。这个列表一般由这样的一些内容组成:
第一列的数字是这些标记 (tag)的编号,第二列这些内容的优先级,他一般包含三个字母:F完全匹配,如果没有则是忽略的情况;S静态标记,如果没有,则是全局标记;C则是说是 这个标在当前的文件中。在执行完这个命令后,:tselect会给我们一个机会,我们可以选择到标号为哪一个的内容处去,或者是选择离开。命令g]与命 令:tselect相类似,只是他是以光标下的内容为查找内容的。命令:tjump的作用与:tselect命令相同,所不同的只是当执行的结果只有一项 内容时,则自动的选中这个结果。命令gCTRL_]与此相同,只是他是当前光标下的内容为查找对象的。其他的一些相关的命令如下:
:count tnext    到下一个标记处
:count tprevious    到上一个标记处
:cout tNext    到上一个标记处
:cout trewind    到第一个标记处
:cout tlast    到最后一个标记处
命令:stselect与:tselect命令相同,所不同的只是前者将打开一个新窗口来显示执行的结果。与其类似的命令还有:stjump.
当 我们在编写makefile文件时我们所需要的缩进是一个tab,而不是8个空格。这样的区别是很难在屏幕上看出来的。这时我们可以用这样的命 令::set list,这样以后tab则显示为^I,同时在每一行的末尾显示$,这样我们就会很好的来区分这些细小的分别了,同时还有助我们来检查我们程序的正确性。 当然我们也可以选择用其他的字符来显示,通过listchars选项我们可以做到这一点。如果我们设置了expandtab选项,那么我们输入一个tab 时,vi实际上插入的空格。这对于我们编写makefile文件时是很不方便的。如果我们想真正的输入一个tab,而不是插入空格,这时我们可以输入
CTRL_V<Tab>,这时的CTRL_V告诉vi不要忽略以后的字符。有时在一个makefile文件中包含许多的文件,我们可以对这些 文件进行排序,具体的做法如下:
1 将光标放在文件列表的起始点
2 用命令标记这个位置:ma
3 到这个列表的底部
4 执行命令排序:!'a sort
我们也可以在可视模式下来排序:
1 移动到要排序的文本的顶部
2 进入可视化模式:V
3 移动到文本的底部
4 执行命令:!sort
vi 编辑器还可以允许我们在vi中执行编译程序的make命令,其命令为:make,这时就会来编译程序,同时会显示出错误来。这时我们就可以移到到出错的地 方来修正我们的错误,然后再重新编译,直到成功。如果我们的程序编译有错误,vi就会显示出错误的提示信息和错误的地方,同时vi会自动到第一个出现错误 的地方。我们在修改完错误以后,可以用命令:cnext来到下一个出错误的地方继续我们的工作。命令:cprevious和命令:cNext可以回到上一 个错误的地方。命令:clast可以到最后一个出错的地方,而命令:crewind可以到第一个出现错误的地方。而命令:cnfile可以到下一文件第一
个出错的地方。如果我们此时忘记了出现在的错误是什么,我们可以用这样的命令来显示出错信息::cc,如果我们想看到一个错误的列表,我们可以用这样的命 令来完成::clist。我们还可以用命令来显示一定范围内的错误。如:
:clist3,5    显示第三行到第五行的错误
:clsit,5    显示第一行到第五行的错误
:clsist5,    显示第五行到最后一行的错误
如 果我们已经运行make命令并且生成我们自己的错误信息的文件,我们可以用这样的命令来告诉vi这些情况::cfile error-file。error-file是make或是编译输出的文件。如果我们没有error-file文件,那么我们可以使用errorfile 这个选项在。退出错误的状态可以用命令::cquit.这些命令对于我们在使用一个集成的开发环境时会显得更有用一些.
errorfile选项会建立一个默认的文件,这个文件会被命令:clist和-q命令行选项所使用,但是这个文件并不会成为:make命令的输出文件。如果我们想要建立自己的默认错误文件可以使用下面的命令::set errorfile=error.list
:grep与:make相类似,他是执行外部的命令程序grep并显示输出。例如我们要在程序文件中查找变量ground_point我们可以使用下面的命令:
:grep -w ground_point *.c
-w 是告诉grep程序包仅查找单词ground_point,而不是任意匹配的结果。与前面的命令相类似,:cnext,:cprevious,:cc等命 令可以在这个匹配的列表中进行移动,:crewind,:clast分别移到到列表中的第一个和最后一个。:cnfile到下一个文件是的第一个。

vi 编辑器可以很好的完成一些我们要做的一些重复性的工作。例如我们可以在vi中设置缩写,这样当我们在输入一个单词时只需输入其中的一部分,而要vi来完其 余的部分。当然了,我们可以将我们喜欢的一些设置写入vi的配置文件,这样就不要我们每一次都要通过命令来完成了。除了这个功能以外,我们还可以在 vi中定义我们自己的功能按键,而不会影响到系统中的功能键。这样的功能是不是很有趣呢?

我们可以在vi中用一个缩写的字符来代替一个单 词,然后在我们想要输入这个单词时只要输入这个缩写的字符就可输入我们想要的单词了。我们如何来做到这些呢?这时我们要用到的vi命令 是:abbreviate.例如我们可以用ad来vi编辑器可以很好的完成一些我们要做的一些重复性的工作。例如我们可以在vi中设置缩写,这样当我们在 输入一个单词时只需输入其中的一部分,而要vi来完其余的部分。当然了,我们可以将我们喜欢的一些设置写入vi的配置文件,这样就不要我们每一次都要通过 命令来完成了。除了这个功能以外,我们还可以在vi中定义我们自己的功能按键,而不会影响到系统中的功能键。这样的功能是不是很有趣呢?
我们可以 在vi中用一个缩写的字符来代替一个单词,然后在我们想要输入这个单词时只要输入这个缩写的字符就可输入我们想要的单词了。我们如何来做到这些呢?这时我 们要用到的vi命令是:abbreviate.例如我们可以用ad来代替advertisement。这样我们在想输入advertisement的时候 只要输入ad然后打一下空格或是tab就可以输入advertisement了。具体的做法是这样的:
:abbreviate ad advertisement 这个命令就是在告诉vi我们设置advertisement的缩写为ad,这样我们在要输入advertisement的时候只要输入ad就可了,剩下的 工作vi会为我们完成的。当然了这个命令也可以为多个单词设置缩写。例如我们可以设置Jack Berry的缩写为JB。命令为::abbreviate JB Jack Berry 这样我们在输入了JB以后打下空格或是Tab,vi就会自动的用我们设置的单词来替换JB。对于程序员来说这样命令为我们提供了巨大的便利。例如我们可以
做出这样的设置:
:abbreviate #b /*************************
:abbreviate #e **********************/
这 个缩写可以在加快我们添加注释的速度。我们在编写程序文件时常有这样的习惯,那就是在程序的开头总是要加上一个注释块,来标明我们此程序的目的等。在这个 缩写中有一点要我们注意的地方,那就是我们希望在写程序的注释块时下一行要和上一行对齐,要做到这一点就要求第二行的注释开头的两个字母要是空格,但是在 这个缩写命令中会忽略到空格的作用,因而我们在写这个缩写时在开头写上,这样就会满足我们的要求了。也许有时我们会在一个文件中设置了多个缩写,我们可以 命令:abbreviate来列出我们这个文件中所有的缩写的设置。
另一个比较有趣和强大的命令就是:map命令,这个命令可以使得我们将键盘上的一个按键与vi中的命令绑定在一起。例如我们现在将一个单词用花括号括起来,例如我们要将amount变成{amount}的形式,这时我们就可以这样的来应用这个命令:
:map i{ea}
在这个命令中:map是vi中的命令,而F5则是说将下面的命令与F5键绑定,后面的则是具体的命令内容,i{是说插入字符{,然后退回到命令状态。e是移到单词的结尾处,a}则是增加字符}然后退至命令状态。
在我们做过这样的工作以后我们就可以来执行我们的命令了,我们将光标定位在一个单词上,例如amount,按下F5键,我们就会发现这时就变成了{amount}的形式。
在这里我们要注意的一点就是我们最好不要将在vi中有特殊命令的功能热键与某些命令进行绑定,如果是这样的话就会给我们带来麻烦。
同上面的:abbreviate命令相类似,我们也可以用命令:map来列出在这个文件中所有的功能键,包括我们自己定义的以及系统定义的。
我们在做过这样的设置以后,有时希望这样的设置在下一次使用时会继续有效,这时我们就要用命令:mkvimrc将我们所做的这些设置写入文件中。这个命令的格式如下:
:mkvimrc file
在这里file就是我们要将这些设置写入的文件名。我们可以用命令:source file来读出文件并执行文件中的内容。
在vi的启动过程中,vi会首先查找初始化文件。如果找到就会自动执行文件的内容。而这些初始化文件一般来说是这样的一些文件:
$HOME/.vimrc
$HOME/_vimrc
$HOME/.exrc
$HOME/_exrc
而在Windows和Dos系统中则是这样的一些文件:
$HOME/_vimrc
$HOME/.vimrc
$VIM/_vimrc
$VIM/.vimrc
$HOME/_exrc
$HOME/.exrc
$VIM/_exrc
$VIM/.exrc
而如果我们用一些图形界面的话,那么还会读一些其他的配置文件。如果我们要执行gvim那么$VIMRUNTIME/menu.vim也会被读进来。用命令:version我们可得到这些配置文件的信息。
例如我们可以在.vimrc中写入以下的一些语句:
:syntax on
打开语法加亮功能
:set shiftwidth=4
设置缩进宽度为4
:ab #d #define
将#define缩写为#d
:ab #b /************************
:ab #e *********************/
我们还可以加入一些其他的东西,这样就可大的方便我们的工作了。而这也正是vi的强大之处 。

现代的Vim编辑器是基于一个古老的名为vi的编辑器设计而成的,而vi基于一个更古老的基于命令行方式的ex编辑器设计而成的。ex编辑器是在屏幕产生以前相当流行的一个编辑,他是为那时古老的标准打印而设计的。
仅 管ex是基于命令行方式的,然而他也是真正意义上的一个强大而高效的编辑器。即使是在今天他也是发挥着作用。仅管现在的Vim编辑器有一套的命令系统,可 是有些事情还是要用ex的命令方式才可以更好的来完成。因而现在的Vim编辑器设计了与ex编辑器的接口,我们可以在Vim中使用ex方式的命令。而那些 以冒号开头的命令就是一个ex方式的命令。

如果你想执行单一的命令行方式的命令,那么你只输入:然后输入命令就可以了。例如我们在前面讨 论的:set number.事实上他就是一个命令模式的命令。在执行完这个命令以后,Vim编辑器又回到了他原来的状态。我们可以通过命令:ex选择进入命令行模式。 Q命令也有同样的作用。如果要选择回到正常模式(normal mode)也就是可视化模式(Visual mode),我们可以使用命令:visual.
命令:print(简写为:p)可以打印出选定的行。如果没有传递参数,他仅是打印当前的行。打印 完成以后回到打印行的开头。我们也可以指定要打印的行的范围。例如命令:1,5 print就是要打印1到5行。严格来说你不必须在数5和print之间输入空格,但是如果这样做后我们就会现这个命令看起来会更好。如果你仅仅是想打印 第5行,你可以用这样的命令::5 print.当然了我们也可以使用一些特殊的数字标记,例如字符$是指最后一行,因而如果我们想要打印全文的时候我们可以用这样的命令::1,$ print.而字符%是指整篇文章(1,$),因而我们也可用这样的命令来打印整篇文章::%
print,而.则是指当前行,我们要打印当前可以用:print命令而不带任何参数,也可以用这样的命令:.print。我们还可以用指定句子中内容来 打印选定的行。例如在我们的文章中我们可以用这样的命令来打印含有字符ex的行::/ex/ print。这样就会打印出含用ex的行,并会高亮显示出ex。同样命令:?ex? print也会达到同样的作用,而命令:?ex? print也正是打印含有ex字符的命令格式。
在前面的学习中我们曾学过标记命令m,例如我们可以在任何地方用命令ma做上标记,然后在其他的地 方可以用命令‘a回到做了标记的地方。这个命令也可以与print命令组合。例如我们可以在一个地方用命令ma做上标记,然后在其他的地方用命令mb做上 另外的标记,然后我们就可以执行下面的命令来打印这两个标记之间的内容了::'a,'b print
我们也可以在可视化的模式下来选定要打印的内容。例如我们用命令V进入可视化模式并选定一段内容,这时我们输入:就会在Vim的底部显示<,>两个字符,这两个字符分别指我们的选定内容的开头和结束部分。
命令:substitute可以使我们将指定的字符换成其他的字符。这个命令的格式是这样的:
:range substitute /from/to flags
在 这个命令中range是指定了范围,也就说是在哪些行里做替换。而后是说将字符串from替换成字符串to。在默认的情况下,这个替换命令仅是将一行中第 一个出的的字符替换成给定的字符。而如果我们想将所有出现的字符都替换成给定的字符我们就用g这个标记命令。例如::% substitute /from/to/g.这个命令就达到将所有出现from的地方全部替换成to。其他的标记(flags)包括:p(print),这个命令是告诉 substitute打印所做的改动。c(confirm),这个命令是告诉substitute命令在做出这样的改动以前要询问是否要做这样的改动例如
如果我们执行下面的命令::1,$ substitute /Professor/Teacher/c.在Vim就会显示我们将要做改动的文本,并显示下面的内容:
Prfessor: You mean it's not supposed to do that?
replace with Teacher(y/n/a/q/^E/^Y)?
这时你可以做出以下这样的回答:
y 执行这个替换
n 跳过这个替换
a 执行所有的替换不要做询问
q 退出,不做任何改动
CTRL─E  向上翻滚一行
CTRL-Y 向下翻滚一行
在 Vim的命令还有一些命令可以帮助我们很好的完成我的工作:例如命令:read filename可读进一个文件并将读进和内容插在当前行的后面。而命令:write是将文件写入。这是一个保存我们工作的方法。我们也可以用命 令:write newfile将当前的文件内容写入一个新的文件。一般情况下:write命令并不会覆盖已经存在的文件。我们可以用强制操作(!)选项来完成我们所需要 的操作并覆盖当前已经存在的文件。而这个命令对于我们要将一个大的文件分拆为小的文件时显得更有用。我们可以用可视化模式选定一个范围然后将这个选定的范
围写入新的文件,从而实现了分拆的目的。
我们还可以Vim中不需要退出而执行Shell命令。命令:shell可以使们进入命令终端执行我们需要的命令。当我们要退出终端回到Vim中时可以执行exit命令。我想这对于程序人员来说真是一个巨大的帮助。:)

在 我们谈起Vim编辑器似乎只是觉得他只是一个类似于一个命令行方式的文本编辑器。而事实上不是这样的。Vim在窗口环境中也可以完美的完成我们的工作。在 窗口环境下,我们不仅可以使用那些在Vim文本方式下的命令来完成工作,而且还有许多的菜单和其他的选项。这些都可以使得我们完美的完成我们的工作。
我 们要启动图形界面的Vim可以用下面的命令:gvim file。这样就可以打开图形界面来编辑文本file。图形界面下的Vim编辑器的外观因你所用的操作系统的不同而有所不同,就是同样的操作系统也会因你 所使用的工具集不同(Motif,Athena,GTK)而会呈现不同的外观。而值得向大家推荐的是GTK版本的Vim编辑器,当然其他版本的也是可以来 完美的完成我们的工作的。
在Windows系统中我们可以在标准形式下用鼠标来选择文本,而在X Window系统中我们也会有一个标准的系统来使用鼠标,但是这两种标准是不同的。然而比较幸运的是我们可以定制我们的Vim编辑器。我们可以使得我们的 Vim中的鼠标的行为看起来像是X Window系统中的鼠标的行为。下面的命令是设置鼠标的行为为X Window风格的鼠标行为::behave xterm。而下面的命令则是使得鼠标的行为是Windows风格的行为::behave mswin。在UNIX和Linux系统中的鼠标风格是xterm风格,而在Windows中的鼠标风格是在安装过程中选择的。为了控制鼠标的行为,命
令:behave有以下这些选项:
        Setting for        Setting for
Option        :behave mswin        :behave xterm
'selectmode'    mouse,key        (empty)
'mousemodel'    popup            extend
'keymodel'    startsel,stopsel    (empty)
'selection'    exclusive        inclusive
xterm的鼠标风格的行为主要有以下一些:
左键:        移动光标
拉动左键:    在可视化模式下选择文本
右键:        选中光标处到右键点击处的文本
中键:        在光标处粘贴选中的文本
Windows的鼠标风格的行为主要有以下一些:
左键:        移动光标   
拉动左键:    在选择模式下选中文本
<S-Left Mouse>    选中到光标处的文本
<S-Right Mouse>    显示弹出菜单
中键:        将系统剪切板中的文本粘贴到文件
(注:其中的S为Shift键)
其他的一些特殊的用法:
Shift+左键:    向前搜索光标处的文本
Shift+右键:    向后搜索光标处的文本
Ctrl+左键:    跳转到以光标处的文本为名字的标记(tag)处
Ctrl+右键:    跳转到前一个标记处
在 图形界面的Vim编辑器还有一个有趣的特征,那就是当我们点开一个菜单时就会发在子菜单的第一行有一条虚线,点击此虚线就可以将这个菜单移其他的地方。关 闭后Vim的菜单结构又恢复到正常的状态了。在GTK版本和Windows版本中的图形界面的Vim还有一个工具栏,这些工具可以快速的完成我们的工作。

虽 然现在的专业的文字处理软件例如MS Word,Star Office,Open Office等可以很好的来完成的一些文档处理的工作,但是人们仍然是喜欢用纯文本的形式来处理手中的文本.这里因为用纯文本处理的文件比较容易阅读,很 不你那些专业的字处理软件,有专门的文件存储格式,少了许多的麻烦.Vim是一个强大的文本编辑器,他也可以像那些专来的字处理软件一样来处理我们手中的 文本工作,从而使得我们的工作来得更漂亮.

Vim在默认的情况下是不会自动换行的,这也就是说我们在默认的情况下我们不得不自己 决伫回车的位置.这样的设置对于处理程序文件来说是一件相当好的事情,因为这样可以由我们自己来决定回定回车换行的位置,从而可以很好

抱歉!评论已关闭.