принимая diff между двумя именованными файлами в vim - PullRequest
4 голосов
/ 13 октября 2011

В моих настройках регрессии проекта выходной файл имеет выражение вроде

    "diff between foo.txt and bar.txt found" 

Теперь мне нужно взять vimdiff между foo.txt и bar.txt.Могу ли я сделать это из выходного файла, открытого только в vim?

В настоящее время мне нужно сначала открыть мой выходной файл в vim.Затем мне нужно выбрать строку, указав diff найдено.после этого вернитесь в оболочку.затем возьмите vimdiff ч / б эти файлы.

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Вы можете сделать это, не открывая новый экземпляр vim, используя следующую функцию:

function s:OpenDiff()
    let line=getline('.')
    let match=matchlist(line, '\v^\ {4}\"diff\ between\ (.{-})\ and\ (.{-})\ found\"\ $')[1:2]
    if empty(match)
        throw 'Incorrect line:' line
    endif
    execute 'tabedit'   fnameescape(match[0])
    execute 'diffsplit' fnameescape(match[1])
endfunction
nnoremap ,od :<C-u>call <SID>OpenDiff()<CR>

Если вы добавите set bufhidden=wipe после каждого из операторов execute, вы сможете избавиться от открытых буферов, запустив :tabclose.

1 голос
/ 14 октября 2011

Если у вас нет открытого файла или неизмененного буфера:

 :edit file1.txt
 :vert diffsplit file2.txt

Чтобы открыть diff в новой вкладке,

 :tabedit file1.txt
 :vert diffsplit file2.txt

было бы очень удобно


Чтобы автоматизировать процесс, я бы подумал

diffprogram | grep -w '^diff between' | grep 'found$' | 
while read diff between file1 and file2 found;
do
    gvim -d "$file1" "$file2"
done

Примечания:

  • не работает для имен файлов со специальными символами (особенно с пробелами)
  • Чтобы открыть все эти vims одновременно, просто добавьте &: gvim -d "$file1" "$file2"&

Вы также можете открыть все различия в отдельных вкладках в одном vim:

    gvim --servername GVIM --remote-silent +"tabedit $file1" +"vert diffsplit $file2"
...