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

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

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

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

25.08.2008 15:10:27
4 ОТВЕТА
РЕШЕНИЕ

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

3
7.03.2013 15:59:12
Я предлагаю <Leader> d (который я изменил в своем форке вашего скрипта на GitHub;).
jkramer 19.09.2008 23:02:18

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

0
25.08.2008 19:01:17

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

строка 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, если вы считаете, что они того стоят.

1
20.08.2015 22:17:52

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

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

0
29.12.2009 16:18:07
Я на самом деле уже использую VCSCommand, и он определенно был более надежным, чем scmdiff для получения различий (например, если я нахожусь в каталоге извлеченного кода, который я получил через символическую ссылку из другого набора извлеченного кода), поэтому я думаю, мне нужно объединить методы из VCSCommand для получения различий с методами из scmdiff для их отображения ...
sanmiguel 15.02.2010 15:00:11
Вы пробовали VCSVimDiff / <Leader> cv? Я думаю, что это идеальный способ отображения различий ..
0x89 16.02.2010 14:54:54