vimdiff和CVS集成

时间:2020-03-05 18:42:52  来源:igfitidea点击:

我一直希望能够以一种合理的方式使vimdiff与CVS控制的文件一起使用。我在互联网上发现了许多(有些骇人听闻的)脚本(这里是最佳示例),它们基本上将我们正在编辑的文件从CVS检出为临时文件,并对这两个文件进行vimdiff处理。这些都不考虑分支,并且始终假设我们正在使用MAIN工作,对我而言这完全没用。

所以,我的问题是这样的:有没有人找到一个比这个脚本还完善的解决方案呢?

否则,是否有人对如何实现此目标有任何想法,或者对我们认为对实现此目标至关重要的哪些功能提出建议?我的意图是,如果没有人能建议一个已经构建的解决方案以供使用或者从中构建,则我们将从此处开始构建一个。

解决方案

回答

我们可以将调用更改为cvs以考虑分支。那不应该很难。更改整个功能并使分支工作成为变量(参数,会话,全局或者其他)会更加困难。

回答

我一直在这里研究类似的脚本:http://github.com/ghewgill/vim-scmdiff(实际上,它们可能具有相同的血统)。我没有将scmdiff与cvs一起使用,但是它应该对我们已签出的分支进行比较。我们还可以指定要与特定修订版(使用:D修订版)进行比较。希望这会有所帮助,如果我们有所改进,请随时贡献!

回答

@格雷格·休吉尔(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上的脚本中。

回答

VCSCommand是另一个用于VCS集成的主动维护的vim脚本。它支持CVS / SVN / SVK / git。

我一直在使用SVN,从来没有任何抱怨。快捷方式使用mapleader,因此它们不太可能会覆盖现有的映射。