2008-08-25 7 views
5

Siempre he querido poder obtener una forma razonablemente elegante de conseguir que vimdiff funcione con un archivo controlado por CVS. He encontrado numerosos guiones (algo hacky) en Internet (mejor ejemplo here) que básicamente verifican el archivo que está editando desde CVS a un archivo temporal y vimdiff los dos. Ninguno de estos tiene en cuenta las ramas, y siempre supone que está trabajando desde MAIN, lo que para mí es completamente inútil.vimdiff y la integración de CVS

Por lo tanto, mi pregunta es esta: ¿Alguien ha encontrado una solución decente para esto que hace más que este script?

o en su defecto, ¿alguien tiene alguna idea de cómo iban a poner en práctica este o sugerencias para las características que usted considere vital para algo que hace esto? Mi intención es que, si nadie puede sugerir una solución ya construida para usar o construir desde, comenzamos a construir uno desde aquí.

Respuesta

3

He estado trabajando en un guión similar aquí: http://github.com/ghewgill/vim-scmdiff (de hecho, pueden tener la misma ascendencia). No he usado scmdiff con cvs, pero debería hacer una diferencia con respecto a la rama que ha revisado. También puede especificar que desea diferenciar contra una revisión particular (con: D revisión). Espero que esto ayude, ¡y siéntete libre de contribuir si tienes mejoras!

+0

Sugiero d (que cambié en mi fork de su script en GitHub;). – jkramer

+0

¡buena idea, fusionada! –

+0

Jeje, eso fue rápido. ¡Gracias! – jkramer

0

Puede cambiar la llamada al cvs para tener en cuenta las sucursales. Eso no debería ser tan difícil. Más difícil sería cambiar la función completa y hacer que la rama trabaje en una variable (argumento, sesión, global o de otro tipo).

1

@ Greg Hewgill: gracias por el guión! Tuve un par de problemas con él aunque, por lo que aquí es lo que cambiaría:

línea 21:

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

utilizo Ctrl - d de la página hacia abajo (demasiado perezoso para mover hasta PdDn), así que tuve que cambiar a Ctrl-h.

línea 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 

tuve problemas con no ser capaz de utilizar rutas absolutas con CVS. No sé si esto es una rareza de nuestra configuración local aquí, o si se trata de un CVS global. Por lo tanto, he creado una variable configurable que puede colocar en su .vimrc para usar en su lugar la ruta relativa.

Ahora parece funcionar exactamente lo que quería, así que voy a mantener golpear distancia y ver si puedo encontrar cualquier otra cosa que se rompe, la publicación de correcciones a medida que avanzo.

Editar: se olvidó de agregar: no dude en agregar estos cambios a la secuencia de comandos en github si siente que son de mérito.

0

VCSCommand es otra secuencia de comandos de vim mantenida activamente para la integración de VCS. Tiene soporte para CVS/SVN/SVK/git.

Lo uso todo el tiempo para SVN y nunca he tenido ninguna queja. Los accesos directos usan mapleader, por lo que es poco probable que sobrescriban las asignaciones existentes.

+0

De hecho, ya uso VCSCommand, y definitivamente ha sido más confiable que scmdiff para obtener diffs (por ejemplo, si estoy en un directorio de código extraído que he obtenido a través de un enlace simbólico de otro set of checked out code), sin embargo, así que supongo que necesito combinar los métodos de VCSCommand para obtener diffs con los métodos de scmdiff para mostrarlos ... – sanmiguel

+0

¿Has probado VCSVimDiff/ cv? Creo que es una forma perfecta de mostrar diffs ... – 0x89