当前位置:  开发笔记 > 开发工具 > 正文

Vim:在每次按键时写回我的文件

如何解决《Vim:在每次按键时写回我的文件》经验,为你挑选了3个好方法。

我希望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

Sameer.. 11

不再需要这些黑客攻击了.无论何时更改,Vim都可以自动将文件写入磁盘.只需将其添加到$ MYVIMRC即可:

autocmd TextChanged,TextChangedI write

我相信你需要Vim 7.4.相反autosave=1,这将您更改文件后立即保存.



1> Sameer..:

不再需要这些黑客攻击了.无论何时更改,Vim都可以自动将文件写入磁盘.只需将其添加到$ MYVIMRC即可:

autocmd TextChanged,TextChangedI write

我相信你需要Vim 7.4.相反autosave=1,这将您更改文件后立即保存.



2> rampion..:

一个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

只要状态行可见,它就会在每次更改文件后更新.更新后,将WriteFile()调用该函数,该函数将写入文件(并在默认状态行返回我的近似值).使用时laststatus=2,即使只打开一个窗口,也会显示状态行.

这将在每次更改后保留当前缓冲区.


我建议用`update`替换`write`:只有在文件发生变化时才会写文件.
那些想在`set statusline`命令中使用rampion的半默认格式化字符串的人,不要忘记用黑色的东西逃避空间 - 我已经失去了将近一个小时!

3> Eevee..:

有CursorMoved和CursorMovedI autocmd事件,但我不认为每次键入插入模式时都会应用一个事件.

您也可以,如此大胆,在插入模式下重新绑定每个可打印字符以保存然后键入字符.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有