6

我一直希望能够以一种相当优雅的方式让 vimdiff 与 CVS 控制的文件一起工作。我在互联网上发现了许多(有点骇人听闻的)脚本(最好的例子在这里)基本上检查你正在编辑的文件从 CVS 到一个临时文件,以及 vimdiff 两者。这些都没有考虑到分支,并且总是假设你在 MAIN 工作,这对我来说完全没用。

所以,我的问题是:有没有人找到一个体面的解决方案,比这个脚本做得更多?

或者如果做不到这一点,是否有人对他们将如何实现这一点有任何想法,或者对您认为哪些功能对执行此操作至关重要?我的意图是,如果没有人可以建议一个已经构建的解决方案来使用或构建,我们从这里开始构建一个。

4

4 回答 4

3

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

于 2008-08-25T19:45:43.333 回答
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 上的脚本中。

于 2008-08-26T19:19:19.660 回答
0

您可以将调用更改cvs为将分支考虑在内。这应该不难。更改整个函数并使分支成为您工作的变量(参数、会话、全局或其他)有点困难。

于 2008-08-25T19:01:17.637 回答
0

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

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

于 2009-12-29T16:18:07.330 回答