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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值