我希望vim能够尽可能频繁地自动编写我的文件.理想的是每次按键.
我需要定期保存,以便我的后台构建过程能够看到它.这是一个乳胶文档的makefile,我希望预览器在我完成输入时向我显示一个近乎最新的文档.
" Choose your own statusline here
let g:pbstatusline="%F\ %y\ %l:%c\ %m"
set statusline=%F\ %y\ %l:%c\ %m
autocmd FileType tex setlocal autowriteall
" Save the file every 5 keypresses
autocmd FileType tex setlocal statusline=%!pb:WriteFileViaStatusLine()
" Save the file every time this event fires.
autocmd FileType tex :autocmd InsertLeave,CursorHold,CursorHoldI * call pb:WriteFileViaStatusLine("always")
" 1 optional param: "always" is only allowed value.
let s:writefilecounter = 0
function! pb:WriteFileViaStatusLine(...)
if s:writefilecounter > 5 || (a:0 > 0 && a:1 == "always")
if &buftype == ""
write
endif
let s:writefilecounter = 0
else
let s:writefilecounter = s:writefilecounter + 1
endif
return g:pbstatusline
endfunction
Run Code Online (Sandbox Code Playgroud)
Sam*_*eer 11
不再需要这些黑客攻击了.无论何时更改,Vim都可以自动将文件写入磁盘.只需将其添加到$ MYVIMRC即可:
autocmd TextChanged,TextChangedI <buffer> write
我相信你需要Vim 7.4.相反autosave=1,这将在您更改文件后立即保存.
ram*_*ion 10
一个hack就是使用你的状态行:
function! WriteFile()
if &buftype == ""
write
endif
return '%f %h%w%m%r%=%-14(%l,%c%V%) %(%P%)'
endfunction
setlocal statusline=%!WriteFile()
set laststatus=2
Run Code Online (Sandbox Code Playgroud)
只要状态行可见,它就会在每次更改文件后更新.更新后,将WriteFile()调用该函数,该函数将写入文件(并在默认状态行返回我的近似值).使用时laststatus=2,即使只打开一个窗口,也会显示状态行.
这将在每次更改后保留当前缓冲区.
有CursorMoved和CursorMovedI autocmd事件,但我不认为每次键入插入模式时都会应用一个事件.
您也可以,如此大胆,在插入模式下重新绑定每个可打印字符以保存然后键入字符.