在vim中的两个命名文件之间取差异

时间:2011-10-13 01:15:13

标签: vim vimdiff

在我的项目回归设置中,输出文件具有类似

的语句
    "diff between foo.txt and bar.txt found" 

现在我需要在foo.txt和bar.txt之间使用vimdiff。我可以从仅在vim中打开的输出文件中执行此操作吗?

目前我需要先在vim中打开输出文件。然后我需要选择指定diff found的行。在它返回shell之后。然后把vimdiff b / w这个文件。

2 个答案:

答案 0 :(得分:2)

您可以使用以下函数在不打开任何新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 :(得分:1)

如果您没有打开文件或未修改缓冲区:

 :edit file1.txt
 :vert diffsplit file2.txt

要在新标签中打开差异,

 :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

注意:

  • 不适用于具有特殊字符(特别是空格)的文件名
  • 要同时打开所有这些文件,只需添加&gvim -d "$file1" "$file2"&
  • 即可

您还可以在单​​个vim中的单独选项卡中打开所有差异:

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