Как заставить vimdiff отображать вывод cvs diff --side-by-side

CVS diff имеет возможность отображать версии рядом и обозначать различия обычными символами патчей, такими как:

import zlib                                        import zlib
                                                 > import time
import traceback                                   import traceback

import cElementTree as ElementTree                 import cElementTree as ElementTree

from util import infopage                          from util import infopage
                                                 > from util.timeout import Timeout

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

Я знаю о таких инструментах, как cvsvimdiff.vim и им подобных, но проблема с ними в том, что они работают только с одним файлом за раз, тогда как вывод cvs diff перечисляет несколько файлов.


person Samer Atiani    schedule 11.09.2009    source источник
comment
Не могли бы вы сказать, какая опция CVS делает это?   -  person hcs42    schedule 11.09.2009


Ответы (2)


Когда у вас есть этот текст в буфере Vim, вы можете легко разделить его на два буфера самостоятельно. Похоже, ваш образец ввода разделяется на 50 символов.

Так что используйте <C-v>, чтобы визуально выделить половину разницы, вырезать ее, вставить в новый буфер, удалить завершающие пробелы и символы-разделители >, и все готово. Или напишите для этого функцию, что-то вроде этого (которая предполагает, что разделение всегда равно 50):

function! SplitCVSDiff()
    exe "norm gg_\<C-v>51\<Bar>Gd:vnew\<CR>p"
    silent! %s/\v\s+(\> )?$//
endfunction

Возможно, нужно сделать его более надежным, я не знаком с точным стилем вывода, который использует CVS. Хотя не должно быть тяжело.

person Brian Carper    schedule 11.09.2009

Я бы написал скрипт, например: vimdiff_cvs file.cc, который делает это:

  1. Сохраняйте отличия от file.cc локально, удаляйте их, обновляйте в репозиторий. Теперь скопируйте его как ~/.vimdiff/file.cc.repo.
  2. Восстановите файл.cc, применив патч
  3. Вызовите vimdiff file.cc ~/.vimdiff/file.cc.repo.
person sud03r    schedule 02.02.2011