题
我一直希望能够以一种相当优雅的方式让 vimdiff 处理 CVS 控制的文件。我在互联网上发现了许多(有点黑客)脚本(最好的例子 这里),基本上将您正在编辑的文件从 CVS 检出到临时文件,然后 vimdiff 这两个文件。这些都没有考虑到分支,并且总是假设你是从 MAIN 工作,这对我来说完全没用。
所以,我的问题是这样的:有没有人找到一个比这个脚本更有效的解决方案?
或者如果做不到这一点,是否有人对如何实现这一点有任何想法,或者对您认为对于执行此操作至关重要的功能有什么建议?我的意图是,如果没有人可以建议一个已经构建的解决方案来使用或构建,我们就从这里开始构建一个。
解决方案
我一直在这里编写类似的脚本: http://github.com/ghewgill/vim-scmdiff (事实上,他们可能有相同的祖先)。我没有将 scmdiff 与 cvs 一起使用,但它应该对您已签出的分支进行比较。您还可以指定要与特定修订版进行比较(使用 :D 修订)。希望这对您有所帮助,如果您有改进,请随时贡献!
其他提示
@格雷格休吉尔:谢谢你的剧本!不过,我遇到了一些问题,因此我要更改以下内容:
第 21 行:
< map <silent> <C-d> :call <SID>scmToggle()<CR>
--
> map <silent> <C-h> :call <SID>scmToggle()<CR>
我用 控制键-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 上的脚本中。
您可以将呼叫更改为 cvs
考虑分支。那应该不难。更改整个函数并使您的工作分支成为变量(参数、会话、全局或其他)会有点困难。