我一直希望能够以一种相当优雅的方式让 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 考虑分支。那应该不难。更改整个函数并使您的工作分支成为变量(参数、会话、全局或其他)会有点困难。

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

我一直使用它进行 SVN,从未有过任何抱怨。快捷键使用 mapleader, ,因此它们不太可能覆盖现有映射。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top