背景
在日常开发过程中免不了的是使用文件差异对比工具进行文本差异对比。常用的对比工具有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
但是要注意一定要将光标移动到需要撤销修改的文件窗口中。
9732

被折叠的 条评论
为什么被折叠?



