Vimdiff---VIM的比较和合并工具,vimdiff---vim合并


本文来自IBMDW   http://www.ibm.com/developerworks/cn/linux/l-vimdiff/

源程序文件(通常是纯文本文件)比较和合并工具一直是软件开发过程中比较重要的组成部分。现在市场上很多功能很强大的专用比较和合并工具,比如 BeyondCompare;很多IDE 或者软件配置管理系统,比如Eclipse, Rational ClearCase都提供了内建的功能来支持文件的比较和合并。

当远程工作在Unix/Linux平台上的时候,恐怕最简单而且到处存在的就是命令行工具,比如diff。可惜diff的功能有限,使用起来也不是 很方便。作为命令行的比较工具,我们仍然希望能拥有简单明了的界面,可以使我们能够对比较结果一目了然;我们还希望能够在比较出来的多处差异之间快速定 位,希望能够很容易的进行文件合并……。而Vim提供的diff模式,通常称作vimdiff,就是这样一个能满足所有这些需求,甚至能够提供更多的强力 工具。在最近的工作中,因为需要做很多的文件比较和合并的工作,因此对Vimdiff的使用做了一个简单的总结。我们先来看看vimdiff的基本使用。

启动方法

首先保证系统中的diff命令是可用的。Vim的diff模式是依赖于diff命令的。Vimdiff的基本用法就是:

 

# vimdiff  FILE_LEFT  FILE_RIGHT

 

或者

 

# vim -d  FILE_LEFT  FILE_RIGHT

 

图一就是vimdiff命令的执行结果的画面。


图1 

从上图我们可以看到一个清晰的比较结果。屏幕被垂直分割,左右两侧分别显示被比较的两个文件。两个文件中连续的相同的行被折叠了起来,以便使用者能 把注意力集中在两个文件的差异上。只在某一文件中存在的行的背景色被设置为蓝色,而在另一文件中的对应位置被显示为绿色。两个文件中都存在,但是包含差异 的行显示为粉色背景,引起差异的文字用红色背景加以突出。

除了用这种方法启动vim的diff模式之外,我们还可以用分割窗口命令来启动diff模式:

 

# vim FILE_LEFT

 

然后在vim的ex模式(也就是"冒号"模式)下输入:

 

:vertical diffsplit FILE_RIGHT

 

也可以达到同样的效果。如果希望交换两个窗口的位置,或者希望改变窗口的分割方式,可以使用下列命令:

1. Ctrl-w K(把当前窗口移到最上边)
2. Ctrl-w H(把当前窗口移到最左边)
3. Ctrl-w J(把当前窗口移到最下边)
4. Ctrl-w L(把当前窗口移到最右边)

其中1和3两个操作会把窗口改成水平分割方式。

 

接下来试试在行间移动光标,可以看到左右两侧的屏幕滚动是同步的。这是因为"scrollbind"选项被设置了的结果,vim会尽力保证两侧文件的对齐。如果不想要这个特性,可以设置:

 

:set noscrollbind

 

可以使用快捷键在各个差异点之间快速移动。跳转到下一个差异点:

 

]c

 

反向跳转是:

 

[c

 

如果在命令前加上数字的话,可以跳过一个或数个差异点,从而实现跳的更远。比如如果在位于第一个差异点的行输入"2]c",将越过下一个差异点,跳转到第三个差异点。

 

文件比较的最终目的之一就是合并,以消除差异。如果希望把一个差异点中当前文件的内容复制到另一个文件里,可以使用命令

 

dp (diff "put")

 

如果希望把另一个文件的内容复制到当前行中,可以使用命令

 

do (diff "get",之所以不用dg,是因为dg已经被另一个命令占用了)

 

如果希望手工修改某一行,可以使用通常的vim操作。如果希望在两个文件之间来回跳转,可以用下列命令序列:

 

Ctrl-w, w

 

在修改一个或两个文件之后,vimdiff会试图自动来重新比较文件,来实时反映比较结果。但是也会有处理失败的情况,这个时候需要手工来刷新比较结果:

 

:diffupdate

 

如果希望撤销修改,可以和平常用vim编辑一样,直接

 

<ESC>, u

 

但是要注意一定要将光标移动到需要撤销修改的文件窗口中。

 

在比较和合并告一段落之后,可以用下列命令对两个文件同时进行操作。比如同时退出:

 

:qa (quit all)

 

如果希望保存全部文件:

 

:wa (write all)

 

或者是两者的合并命令,保存全部文件,然后退出:

 

:wqa (write, then quit all)

 

如果在退出的时候不希望保存任何操作的结果:

 

:qa! (force to quit all)

 

 

上下文的展开和查看

比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数,可以这样设置:

 

:set diffopt=context:3

 

可以用简单的折叠命令来临时展开被折叠的相同的文本行:

 

zo (folding open,之所以用z这个字母,是因为它看上去比较像折叠着的纸)

 

然后可以用下列命令来重新折叠:

 

zc (folding close)

 

下图是设置上下文为3行,并展开了部分相同文本的vimdiff屏幕:


 

 

结论

在无法使用图形化的比较工具的时候,或者在需要快速比较和合并少量文件的时候,Vimdiff是最好的选择。


问WORD里的比较并合并文档怎使用?

F1会吗?以下内容摘自WORD2002帮助内容。一:关于比较和合并文档 使用比较和合并功能来比较任意两篇文档时,Microsoft Word 以修订的形式显示其差别。 批注框显示插入或删除的内容,格式更改和批注。 1.协作处理文档 如果多名审阅者在原始文档的不同副本中返回修订和批注,您可以将他们所作的所有修订合并到一个单独的文档中,然后从该文档审阅每一处修订。将文档送交审阅后,可以继续对其进行编辑;Word 将同时显示您添加的内容和审阅者所作的修订。 审阅者最好启用“修订”功能来编辑文档(单击“工具”菜单,指向“修订”可设置修订功能),但如果未启用该功能,Word 会检测并显示所作的修订。 2.选择显示结果的位置 选定要比较的文档后(目标文档),可以选择三种位置之一来显示合并结果。 合并 修订合并至目标文档中 合并至当前文档中 修订从目标文档合并至当前文档 合并至新文档中 当前文档和目标文档合并至一个新文档中 3.用有效的黑线比较文档 使用“有效的黑线”选项时(在“工具”菜单上单击“比较并合并文档”可显示该选项),Word 比较文档并仅显示两文档间更改的部分。即以前对文档所作的修订不显示为修订。Word 在显示文档的差异之前,预先接受了以前所作的修订。没有对被比较的文档进行更改。该类型的比较通常显示于新建的第三篇文档中。 注意 如果您要比较不同审阅者所作的修订,请不要选中该选项。而应使用合并命令之一。 二:比较与合并文档 打开编辑后的文档副本。 在“工具”菜单上,单击“比较并合并文档”。 选择原始文档,单击“合并”旁边的箭头,然后执行下列操作之一: 若要在原始文档中显示比较结果,请单击“合并”。 若要在当前打开的文档中显示结果,请单击“合并到当前文档”。 若要在新文档中显示结果,请单击“合并到新文档”。 注意 若要保证最佳的合并效果,应保证在“选项”对话框(单击“工具”菜单中的“选项”)的“安全性”选项卡上选中“存储用于增强合并精确性的随机编号”复选框。 如果已经用“文件”菜单中的“版本”命令在一个文件中保存文档的多个版本,并且要将当前版本与早期版本进行比较,请先用不同的名称将早期版本保存为独立的文件。 三:将多位审阅者的修订和批注合并至一篇文档 打开要将修订合并到其中的文档。 在“工具”菜单上,单击“比较并合并文档”。 打开一篇含有要合并的修订的文档。 单击“合并”旁边的箭头,然后单击“合并到当前文档”。 重复步骤 2 至步骤 4,直至合并完文档的所有副本。 注意 为使多个审阅者的合并达到最佳的效果,请单击“工具”菜单中的“选项”,然后确认选中“存储用于增强合并精确性的随机编号”复选框。 Microsoft Word 一次可以保存一组格式变动。因此,在合并多个文档时,系统会提示用户是保持原始文档的格式还是使用当前编辑文档的格式。如果不需要跟踪修订标记,可以清除“比较并合并文档”对话框中的“查找格式”复选框。
 

EXCEL多表合并汇总工具(数据量比较大)

下载一个excel的易用宝,免费小工具,使用里面的合并工作簿功能可以实现你的要求。



 

相关内容

    暂无相关文章