質問

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

そこで、私の質問は次のとおりです。このスクリプト以上のことを行う適切な解決策を見つけた人はいますか?

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

役に立ちましたか?

解決

私はここで同様のスクリプトに取り組んでいます。 http://github.com/ghewgill/vim-scmdiff (実際、彼らは同じ祖先を持っている可能性があります)。私は cvs で scmdiff を使用したことはありませんが、チェックアウトしたブランチに対して diff を実行するはずです。特定のリビジョンとの差分を取得することを指定することもできます (:D を使用) リビジョン)。これがお役に立てば幸いです。改善点があればお気軽に貢献してください。

他のヒント

@グレッグ・ヒューギル:脚本をありがとう!ただし、いくつか問題があったので、次のように変更します。

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 のスクリプトに自由に追加してください。

通話を次のように変更できます cvs ブランチを考慮するため。それはそれほど難しいことではありません。関数全体を変更して、ブランチを変数 (引数、セッション、グローバルなど) として機能させるのは少し難しくなります。

VCSコマンド これは、VCS 統合用にアクティブに維持されているもう 1 つの vim スクリプトです。CVS/SVN/SVK/git をサポートしています。

私はSVNのためにいつもそれを使用していますが、何の不満もありませんでした。ショートカットで使用するのは、 mapleader, したがって、既存のマッピングが上書きされる可能性は低いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top