file - 如何在 Vim 中每次按键时将当前缓冲区的内容写回文件?

标签 file vim

我希望 Vim 尽可能频繁地自动写入我的文件。理想的情况是每次击键。
我需要定期保存,以便我的后台构建过程能够看到它。这是一个 LaTeX 文档的 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

最佳答案

一种技巧是使用您的状态行:

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 ,即使只打开一个窗口也会显示状态行。

这将在每次更改后保存当前缓冲区。

关于file - 如何在 Vim 中每次按键时将当前缓冲区的内容写回文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1313323/

相关文章:

c# - 哪种方式可以将自定义类型保存到移动设备上的文件中?

python - 使用python在linux中访问文件的时间

java - 如何搜索file.txt中包含字符串的行

vim - 为了提高我在 VIM 中的速度而学习 ed 值得吗?

vim - vim不区分大小写的搜索,带有敏感替换

java - 如何将 SmbFile 转换为 File?

Java 无法打开文件名中包含替代 Unicode 值的文件?

vim - 我的 MacVim 顶部有奇怪的栏?

Java System.out.print();,在 Eclipse 上的行为与在 Eclim 上的行为不同

bash - 在 cygwin 中将所有行从 VIM 复制到剪贴板