在我的项目回归设置中,输出文件有如下语句
"diff between foo.txt and bar.txt found"
现在我需要在 foo.txt 和 bar.txt 之间取 vimdiff。我可以仅从在 vim 中打开的输出文件中执行此操作吗?
目前我需要先在 vim 中打开我的输出文件。然后我需要选择找到的指定差异的行。在它返回外壳之后。然后采取 vimdiff b/w 这个文件。
您可以使用以下函数在不打开任何新 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
。
如果您没有打开文件或未修改缓冲区:
: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"