6

私は常に、vimdiff を CVS で制御されたファイルで動作させるための、かなり洗練された方法を手に入れたいと思っていました。私は、基本的に CVS から一時ファイルに編集しているファイルをチェックアウトし、その 2 つを vimdiff する、インターネット上で多数の (ややハックな) スクリプトを見つけました (ここでの最良の例)。これらはいずれもブランチを考慮しておらず、常に MAIN から作業していると想定していますが、これは私にとってはまったく役に立ちません。

だから、私の質問はこれです:誰かがこのスクリプト以上のことを行う適切な解決策を見つけましたか?

または、それができない場合、これをどのように実装するか、またはこれを行うために不可欠と思われる機能についての提案を誰かが持っていますか? 私の意図は、使用または構築するための既に構築されたソリューションを誰も提案できない場合は、ここから構築を開始することです。

4

4 に答える 4

3

私はここで同様のスクリプトに取り組んでいます:http://github.com/ghewgill/vim-scmdiff(実際、それらは同じ祖先を持っている可能性があります)。私はcvsでscmdiffを使用していませんが、チェックアウトしたブランチに対してdiffを実行する必要があります。特定のリビジョンと比較することを指定することもできます(: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 統合のために積極的に維持されているもう 1 つの vim スクリプトです。CVS/SVN/SVK/git をサポートしています。

私はSVNに常に使用していますが、苦情はありませんでした. ショートカットは を使用するmapleaderため、既存のマッピングが上書きされる可能性はほとんどありません。

于 2009-12-29T16:18:07.330 に答える