интеграция vimdiff и CVS - PullRequest
       31

интеграция vimdiff и CVS

5 голосов
/ 25 августа 2008

Я всегда хотел получить достаточно элегантный способ заставить vimdiff работать с файлом, контролируемым CVS. Я нашел множество (несколько хакерских) скриптов в интернете (лучший пример здесь ), которые в основном извлекают файл, который вы редактируете из CVS, во временный файл, и vimdiff обоих. Ни один из них не учитывает ветки, и всегда предполагает, что вы работаете из MAIN, что для меня совершенно бесполезно.

Итак, мой вопрос таков: кто-нибудь нашел достойное решение для этого, которое делает больше, чем этот сценарий?

Или, если это не удастся, есть ли у кого-нибудь какие-либо идеи о том, как они это реализуют, или предложения о том, какие функции вы считаете жизненно важными для того, что делает это? Мое намерение состоит в том, что, если никто не может предложить уже построенное решение для использования или сборки, мы начинаем строить его отсюда.

Ответы [ 4 ]

3 голосов
/ 25 августа 2008

Я работал над подобным сценарием здесь: http://github.com/ghewgill/vim-scmdiff (на самом деле, они могут иметь одинаковое происхождение). Я не использовал scmdiff с cvs, но он должен использовать diff для ветки, которую вы отметили. Вы также можете указать, что вы хотите использовать разные версии (с помощью: D revision ). Надеюсь, это поможет, и вы можете внести свой вклад, если у вас есть улучшения!

1 голос
/ 26 августа 2008

@ Грег Хьюгилл: спасибо за сценарий! У меня было несколько проблем с этим, так что вот что я бы изменил:

строка 21:

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

Я использую Ctrl - d для перехода на страницу вниз (слишком ленив, чтобы переместиться в PdDn), поэтому пришлось переключиться на Ctrl-h.

строка 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

У меня были проблемы с невозможностью использования абсолютных путей с CVS. Я не знаю, странная ли это наша локальная установка или глобальная CVS. Итак, я создал настраиваемую переменную, которую вы можете поместить в свой .vimrc, чтобы использовать вместо нее относительный путь.

Похоже, теперь это работает именно так, как я хотел, поэтому я буду продолжать разбираться и посмотреть, смогу ли я найти что-нибудь еще, что сломалось, отправив исправления по ходу дела.

Редактировать: Забыл добавить: пожалуйста, не стесняйтесь добавлять эти изменения в ваш скрипт на github, если вы считаете, что они того стоят.

0 голосов
/ 29 декабря 2009

VCSCommand - это другой активно поддерживаемый сценарий vim для интеграции VCS. Имеет поддержку CVS / SVN / SVK / git.

Я все время использую его для SVN и никогда не жаловался. Ярлыки используют mapleader, поэтому маловероятно, что они будут перезаписывать существующие сопоставления.

0 голосов
/ 25 августа 2008

Вы можете изменить вызов на cvs, чтобы принять во внимание филиалы. Это не должно быть трудно. Немного сложнее было бы изменить всю функцию и сделать ветку вашей рабочей переменной (аргумент, сессия, глобальная или иная).

...