代码差异对比

使用Versions也有一个多月,平时用于查看小组内其他同学提交的代码修改。在Versions添加svn仓库的url到它的书签Bookmarks列表里(我按项目添加,一个项目一条书签),点击书签栏里的某个项目,Versions从远方的svn仓库拉取最近的svn commit列表,每次commit包含1~n个文件,点击其中一个文件,Versions调用外部的「比较软件」,查看该次commit和上一个commit之前的差异。在这里,我并没有使用Versions来管理我本地的svn仓库代码,因为我本地的svn版本太高了,超出Versions的支持,哎,我不觉得最新版的svn修改文件协议是一个多么必须的事情,在这个大家越来越多使用git的年代里。

用于比较的软件我只使用免费的,这在Mac上可选择的就不多了,一个是FileMerge, 一个是DiffMerge。

前者打开一个文件的速度实在是惨不忍睹,卡、卡。。卡死了,烦,不再用。后者DiffMerge还可以,虽然打开慢了一些,但显示差异的效果还不错。到了昨天,突然想起,不对呀,Sublime txt打开一个文件的速度这么快,DiffMerge打开2个文件相比之下,实在是太慢了,不可忍受。

尝试用Sublime txt来比较文件,找到一个package: Sublimerge,虽然Sublime Txt有个命令行工具subl,可以用来打开多个文件,可惜不懂python,暂时没有方法在subl打开两个文件之后,再调用Sublimerge进行文件对比,只能放弃。

/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl [files]



回到万能的vim吧,vim -d [files],简单,有效,直接。那个谁,再也不用担心我在打开大文件时等得无聊了,还不用担心编码的问题。

1.安装macvim.app

sudo port install MacVim

安装后,MacVim.app位于/Applications/MacPorts/MacVim.app,不会跟我已有的vim配置文件~/.vimrc冲突,nice :)

2.类似subl,通过mvim可以在脚本或命令行下启动MacVim.app,由于我是用port来安装MacVim.app,其路径在/opt/local/bin/mvim,它也是一个脚本,在启动MacVim.app前做一些检查和判断罢了。

3.在Versions中添加「对比的脚本」,脚本的位置在Versions的目录下~/Library/Application Support/Versions/Compare Scripts,cd到这个目录,添加对比脚本mvimdiff.sh

popozhu ~/Library/Application Support/Versions/Compare Scripts$ cat mvimdiff.sh
#!/bin/bash

export HOME=/usr/share/vim
/opt/local/bin/mvim -d "$@"

按Versions的说明,目前它支持3个参数,前两个参数是要对比的两个文件,第3个参数指定一个文件,保存前两个文件的差异「整合」后的最终版本。
当Versions调用到mvimdiff.sh时,它会传递2个文件给到shell脚本,在shell中再通过数组$@传递给mvim,mvim再传递给MacVim.app。

4.重启Versions,在配置中选择mvimdiff.sh来进行文件差异对比

配置

5.遇到一个问题,查看文件对比后想退出MacVim.app时(shift+command+w退出窗口),总提示Can't write viminfo file $HOME/.viminfo,所以在mvimdiff.shexport了一下HOME环境变量,然后到/usr/share/vimtouch新增一个空文件.viminfo,再修改这个文件的文件为组用户可写:

popozhu ~$ cd /usr/share/vim
popozhu /usr/share/vim$ sudo touch .viminfo
popozhu /usr/share/vim$ sudo chmod u=rw,go=rw .viminfo

搞定,收工。



– EOF –

Categories: mac
Tags: vim