我試圖在當前緩衝區和其保存文件之間運行差異。因爲我想對diff輸出做一些處理,所以我需要它在一個變量中,而不是一個新的緩衝區。我知道有一種方法可以做到這一點將差異輸出傳遞給變量
w !diff % - > tmpfile
let myvar = system(cat tmpfile)
有沒有更優雅的方式?
我試圖在當前緩衝區和其保存文件之間運行差異。因爲我想對diff輸出做一些處理,所以我需要它在一個變量中,而不是一個新的緩衝區。我知道有一種方法可以做到這一點將差異輸出傳遞給變量
w !diff % - > tmpfile
let myvar = system(cat tmpfile)
有沒有更優雅的方式?
假設你能寫緩衝區,你可以不喜歡
:let @a=system('diff ' . shellescape(expand('%')) . ' ' . shellescape(expand('%')) . '~')
到例如比較buffer.txt到buffer.txt〜並把結果寄存器a
否則,請嘗試
:let @a=""
:redir @A
:%w !diff - "%~"
:redir END
在我的初步測試,這似乎不是在Win32 GVIM工作,雖然。你可能需要通過一個臨時文件來獲得這個工作
我意識到這一切都看起來接近你嘗試過。無論如何希望它有幫助,或許可以確認你的想法
不要使用''''.expand('%'),''''或'「%〜」作爲引用,有'shellescape()'函數可以達到這個目的。不要忘了,POSIX允許文件名中除NULL之外的所有內容,包括'''(和newline,但這在system()中不起作用,我認爲這是一個vim錯誤,儘管它是有記錄的) – ZyX 2012-02-16 18:00:00
你的第一個版本做我想做的,不知怎的,我從來沒有考慮過和備份做比較 – pconley 2012-02-16 19:55:17
@ZyX終於找到時間來整合你的反饋意見了,遲到了...? – sehe 2014-02-11 01:08:20
樣本'vimrc's包含':DiffOrig'命令。既然它不回答你的問題,我把它作爲評論,但這是相關的,可能會讓你感興趣。 – Benoit 2012-02-16 15:37:06