vimdiff和CVS集成
我一直希望能够以一种合理的方式使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
,因此它们不太可能会覆盖现有的映射。