各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具:vimdiff。希望能对在 Unix/Linux 系统上进行研发的朋友有所帮助。

源程式文档(通常是纯文本文档)比较和合并工具一直是软件研发过程中比较重要的组成部分。现在市场上很多功能很强大的专用比较和合并工具,比如 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",将越过下一个差异点,跳转到第三个差异点。

文档合并

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


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!