非常强大的文件比较工具:Vimdiff

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情
各种 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",将越过下一个差异点,跳转到第三个差异点。





回页首


文件合并

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


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是最好的选择。



参考资料

gvim操作笔记 gg:到顶部 GG:到底部 进入编辑模式:i 删除选中内容:d 全文替换:(by 王彬)(有:):%s/x1/x2/g;即全文x1被替换为x2,g:代表全文 局部替换:n1,n2s/x1/x2/g;用x2替换n1到n2行的x1; s 命令来替换字符串 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每行的第一个 vivian 为 sky . 阅读详情

相关推荐

第四课:Vi/Gvim编辑器的基本操作

Linux中vi/gvim编辑器的基本操作!

qq_47485904的博客 977

Linux常用高级指令(三)

文章目录一、Linux高级指令集锦二、Linux高级指令详解2.1.ln—(创建软连接,以便于查找)2.2.chmod—(改变文件/文件夹权限)2.3.find—(查找文件)2.4.grep—(查找文件内容)2.5.gvimdiff—(比较文件内容)2.6.du -sh—(查看自己的空间占用)2.7.ps -u—(查看自己使用的进程信息)2.8.top—(查看服务器所占用资源,实时进程个)2....

Mr.翟的博客 5065

使用 vimdiff 比较文件的技巧

1. 使用 vimdiff 命令可以比较两个文件的差异,不同的地方高亮显示,如下图所示: 2. 在一行不同处,输入do可将另一个buffer的改动应用于当前buffer,输入dp 可将当前buffer的该行内容应用于另一个buffer。 3. 输入] c跳到下一个不同行;输入[c 跳到上一个不同行。 4. 横向对比时,由于屏幕宽度有限,所以每次要到两个buffer分别:set wrap来...

夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远. 4186

Gvim技巧

gvim使用技巧,在芯片设计或者FPGA开发中提高工作效率!

IT_Pengpeng的博客 846

Linux下的文件比较工具

KDiff3 最新版本为0.9.92,KDiff3 是一款用来对文件或目录进行比较/合并的工具,在比较时它可以同时针对两个或者三个文件/目录而进行。通过比较,它将文件/目录的差异按行加以显示。同时,KDiff3 提供有自动化的合并工具,方便使用者进行有关合并的操作。此外,KDiff3 支持 Unicode 编码,集成了编辑器,可以自动合并版本控制历史。虽然 KDiff3 主要为 KDE 桌面

Wait for 的专栏 1447

vim实用指南(9)vimdiff好用的可视化文本对比工具

各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具vimdiff。希望能对在 Unix/Linux 系统上进行开发的朋友有所帮助。 源程序文件(通常是纯文本文件比较和合并工具一直是软件开发过程中比较重要的组成部分。现在市场上很多功能很强大的专用比较和合并工具,比如 BeyondCompare;很多IDE 或者软件配置管理系统,比如Eclipse, Rational ClearCase都提供了内建的功能来支持文件比较和合

二进制君 7451

使用vimdiff比较两个文件并合并文件(转)

如果你工作在linux,如果你没有svn乌龟(那个可视化svn工具)来进行文件比较,如果你想进行两个文件的合并,请使用vimdiff。linux自带工具,比什么meld之类好多了。 本文转自 http://www.ibm.com/developerworks/cn/linux/l-vimdiff/,原文作者为 高 延斌 各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点

christin_zhm的专栏 3002

vimdiff 少量文件合并,方便快捷

vimdiff 使用技巧 各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具vimdiff。希望能对在 Unix/Linux 系统上进行开发的朋友有所帮助。 源程序文件(通常是纯文本文件比较和合并工具一直是软件开发过程中比较重要的组成部分。现在市场上很多功能很强大的专用比较和合并工具,比如 Bey

mt_rand的专栏 797

vimdiff 使用技巧

vimdiff 使用技巧 各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具vimdiff。希望能对在 Unix/Linux 系统上进行开发的朋友有所帮助。 源程序文件(通常是纯文本文件比较和合并工具一直是软件开发过程中比较重要的组成部分。现在市场上很多功能很强大的专用比较和合并工具,...

150

文件差异比对 vimdiff和cat

vimdiff a.sql b.sql //可以比对两个数据表及文件的差异性 //注:使用vimdiff时必须排序 cat A.txt B.txt | sort | uniq -u  

u012160319的专栏 629

技巧:Vimdiff 使用

转载:http://www.ibm.com/developerworks/cn/linux/l-vimdiff/ 源程序文件(通常是纯文本文件比较和合并工具一直是软件开发过程中比较重要的组成部分。现在市场上很多功能很强大的专用比较和合并工具,比如 BeyondCompare;很多IDE 或者软件配置管理系统,比如Eclipse, Rational ClearCase都提...

weixin_30456039的博客 77

[Linux] vimdiff 快速比较和合并少量文件

纯文本文件比较和合并工具一直是软件开发过程中比较重要的组成部分,vimdiff 能够在比较出来的多处差异之间快速定位,很容易的进行文件合并操作。在需要快速比较和合并少量文件的时候,vimdiff是很好的选择。 vimdiff 基本用法: 首先保证系统中的diff命令是可用的。Vim的diff模式是依赖于diff命令的。 启动方法1. vimdiff file1 file2 …2. vim -...

weixin_34235371的博客 108

Vimdiff---VIM比较和合并工具

本文来自IBMDW http://www.ibm.com/developerworks/cn/linux/l-vimdiff/ 源程序文件(通常是纯文本文件比较和合并工具一直是软件开发过程中比较重要的组成部分。现在市场上很多功能很强大的专用比较和合并工具,比如 BeyondCompare;很多IDE 或者软件配置管理系统,比如Eclipse, Rational ClearCase都提供了内...

weixin_30788619的博客 75

Vimdiff的用法

Vimdiff的用法 (2009-02-18 22:07:00) 转载▼ 标签: 杂谈 分类:Linux/Unix 手工做code merge的时候,经常会用到文件比较与同步的工具vimdiff是我比较喜欢的。 首先保证系统中的diff命令是可用的。Vim的diff模式是依赖于diff命令的。 Vimdiff的基本用法就是: #

kentyu001的博客 617
上一篇: linux下线程调用sleep,进程挂起
下一篇: linux下的bash与sh 详解以及例子
hankwangwang
博客等级 码龄19年 1897粉丝 200原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值