2011-08-09 91 views

回答

9

當你開始讀文件,設置一個緩衝區變量到當前時間:

au BufRead,BufNewFile * let b:save_time = localtime() 

設置一個事件,以檢查是否有足夠的時間已過自上次保存和更新,如果沒有:

au CursorHold * call UpdateFile() 

設置自動保存時間,以秒:

let g:autosave_time = 1 

定義一個函數來保存,如果東東文件DED:

" save if needed/update the save_time after the save 
function! UpdateFile() 
    if((localtime() - b:save_time) >= g:autosave_time) 
     update 
     let b:save_time = localtime() 
    else 
     " just debugging info 
     echo "[+] ". (localtime() - b:save_time) ." seconds have elapsed so far." 
    endif 
endfunction 

然後,重置明確的節省時間:

au BufWritePre * let b:save_time = localtime() 

我沒有測試過上述的VIM 7.0和更高版本。此外,CursorHold事件不太可能足夠用於這麼小的自動保存期(記錄時也不會觸發) - 也可以在CursorMoved上調用UpdateFile()

另外,請考慮使用交換文件。默認情況下,在輸入200個字符或不活動4秒之後,將交換文件寫入。從交換中恢復很簡單,也許更可靠,以防出現問題。

+3

看來這個功能已經爲Vim的下一個版本計劃了(在Vim 7.3':help autosave'中顯示'todo.txt')。 目前我認爲沒有合適的autocmd/event來編寫vimscript來執行每秒保存。但是Michael提出的解決方案應該適用於大多數情況,因爲即使不移動光標時它不執行保存,也不太可能在不移動光標的情況下執行任何更改。 – mMontu

+0

http://vim.wikia.com/wiki/Auto-save_current_buffer_periodically –

+2

在vim 7.4中,內置的自動保存功能仍然列在未來版本中的改進中。 –

23

無論何時改變文本,這都會保存緩衝區。 (VIM 7.4)

autocmd TextChanged,TextChangedI <buffer> silent write

+1

爲了優雅和簡單大拇指!像微風一樣工作! [需要把它放在他的'_vimrc'中。] – llinfeng

1

vim-workspace插件有可能滿足您的需求(用自動讀這樣就可以獲得最後的作家獲勝行爲)相當定製的自動保存功能。 您可以將其設置爲始終自動保存(默認情況下,它僅在工作區會話中自動保存)並相應地設置更新時間。

let g:workspace_autosave_always = 1 
updatetime=1000 
相關問題