Vimdiff和CVS集成

6
我一直希望能够找到一个相对优雅的方法来使vimdiff与CVS控制的文件配合使用。我在互联网上找到了许多有些hacky的脚本(最好的例子在这里),它们基本上是将你正在编辑的文件从CVS检出到临时文件,然后进行vimdiff比较。但这些脚本都没有考虑分支,并且总是假设您是从MAIN工作,对于我来说完全没有用处。
所以,我的问题是:是否有人找到了比这个脚本更好的解决方案?
如果找不到已经构建好的解决方案,或者无法使用现有的解决方案,则是否有任何实现此功能的想法或建议? 我的意图是,如果没有人能够建议使用或构建现有的解决方案,我们将从这里开始构建一个解决方案。
4个回答

3
我一直在开发一个类似的脚本:http://github.com/ghewgill/vim-scmdiff(实际上,它们可能有相同的祖先)。我没有使用scmdiff与cvs,但是它应该会针对你检出的分支进行差异比较。你还可以指定想要针对特定版本进行差异比较(使用:D revision命令)。希望这能帮到你,如果你有改进的想法,请随时贡献!

我建议使用 <Leader>d(这是我在 GitHub 上更改了您的脚本的设置;)。 - jkramer

1

@Greg Hewgill: 感谢您的脚本!不过我遇到了一些问题,以下是我要修改的内容:

第21行:

< map <silent> <C-d> :call <SID>scmToggle()<CR>
--
> map <silent> <C-h> :call <SID>scmToggle()<CR>

我使用Ctrl-d来进行向下翻页(懒得去用PdDn键),所以不得不改为使用Ctrl-h键。
第112行:
<         let cmd = 'cd ' . g:scmBufPath . ' && ' . g:scmDiffCommand . ' diff ' . g:scmDiffRev . ' ' . expand('%:p') . ' > ' . tmpdiff
--
> if g:scmDiffUseAbsPaths 
>     let cmd = 'cd ' . g:scmBufPath . ' && ' . g:scmDiffCommand . ' diff ' . g:scmDiffRev . ' ' . expand('%:p') . ' > ' . tmpdiff
> else
>     let cmd = g:scmDiffCommand . ' diff ' . g:scmDiffRev . ' ' . bufname('%') . ' > ' . tmpdiff
> endif

我无法使用CVS的绝对路径,遇到了一些问题。我不知道这是我们本地设置的奇怪问题,还是全局CVS的问题。所以,我创建了一个可配置变量,你可以在 .vimrc 文件中放置来使用相对路径。

现在它似乎完全符合我的要求,所以我将继续研究是否有其他需要修复的问题,并在发现时发布修复程序。

编辑:忘记添加:如果您认为这些更改有价值,请随意将其添加到您的github脚本中。


0

VCSCommand 是另一个积极维护的 Vim 脚本,用于 VCS 集成。它支持 CVS/SVN/SVK/git。

我经常用它来进行 SVN 操作,从未遇到过任何问题。快捷键使用 mapleader,因此不太可能覆盖现有映射。


我实际上已经在使用VCSCommand,相比于scmdiff获取差异(例如,如果我在一个目录中检出了代码,并通过符号链接从另一组检出的代码进入该目录),它肯定更可靠。然而,我想我需要将从VCSCommand获取差异的方法与从scmdiff显示它们的方法结合起来... - sanmiguel
你尝试过使用VCSVimDiff / <Leader>cv吗?我认为这是一种完美显示差异的方式。 - 0x89

0

您可以更改对cvs的调用以考虑分支。这应该不难。更难一些的是更改整个函数并将您正在处理的分支作为变量(参数、会话、全局或其他)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接