2012-02-16 86 views
2

我试图在当前缓冲区和其保存文件之间运行差异。因为我想对diff输出做一些处理,所以我需要它在一个变量中,而不是一个新的缓冲区。我知道有一种方法可以做到这一点将差异输出传递给变量

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

有没有更优雅的方式?

+0

样本'vimrc's包含':DiffOrig'命令。既然它不回答你的问题,我把它作为评论,但这是相关的,可能会让你感兴趣。 – Benoit 2012-02-16 15:37:06

回答

0

假设你能写缓冲区,你可以不喜欢

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

到例如比较buffer.txt到buffer.txt〜并把结果寄存器a

否则,请尝试

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

在我的初步测试,这似乎不是在Win32 GVIM工作,虽然。你可能需要通过一个临时文件来获得这个工作

我意识到这一切都看起来接近你尝试过。无论如何希望它有帮助,或许可以确认你的想法

+0

不要使用''''.expand('%'),''''或'“%〜”作为引用,有'shellescape()'函数可以达到这个目的。不要忘了,POSIX允许文件名中除NULL之外的所有内容,包括'''(和newline,但这在system()中不起作用,我认为这是一个vim错误,尽管它是有记录的) – ZyX 2012-02-16 18:00:00

+0

你的第一个版本做我想做的,不知怎的,我从来没有考虑过和备份做比较 – pconley 2012-02-16 19:55:17

+0

@ZyX终于找到时间来整合你的反馈意见了,迟到了...? – sehe 2014-02-11 01:08:20