vimdiff对比文件夹

背景

在日常开发过程中免不了的是使用文件差异对比工具进行文本差异对比。常用的对比工具有meld、vimdiff、TextDiff等。但是meld、TextDiff等工具都是图形界面工具,对与纯粹的终端或者是linux服务器开发使用不是很友好。此时vimdiff这个vim的拓展工具的优势就体现出来了。

vimdiff的简单梳理

vimdiff是vim的一个强大的文件对比工具,vim作为一个终端上的文本编辑器,vimdiff同样也继承了这一优点,vimdiff是一个终端的文本对比工具。可以说唯一的缺点就是只能进行两个文件的比较。我们在实际使用的过程中往往需要对两个文件夹中的内容进行递归对比。此时vimdiff就显得有点无力了。

使用vimdiff进行文件夹的对比

此处直接给出脚本,通过脚本来递归对比每个文件。该脚本是在某篇博客的基础上做了细微的修改,原博主提交的github地址为https://github.com/fevin/diffdir.git。在这里我直接给出修改后的脚本。
dirdiff

#!/bin/bash

if [ $# -ne 2 ];then
    echo "$0: error"
    echo "Usage: '$0 dir1 dir2'"
    exit
fi

# get diff files list (use '|' sign a pair of files)
diff_file_list_str=`diff -ruNaq $1 $2 | awk '{print $2 " " $4 "|"}'`;

# split list by '|'
OLD_IFS="$IFS"
IFS="|"
diff_file_list=($diff_file_list_str)
IFS="$OLD_IFS"

# use vidiff compare files from diff dir
i=0
while [ $i -lt ${#diff_file_list[*]} ]
do
    read -p "diff ${diff_file_list[$((i))]}?(y/n)" auth
    if [ -z $auth ] || [ $auth == "y" ] || [ $auth == "Y" ];then
        vimdiff ${diff_file_list[$((i))]}
    fi
    i=$(($i+1))
done

修改说明

我在原博主的脚本基础上的修改主要是添加两个文件是要需要对比的一个选项,当我们知道两个文件不一样且不要对比时再去对比是没有意义的。此处的做法参考git difftool使用vimdiff作为对比工具

脚本使用说明

/usr/bin下创建`vimdiff.sh

sudo vim /usr/bin/dirdiff.sh

将上面的脚本内容复制粘贴到脚本中保存

给脚本可执行权限

sudo chmod a+x /usr/bin/dirdiff.sh

建立软连接

sudo ln -s /usr/bin/dirdiff.sh /usr/bin/dirdiff

之后就可以用dirdiff dir1 dir2进行文件夹的对比了

注意

该脚本只能用bash运行

vimdiff拓展知识

跳转到下一个差异点:

   ]c 下一个差异点

反向跳转是:

[c 上一个差异点

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

  n]c 转到下面第n个差异点,n为数字

文件合并

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

dp (diff "put"

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

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

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

Ctrl-w, w

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

:diffupdate

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

<ESC>, u

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

<think>嗯,用户想找代码对比软件,我得先想想有哪些常用的工具。首先根据他们提供的引用,里面提到了Code Compare,jsDiffWeb,Partial Diff插件,还有在线工具。用户可能需要在不同场景下使用,比如本地开发或者在线快速比较。 然后,用户的引用里提到Code Compare支持多种语言,这对程序员来说挺重要的,因为不同项目可能用不同语言。另外,Partial Diff是在VSCode里的插件,如果用户已经用VSCode的话,这个会很方便,不需要离开编辑器就能比较代码差异。 在线工具方面,用户可能想要快速对比而不安装软件,比如Diffchecker或者GitHub的对比功能。特别是GitHub,很多开发者已经在用了,查看提交差异很方便。还有jsDiffWeb是基于JavaScript的,可能适合Web开发者。 还需要考虑用户的使用场景,比如团队协作可能需要集成到版本控制系统中的工具,或者个人开发需要轻量级的。另外,性能也是一个因素,处理大文件的话需要工具高效稳定。 用户可能没提到但重要的点:是否支持文件夹比较,合并功能,或者与Git等版本控制工具的集成。比如Beyond Compare在这方面很强大,虽然可能需要付费,但功能全面。还有Git自带的diff命令,对于命令行用户来说可能更快捷。 综合这些因素,应该推荐几个不同类型的工具,覆盖本地应用、编辑器插件、在线工具,以及版本控制集成,让用户根据自己的需求选择。同时要提到每个工具的特点,比如支持的编程语言、是否免费、主要优势等,帮助用户做出决策。</think>根据代码对比工具的功能特点和应用场景,以下是针对不同需求的推荐方案: ### 一、本地开发环境工具 1. **Code Compare**(Windows/Mac/Linux) - 支持$C#$、$C++$、$Java$等20+编程语言 - 提供三向合并、语法高亮功能 - 集成Visual Studio插件版本,示例: ```powershell # 安装命令(需先安装Visual Studio) Install-Package CodeCompare ``` [^1] 2. **Beyond Compare**(专业级) - 支持文件夹对比和二进制文件对比 - 提供表格视图比较数据库记录 - 年费约$60,提供30天试用期 ### 二、编辑器集成方案 3. **Partial Diff(VSCode插件)** - 快捷键`Ctrl+Shift+P`启动对比 - 支持选择多段代码进行差异比对 - 自动生成差异统计报告[^4] ```javascript // 示例:对比两段JS代码 const oldCode = `function add(a,b){return a+b}`; const newCode = `function sum(x,y){return x+y}`; ``` 4. **Vim Diff模式** - 命令行执行`vimdiff file1 file2` - 支持三窗格对比模式 - 通过`:diffupdate`刷新对比结果 ### 三、在线解决方案 5. **Diffchecker** - 免费版支持<5000字符对比 - 提供可视化差异标注 - 支持导出HTML格式报告[^2] 6. **GitHub/GitLab对比** - 查看commit记录时自动生成差异视图 - 支持`.patch`文件下载 - 示例对比URL: ``` https://github.com/user/repo/compare/main...feature ``` ### 四、开发者定制化工具 7. **jsDiffWeb** - 基于$diff-match-patch$算法 - 支持自定义对比颜色方案 - 开源项目地址:`gitcode.net/jsdiffweb`[^3] ```html <!-- 快速集成示例 --> <script src="jsdiff.js"></script> <script> const diff = JsDiff.diffChars('旧代码', '新代码'); </script> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值