2008-08-25 16 views
5

Ich wollte immer in der Lage sein, eine einigermaßen elegante Möglichkeit zu bekommen, um vimdiff mit einer CVS-gesteuerten Datei arbeiten zu lassen. Ich habe zahlreiche (etwas hacky) Skripte im Internet gefunden (Bestes Beispiel here), die im Grunde die Datei auschecken, die Sie von CVS in eine temporäre Datei bearbeiten, und vimdiff die beiden. Keiner von diesen berücksichtigt Zweige und nimmt immer an, dass Sie von MAIN arbeiten, was für mich völlig nutzlos ist.vimdiff und CVS-Integration

Also meine Frage ist das: hat jemand da draußen eine anständige Lösung gefunden, die mehr als dieses Skript tut?

Oder ist das nicht der Fall, hat irgendjemand irgendwelche Ideen, wie sie das umsetzen würden, oder Vorschläge für welche Funktionen, die Sie für etwas, das dies tut, für wichtig halten würden? Meine Absicht ist, dass, wenn niemand eine bereits gebaute Lösung vorschlagen kann, um entweder zu verwenden oder zu bauen, wir beginnen, einen von hier zu bauen.

Antwort

3

Ich habe an einem ähnlichen Skript hier gearbeitet: http://github.com/ghewgill/vim-scmdiff (tatsächlich können sie die gleiche Abstammung haben). Ich habe SCMDIFF nicht mit cvs benutzt, aber es sollte einen Unterschied gegen den Zweig machen, den Sie ausgecheckt haben. Sie können auch angeben, dass Sie sich gegen eine bestimmte Revision wenden möchten (mit: D Revision). Hoffentlich hilft das und Sie können gerne etwas beitragen, wenn Sie Verbesserungen haben!

+0

Ich schlage vor, d (was ich in meinem Fork Ihres Skripts auf GitHub geändert habe;). – jkramer

+0

gute Idee, verschmolzen! –

+0

Hehe, das war schnell. Vielen Dank! – jkramer

0

Sie können den Anruf in cvs ändern, um Verzweigungen zu berücksichtigen. Das sollte nicht zu schwer sein. Es ist etwas schwieriger, die gesamte Funktion zu ändern und die Verzweigung zu einer Variablen zu machen (Argument, Sitzung, global oder anders).

1

@Greg Hewgill: danke für das Skript! Ich hatte ein paar Probleme mit ihm aber, so ist hier, was ich würde ändern:

Linie 21:

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

Ich benutze Ctrl - d für Seite nach unten (zu faul, sich zu bewegen den ganzen Weg nach PdDn), also musste ich zu Ctrl-h wechseln.

Linie 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 

Ich hatte Probleme mit nicht absoluten Pfade mit CVS verwenden zu können. Ich weiß nicht, ob das eine Verrücktheit unserer lokalen Einrichtung ist, oder ob es eine globale CVS-Sache ist. Also habe ich eine konfigurierbare Variable erstellt, die Sie in Ihre .vimrc einfügen können, um stattdessen den relativen Pfad zu verwenden.

Es scheint jetzt genau so zu funktionieren, wie ich es wollte, also werde ich weiterhacken und sehen, ob ich noch etwas anderes finden kann, das bricht und Fixes schreibt, während ich gehe.

Bearbeiten: Forgot to add: Fühlen Sie sich frei, diese Änderungen zu Ihrem Skript auf GitHub hinzuzufügen, wenn Sie das Gefühl haben, dass sie sich lohnen.

0

VCSCommand ist ein weiteres aktiv gepflegtes vim-Skript für die VCS-Integration. Es hat Unterstützung für CVS/SVN/SVK/git.

Ich benutze es die ganze Zeit für SVN und hatte nie Beschwerden. Die Verknüpfungen verwenden mapleader, daher ist es unwahrscheinlich, dass vorhandene Zuordnungen überschrieben werden.

+0

Ich benutze eigentlich bereits VCSCommand, und es ist definitiv zuverlässiger als scmdiff für das Erhalten von Diffs (zB wenn ich in einem Verzeichnis von ausgechecktem Code bin, den ich über einen Symlink von einem anderen habe Satz von ausgechecktem Code), also denke ich, dass ich die Methoden von VCSCommand kombinieren muss, um diffs mit den Methoden von scmdiff zu bekommen, um sie anzuzeigen ... – sanmiguel

+0

hast du VCSVimDiff/ cv versucht? Ich denke, es ist eine perfekte Möglichkeit, Diffs anzuzeigen. – 0x89

Verwandte Themen