2012-07-28 57 views
2

如何取消寫入BufWritePre/FileWritePre自動命令?取消寫入Vim腳本的BufWritePre

我已經看過this question,並且提出的解決方案throw顯示錯誤消息,我不希望這樣。它對於沒有任何東西寫入的用戶應該是透明的,因爲我顯示了我自己的錯誤信息。

+0

另請參見「[禁止在Vim中保存具有特定名稱的文件]」(http://stackoverflow.com/q/6210946/254635)。 – 2012-07-29 04:11:54

回答

1

然後只是拋出自己的錯誤信息。我認爲沒有其他辦法可以解決這個問題。畢竟,用戶期望在發出:w之後寫入緩衝區,所以只有一個例外可以防止這種情況發生。

你可能會解決此通過使用BufWriteCmd鉤和:setl buftype=acwrite,並且完全寫入緩衝區你自己,但是這是一個很大的(容易出錯)的努力,如果你打算髮出一個錯誤,反正去有這個特例。

+0

我可以防止它顯示'處理函數時檢測到錯誤...'和行號至少如何?這是令人討厭的,使得它看起來像腳本不應該這樣做。 – mk12 2012-07-28 18:21:12

+3

關於'acwrite'和容易出錯的努力的一個補充:如果不打算使用內置的':w',他會關心'fileencoding','fileformat','binary' '+''endofline'選項(如果可能的話也可能是'charconvert'):只是爲了模擬':w'行爲。更多的是,他將關注'v:cmdarg',這些選項可以被重寫:模擬':w ++ opt'。另外他應該確定他使用了一種模式:'au BufWriteCmd '有一個關注幾乎所有緩衝區寫入的問題,包括':w另一個文件名'(但不包括':w!shell-command') 。 – ZyX 2012-07-28 18:36:24

+1

您正在從autocmd調用函數;相反,讓函數返回一個成功標誌,並直接拋出autocmd:'autocmd BufWritePre if!MyFunc()|拋出「錯誤」| endif';這只是稍微好一點;不過,我很害怕。 – 2012-07-28 18:51:48