可以使Vim自动保存文件吗?


32

一些文字处理程序和文本编辑器会不时自动保存我们正在编辑的文件,这对于从严重的崩溃中幸存下来非常方便。

有没有办法使Vim在特定的时间间隔后自动保存文件?

Answers:


30

没有内置选项,尽管:help 'autosave'(在todo.txt中)指的是这种选项可以做什么的描述。

实现此目的的一种可能方法是使用CursorHold自动命令事件。当用户未按下按键数'updatetime'毫秒时触发此事件。

autocmd CursorHold * update

:update命令仅在修改缓冲区后保存。如果您还希望在插入模式处于活动状态时发生这种情况,CursorHoldI可以将其添加到事件列表中。

autocmd CursorHold,CursorHoldI * update

另一个选择是该'autowrite'选项,该选项将在执行外部命令之前保存该缓冲区(在运行前用于保存:make)或切换到其他缓冲区。


您如何知道它是否正常工作?
尼龙

@nilon它应该打印到保存的状态栏中,就像您自己按:w一样。
MaudPieTheRocktorate

12

Vim确实具有自动保存功能,但是将其保存到“恢复”文件中。

当您编辑文档时,例如MyFile.txtvim将创建修复文件.MyFile.txt.swp。如果您的系统崩溃了,或者会话崩溃了,那么您可以输入以下内容来重新连接并从中断的地方恢复:

vim -r MyFile.txt

这将打开文件进行编辑,并恢复您对其所做的最后更改。

然后,您可以按正常方式保存恢复的版本:w

不幸的是,当退出vim时,它将离开.MyFile.txt.swp周围,​​您需要手动将其删除:

rm .MyFile.txt.swp

请参见“恢复”手册页第11章


1
当您正确退出Vim时(即使用:wqor :q!ZZor等),应该自动删除交换文件。
门把手2015年

4
@Doorknob不,当您在康复后退出... ;-)
rolfl 2015年

8

我制作了一个插件vim-autosave,它使用Timers的Vim 8功能来定期保存您的缓冲区。


哇,Vim 8插件已经问世了。看起来不错,基督徒!
thameera

谢谢,克里斯蒂安。这看起来很有希望。我不知道插件是否支持新的/未保存的文件。我在插件文档中找不到答案。我的计算机决定昨晚重新启动,我在新缓冲区上有几条快速笔记。Vim没有创建或保存swp文件。
JAponte

否,当前不支持新文件/未保存文件。如果需要,继续创建一个白色的问题。
Christian Brabandt '16

2

每当失去焦点时,我都会让Vim保存一切。

autocmd FocusLost <your-patterns-here> silent! wall

我的模式很长,我在多个autocmd中使用它们,但是为了完整起见,这是这样的:

if exists(':keeppatterns')
    let s:keeppatterns = 'keeppatterns '
else
    let s:keeppatterns = ''
endif

augroup AutoSaveGroup
    " :help file-pattern has some info,
    " but some of it is is buried in the PATTERNS section of usr_40.txt
    let s:autoPattern = "*.{c,h,[ch]pp,[acjt]s,inl,cg,cgfx,fx,py,bat,cmd,jam,vim,yml,yaml,vsprops,erb,rb,html,htm},SCons*,*vimrc"

    autocmd!
    execute "autocmd FocusLost"     s:autoPattern   "silent! wall"
    execute "autocmd BufWritePre"   s:autoPattern   s:keeppatterns . 'call FixFormatting(expand("<afile>"))'

    execute "autocmd FileChangedRO" s:autoPattern "silent !p4 edit %:p"
    execute "autocmd FileChangedRO" s:autoPattern "write!"

    autocmd FocusLost   *.txt   silent! wall
augroup END

1

正如其他人指出的那样,vim有一个交换文件(.swp),该文件将在原始文件所在的位置创建,但是在.vimrc文件中,您可以设置.swp目录。

您需要使用创建目录,mkdir然后将.vimrc设置到该位置。

set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp

1

VIM工作空间插件具有相当定制的自动保存功能可满足您的需求。默认情况下,它在工作区会话中启用自动保存(其主要功能),但是如果您要查找的全部内容(let g:workspace_autosave_always = 1),则可以将其设置为始终自动保存。


1

每当文本更改时,尝试保存缓冲区:

autocmd TextChanged,TextChangedI <buffer> silent write

这对我有用。

资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.