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