2014-06-29 132 views
0

如何在不切換到該緩衝區的情況下將更改保存到修改後的Vim緩衝區中?我正在嘗試編寫一個保存並關閉項目中所有緩衝區的函數。在不切換到該緩衝區的情況下保存對Vim緩衝區的更改

+0

爲什麼要避免切換到緩衝區? –

+0

@DonReba它更乾淨更快 - 當你切換到緩衝區時,它會觸發autocmds等;同樣,如果你在一個函數中做了這個,那麼就需要額外編碼來存儲你的原始緩衝區,以便你可以在最後切換回它。 –

回答

2

除了:wqall命令之外,沒有寫入除當前緩衝區以外的緩衝區的命令。

所以你必須切換到緩衝區才能寫入它。您可以使用:noautocmd來避免相關事件(但可能會產生不良副作用!)。

唯一的選擇是使用像getbufline()writefile()這樣的低級函數,但是你必須自己處理編碼轉換,fileformat等。

2

您可以使用:wqa[ll]來寫入和關閉所有更改的緩衝區。 :wa將寫入而不關閉。

+0

':x'就像':wq',只是它只寫入那些已經改變的緩衝區。 –

+0

我不一定要寫所有的緩衝區,只有一個指定的集合(例如特定項目中的那些)。有沒有辦法? –

+0

@SeanMackesey,「我正在嘗試編寫一個函數來保存並關閉項目中的所有**緩衝區。」 – romainl

1

您可以使用參數列表,請參閱:help argument-list

假設您正在使用三個文件foobarbaz工作,並希望只寫foobaz

:args foo baz 
:argdo w 

顯然需要額外的邏輯來判斷其緩衝放於arglist中的第一個地方,但它聽起來像你已經有了。

+0

仍然切換到每個緩衝區,也不保留原始緩衝區。 –