Сведения о вопросе

Fhohir

04:55, 13th August, 2020

Теги

vim   cvs   vimdiff    

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

Просмотров: 463   Ответов: 4

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

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

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



  Сведения об ответе

Chhiki

02:41, 4th August, 2020

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


  Сведения об ответе

PHPH

21:51, 11th August, 2020

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

строка 21:

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

Я использую Ctrl - d для page-down (слишком ленив, чтобы переместить весь этот путь к 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, чтобы использовать вместо нее относительный путь.

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

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


  Сведения об ответе

VCe znayu

06:19, 1st August, 2020

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

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


  Сведения об ответе

repe

00:00, 13th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться