Pergunta

Eu sempre quis conseguir uma maneira razoavelmente elegante de fazer o vimdiff funcionar com um arquivo controlado por CVS.Encontrei vários scripts (um tanto hacky) na Internet (melhor exemplo aqui) que basicamente verifica o arquivo que você está editando do CVS para um arquivo temporário e faz o vimdiff dos dois.Nada disso leva em conta as filiais, e sempre assuma que você está trabalhando no MAIN, o que para mim é completamente inútil.

Então, minha pergunta é esta:alguém aí encontrou uma solução decente para isso que faz mais do que esse script?

Ou, na falta disso, alguém tem alguma idéia de como implementar isso ou sugestões sobre quais recursos você consideraria vitais para algo que faça isso?Minha intenção é que, se ninguém puder sugerir uma solução já construída para usar ou construir, comecemos a construir uma a partir daqui.

Foi útil?

Solução

Estou trabalhando em um script semelhante aqui: http://github.com/ghewgill/vim-scmdiff (na verdade, eles podem ter a mesma ascendência).Eu não usei o scmdiff com cvs, mas ele deve fazer uma comparação com o branch que você verificou.Você também pode especificar que deseja diferenciar uma revisão específica (com :D revisão).Esperamos que isso ajude e sinta-se à vontade para contribuir se tiver melhorias!

Outras dicas

@Greg Hewgill:obrigado pelo roteiro!Eu tive alguns problemas com isso, então aqui está o que eu mudaria:

linha 21:

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

eu uso Ctrl-d para page-down (com preguiça de passar para PdDn), então tive que mudar para Ctrl-h.

linha 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

Tive problemas por não conseguir usar caminhos absolutos com CVS.Não sei se isso é uma estranheza da nossa configuração local aqui, ou se é uma coisa global do CVS.Então, criei uma variável configurável que você pode colocar no seu .vimrc para usar o caminho relativo.

Agora parece funcionar exatamente como eu queria, então continuarei trabalhando e ver se consigo encontrar mais alguma coisa que quebre, postando correções à medida que prossigo.

Editar:Esqueci de adicionar:sinta-se à vontade para adicionar essas alterações ao seu script no github se achar que valem a pena.

Você poderia mudar a chamada para cvs para levar em conta as filiais.Isso não deveria ser tão difícil.Seria um pouco mais difícil alterar toda a função e tornar o branch em que você trabalha uma variável (argumento, sessão, global ou outro).

Comando VCS é outro script vim mantido ativamente para integração VCS.Possui suporte para CVS/SVN/SVK/git.

Eu uso isso o tempo todo para SVN e nunca tive reclamações.Os atalhos usam mapleader, portanto, é improvável que eles substituam os mapeamentos existentes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top