4

在我的项目回归设置中,输出文件有如下语句

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

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

目前我需要先在 vim 中打开我的输出文件。然后我需要选择找到的指定差异的行。在它返回外壳之后。然后采取 vimdiff b/w 这个文件。

4

2 回答 2

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

于 2011-10-13T04:25:05.797 回答
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

笔记:

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

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

    gvim --servername GVIM --remote-silent +"tabedit $file1" +"vert diffsplit $file2"
于 2011-10-14T13:58:37.247 回答