Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

строка 21:

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

я использую Ctrl-д для перемещения по странице вниз (слишком ленив, чтобы переходить к 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, если считаете, что они того стоят.

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

ВКСКомманд это еще один активно поддерживаемый скрипт vim для интеграции VCS.Он поддерживает CVS/SVN/SVK/git.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top