2012-02-16 79 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