Question

J'ai toujours voulu pouvoir trouver un moyen raisonnablement élégant de faire fonctionner vimdiff avec un fichier contrôlé par CVS.J'ai trouvé de nombreux scripts (quelque peu hacky) sur Internet (meilleur exemple ici) qui extrait essentiellement le fichier que vous modifiez de CVS vers un fichier temporaire, et vimdiff les deux.Aucun de ceux-ci ne prend en compte les branches et suppose toujours que vous travaillez à partir de MAIN, ce qui pour moi est complètement inutile.

Voici donc ma question:Quelqu'un a-t-il trouvé une solution décente pour cela qui fait plus que ce script ?

Ou, à défaut, quelqu'un a-t-il des idées sur la manière de mettre en œuvre cela, ou des suggestions sur les fonctionnalités que vous considérez comme vitales pour quelque chose qui fait cela ?Mon intention est que, si personne ne peut suggérer une solution déjà construite à utiliser ou à partir de laquelle construire, nous commençons à en créer une à partir d'ici.

Était-ce utile?

La solution

J'ai travaillé sur un script similaire ici : http://github.com/ghewgill/vim-scmdiff (en fait, ils peuvent avoir la même ascendance).Je n'ai pas utilisé scmdiff avec cvs, mais cela devrait faire une différence avec la branche que vous avez extraite.Vous pouvez également spécifier que vous souhaitez comparer une révision particulière (avec :D révision).J'espère que cela vous aidera, et n'hésitez pas à contribuer si vous avez des améliorations !

Autres conseils

@Greg Hewgill :merci pour le scénario !J'ai cependant eu quelques problèmes avec cela, alors voici ce que je changerais :

ligne 21 :

< map <silent> <C-d> :call <SID>scmToggle()<CR>
--
> map <silent> <C-h> :call <SID>scmToggle()<CR>

j'utilise Ctrl-d pour la page suivante (trop paresseux pour passer jusqu'à PdDn), j'ai donc dû passer à Ctrl-h.

ligne 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

J'ai eu des problèmes de ne pas pouvoir utiliser des chemins absolus avec CVS.Je ne sais pas si c'est une bizarrerie de notre configuration locale ici, ou si c'est une affaire CVS globale.J'ai donc créé une variable configurable que vous pouvez mettre dans votre .vimrc pour utiliser le chemin relatif à la place.

Cela semble maintenant fonctionner exactement comme je le voulais, alors je vais continuer à dénigrer et voir si je peux trouver autre chose qui casse, en publiant des correctifs au fur et à mesure.

Modifier:J'ai oublié d'ajouter :n'hésitez pas à ajouter ces modifications à votre script sur github si vous pensez qu'elles en valent la peine.

Vous pouvez changer l'appel en cvs prendre en compte les succursales.Cela ne devrait pas être trop difficile.Il serait un peu plus difficile de changer toute la fonction et de faire de la branche votre travail une variable (argument, session, globale ou autre).

Commande VCS est un autre script vim activement maintenu pour l'intégration VCS.Il prend en charge CVS/SVN/SVK/git.

Je l'utilise tout le temps pour SVN et je n'ai jamais eu de plaintes.Les raccourcis utilisent mapleader, il est donc peu probable qu'ils écrasent les mappages existants.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top