有没有办法使Vim自动保存在特定间隔后我们的文件?
#1 楼
没有内置选项,尽管:help 'autosave'
(在todo.txt中)指的是这种选项可以做什么的描述。实现此功能的一种可能方法是使用
CursorHold
自动命令事件。当用户未按'updatetime'
毫秒的键时触发此事件。autocmd CursorHold * update
:update
命令仅在修改缓冲区后保存。如果您还希望在插入模式处于活动状态时发生这种情况,可以将CursorHoldI
添加到事件列表中。autocmd CursorHold,CursorHoldI * update
另一种选择是
'autowrite'
选项,该选项可以保存在执行外部命令(用于在运行:make
之前保存)或切换到其他缓冲区之前使用缓冲区。#2 楼
Vim确实具有自动保存功能,但会将其保存到“恢复”文件中。编辑文档时,例如qvim将创建修复文件
MyFile.txt
。如果您的系统崩溃了,或者会话崩溃了,那么您可以键入以下内容重新连接并从中断的地方恢复:vim -r MyFile.txt
这将打开文件进行编辑,然后恢复对它所做的最后更改。
然后您可以按正常方式保存恢复的版本
.MyFile.txt.swp
。,当您退出vim时,它将留下
:w
,您需要手动将其删除:rm .MyFile.txt.swp
请参见“恢复”手册页
第11章
评论
正确退出Vim时(即使用:wq或:q!或ZZ等退出),应自动删除交换文件。
–门把手
2015年2月3日在22:52
@Doorknob在您康复后退出时不是... ;-)
–rolfl
2015年2月3日在22:52
#3 楼
我制作了一个插件vim-autosave,它使用Timers的Vim 8功能来定期保存您的缓冲区。评论
哇,Vim 8插件已经问世了。看起来不错,基督徒!
– thameera
16/09/13在18:18
谢谢,克里斯蒂安。这看起来很有希望。我不知道插件是否支持新的/未保存的文件。我在插件文档中找不到答案。我的计算机决定昨晚重新启动,我在新缓冲区上有几条快速笔记。 Vim没有创建或保存swp文件。
– JAponte
16-10-14在17:53
不,目前,它不支持新文件/未保存的文件。如果需要,继续创建一个白色的问题。
–克里斯蒂安·布拉班特(Christian Brabandt)
16-10-14在18:10
#4 楼
正如其他人指出的那样,vim有一个交换文件(.swp),该文件将在原始文件所在的位置创建,但是在您的.vimrc文件中,您可以设置.swp目录。您需要使用
mkdir
创建目录,然后将.vimrc设置到该位置。set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
#5 楼
我让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
#6 楼
vim-workspace插件具有相当可定制的自动保存功能,可以满足您的需求。默认情况下,它在工作区会话中启用自动保存(它的主要功能),但是如果您要查找的全部内容,则可以将其设置为始终自动保存(let g:workspace_autosave_always = 1
)。#7 楼
尝试在更改文本时保存缓冲区:autocmd TextChanged,TextChangedI <buffer> silent write
这对我有用。
源
#8 楼
将此放在您的vimrc上:"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => vim-autosave
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Save on lost focus/exit
autocmd FocusLost,VimLeavePre * silent! w
" Also, save once per minute if there are changes
let g:autosave_seconds = 60
au BufRead,BufNewFile * let b:start_time=localtime()
au CursorHold * silent! call UpdateFile()
function! UpdateFile()
if ((localtime() - b:start_time) >= g:autosave_seconds)
update
let b:start_time=localtime()
endif
endfunction
au BufWritePre * let b:start_time=localtime()
源
评论
欢迎来到Vi和Vim!有一些解释,这个答案会更强
– D. Ben Knoble♦
20-11-06在16:23
这段代码可以将您的缓冲区保存在失去焦点/退出时。此外,如果有更改,则每分钟保存一次。您可以通过编辑常量“ autosave_seconds”来配置自动保存间隔。
– Adrian Lopez
20-11-06在16:44
使用编辑按钮添加更多信息
– D. Ben Knoble♦
20年11月6日在16:45
#9 楼
实现自动备份的间接方法是启用set undofile
。即使已关闭文件并退出vim,打开的文件的每次更改都保存在此处,具有多个撤消级别。我认为它非常实用,比自动保存要好。
评论
您如何知道它是否正常工作?
–尼龙
18年6月8日在13:53
@nilon它应该打印到已保存的状态栏中,就像您自己按:w一样。
– MaudPieTheRocktorate
18年8月16日在19:33