不管你有多少文件要编辑, 你都可以在Vim在处理它们. 你定义一个要编辑的文件列表. 从一个文件转到另一个文件. 也可以在不同文件之间复制粘贴.
先看一下怎么编辑一个文件。目前为止我们使用Vim的方式还是为每一个要编辑的文件运行一次Vim.这是最简单的用法. 命令:
:edit foo.txt
可以在当前Vim中开始编辑另一个文件. 当然你可以用任何文件名来替代“foo.txt”. Vim会关闭当前正在编辑的文件打开指定的新文件进行编辑. 如果当前文件还有未存盘的内容, Vim会显示如下的错误消息同时也不会打开另一个文件:
E37: No write since last change (use ! to override)
Vim在每条错误消息前放上它对应的错误ID号, 这样
如果你从简单的错误信息中还不知道错误的原因时, 可以通
过帮助系统查找这个ID: :help E37
你可以在启动Vim时就指定要编辑多个文件. 如:
vim one.c two.c three.c
该命令启动Vim并告诉它你要编辑3个文件. Vim将在启动后只显示第一个文件. 完成该文件的编辑后, 可以以命令:
:next
开始下一个文件的编辑. 如果你的当前文件中有未存盘的内容, 你会象前面一样得到一个错误消息, “:next”命令也不会继续. 这与前面提到的“:edit”命令一样. 要放弃这些改动, 用:
:next!
但多数情况下人们还是要保存工作成果并继续下一个文件的编辑. 有一个命令合并了这个过程:
:wnext
:w 在vim中表示保存的意思,:q 则表示退出,:q! 表示强制退出(不保存内容)
如果想知道当前在编辑那个文件,可以通过查看窗口的标题条得知你当前正在编辑的文件名. 应该也会同时显示出象“(2 of 3)”这样的信息. 这意味着你正是编辑一个由3个文件组成的文件列表中的第2个. 如果你想查看整个列表中就有哪些文件, 使用命令:
:args
这是“arguments”的简写形式. 输出结果形如:
one.c [two.c] three.c
这就是你启动Vim时指定的要编辑的文件列表. 你当前正在编辑的那一个文件将会以方括号括起来.和:next 命令相对的是 :previous 从字面上就可以理解这个命令是用来编辑前一个文件的,像这种命令还有 :last(编辑最后一个文件) :first(编辑第一个文件) 不过 :previous 有 :wprevious这样的命令,然而:last 和 :first却没有,这一点要记住。
当你在不同文件之间转移时, 你必需记住用”:write”命令来存盘.否则就会得到一个错误消息. 如果你确定自己每次都是要保存文件, 就可以告诉Vim每当需要时就自动保存文件, 不必过问:
:set autowrite、
如果你正在编辑一个不希望它被自动保存的文件, 还可以把该选项关闭:
:set noautowrite
不用重新启动Vim, 你就可以重新定义一个文件列表. 下面的命令定义了要编辑3个文件:
:args five.c six.c seven.h
或者用一个通配符, 就象在shell使用通配符一样:
:args *.txt
Vim会打开列表中的第一个文件. 同样, 如果当前文件被改动但没有存盘, 你需要先保存当前的文件, 或者用”:args!”(加了一个!)放弃当前文件中未存盘的内容.
CTRL-^命令是一个很有意思的命令,上面的:next 和 :previous 命令名字都太长了,用起来不方便,而CTRL-^可以实现在文件中切换(切换到下一个文件),如果到达了最后一个文件,那么再下一个文件就是第一个文件。`”(先输入键盘ESC下面的那个键,然后输入引号”)则会自动跳到上次你离开文件时光标所在的位置。`.(先输入ESC下面的键,再输入一点.)会跳到你最后一次对文件进行修改的位置。
还有一种在文件中快速跳跃的技巧,可以用”mx“在一个中某个设置一个标记, 然后用”`x“可以将光标移到该位置. 这只在当前文件内有效, 如果你编辑了其它的文件并且也在其中设置了标记, 这些标记将只对这个的文件有效. 每个文件都有它自己的标记. 它们是局部于文件的.
目前为止我们用的标记还都是以小写字母命名的. 还有一种以大写字母命名的标记. 它们是全局标记, 它们可以用在任何文件中. 比如假设我们正编辑”foo.txt”. 到文件的半中间(“50%”)处设置一个名为F的标记(F意为foo):
50%mF
现在转而编辑”bar.txt”并在其最后一行设置一个名为B(B意为bar)的标记
GmB
现在你可以用 “`F” 命令跳转到文件foo.txt的半中间. 或者编辑另一个文件, “`B” 命令会再把你带回文件bar.txt的最后一行.Vim会一直记得你在文件中设置的标记, 直到你改变标记的位置为止.所以你可以设置一个标记后成几个小时做别的事情, 需要的时候还可以用该标记回到它所代表的位置.把标记的名字与它所代表的位置联系起来会十分好记. 比如, 用H代表header文件, M 代表Makefile, C代表C源文件.
要知道某个标记所代表的位置是什么, 可以将该标记的名字作为”marks”命令的参数:
:marks M
你也可以连续跟上几个参数:
:marks MCP
vim的功能太强大了,这些功能在其他的编辑器上大多是无法实现的。不过vim还有一个前大的功能就是自动备份的功能,现在很多软件都有自动备份的功能,但是vim的自动备份更加个性化。通常情况下Vim不会生成备份文件. 如果你需要的话, 只需要执行命令:
:set backup
生成的备份文件名将是原文件名后面附加一个~. 如果原文件是data.txt,则生成的备份文件是data.txt~.如果你不喜欢这个默认的备份文件名后辍, 你可以用下面的命令重新指定一个:
:set backupext=.bak
这将会生成一个名为data.txt.bak的备份文件.如果你在编辑的是程序源文件, 你可能会希望保存一份修改前的原始文件的一个副本. 但是用备份文件的话它会在每次你写文件时被覆盖.这样备份文件将总是保存前一个版本的内容, 而不是原始的版本. “patchmode”选项可以让Vim保存原始文件, 它指定了备份该原始版所用的文件扩展名:
:set patchmode=.orig
如果:你第一次开始编辑data.txt文件, 改一些东西然后存盘, Vim会保留一份该文件的原始版在”data.txt.orig”中.如果你继续修改该文件, Vim也会注意到名为”data.txt.orig”的文件已经存在, 后续生成的备份文件将被命名为”data.txt~”(或者你用 “backupext” 选项指定的其它扩展名).如果你把“patchmode” 选项设置为空(默认情况正是如此), 文件的原始副本就不会被额外保存.