Domanda

Ho sempre desiderato riuscire a trovare un modo ragionevolmente elegante per far funzionare vimdiff con un file controllato da CVS.Ho trovato numerosi script (un po' complicati) su Internet (il miglior esempio Qui) che sostanzialmente controlla il file che stai modificando da CVS a un file temporaneo e vimdiff i due.Nessuno di questi tiene conto dei rami e presuppone sempre che tu stia lavorando da MAIN, il che per me è completamente inutile.

Quindi, la mia domanda è questa:qualcuno là fuori ha trovato una soluzione decente per questo che fa di più di questo script?

O in mancanza di ciò, qualcuno ha qualche idea su come implementarlo o suggerimenti su quali funzionalità considereresti vitali per qualcosa che fa questo?La mia intenzione è che, se nessuno può suggerire una soluzione già creata da utilizzare o da cui costruire, iniziamo a crearne una da qui.

È stato utile?

Soluzione

Ho lavorato su uno script simile qui: http://github.com/ghewgill/vim-scmdiff (in effetti, potrebbero avere la stessa discendenza).Non ho usato scmdiff con cvs, ma dovrebbe fare un diff rispetto al ramo che hai estratto.Puoi anche specificare che vuoi differenziare rispetto ad una particolare revisione (con :D revisione).Spero che questo ti sia d'aiuto e sentiti libero di contribuire se hai miglioramenti!

Altri suggerimenti

@Greg Hewgill:grazie per la sceneggiatura!Ho avuto un paio di problemi però, quindi ecco cosa cambierei:

riga 21:

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

Io uso Ctrl-D per pagina giù (troppo pigro per spostarsi fino a PdDn), quindi ho dovuto passare a Ctrl-h.

riga 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

Ho avuto problemi con l'impossibilità di utilizzare percorsi assoluti con CVS.Non so se questa sia una stranezza della nostra organizzazione locale qui, o se sia una cosa CVS globale.Quindi, ho creato una variabile configurabile che puoi inserire nel tuo .vimrc per utilizzare invece il percorso relativo.

Ora sembra funzionare esattamente come volevo, quindi continuerò a cercare di vedere se riesco a trovare qualcos'altro che si rompe, pubblicando le correzioni man mano che procedo.

Modificare:Ho dimenticato di aggiungere:sentiti libero di aggiungere queste modifiche al tuo script su github se ritieni che ne valga la pena.

Potresti cambiare la chiamata in cvs prendere in considerazione le filiali.Non dovrebbe essere troppo difficile.Sarebbe un po' più difficile cambiare l'intera funzione e rendere il ramo su cui stai lavorando una variabile (argomento, sessione, globale o altro).

VCSCommand è un altro script vim mantenuto attivamente per l'integrazione VCS.Ha il supporto per CVS/SVN/SVK/git.

Lo uso sempre per SVN e non ho mai avuto lamentele.Le scorciatoie utilizzano mapleader, quindi è improbabile che sovrascrivano le mappature esistenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top