将diff输出传递给变量

时间:2012-02-16 09:21:54

标签: vim

我正在尝试在当前缓冲区和其savefile之间运行diff。因为我想对diff输出进行一些处理,我需要它在一个变量中,而不是一个新的缓冲区。我知道一种方法是使用

w !diff % - > tmpfile
let myvar = system( cat tmpfile )

还有更优雅的方式吗?

1 个答案:

答案 0 :(得分:0)

假设您能够编写缓冲区,您可以执行类似

的操作
:let @a=system('diff ' . shellescape(expand('%')) . ' ' . shellescape(expand('%')) . '~')

例如比较buffer.txt到buffer.txt~并将结果放入 register a

否则,请尝试

:let @a=""
:redir @A
:%w !diff - "%~" 
:redir END

在我的初步测试中,这似乎不适用于Win32 GVIM。您可能需要通过临时文件才能使其正常工作

我意识到这一切看起来都和你尝试过的一样。无论如何,希望它有所帮助,也许确认你的想法