" auto save file when it is modified
augroup auto_save
autocmd!
" call save function
autocmd BufModifiedSet * call AutoSave()
augroup end
" save function that is called when buffer is modified
function AutoSave()
if (bufname() != "" && &buftype == "" && &filetype != "" && &readonly == 0)
silent write
" prevent empty, readonly, etc... buffers from being saved
else
endif
endfunction
7条答案
按热度按时间vlju58qv1#
我建议在文本更改时保存缓冲区:
我找到了它here。它适合我。
备注*(感谢@Kevin)*:不幸的是,如果你打开vim而没有打开文件,这将导致错误,因为vim将试图保存你键入的文本,但不会有位置。
quhf5bfb2#
您可以使用AutoSave插件来执行此操作:
https://github.com/907th/vim-auto-save
请注意,默认情况下自动保存是禁用的,请运行
:AutoSaveToggle
来启用/禁用它。qjp7pelc3#
这将处理只读缓冲区(如netrw)和未检测到的文件类型。使用TextChangedI而不是InsertLeave似乎会导致在插入模式下键入的每个字符都被写入,这可能是也可能不是您想要的。
hfsqlsce4#
在Vim中没有对自动保存的本地支持。但是你可以使用vim-auto-save插件来执行。
此插件默认情况下只在正常模式下自动保存,但在它的自述文件中有一节描述了如何配置插件以在插入模式下保存。* 提示:您应该将插件配置为在发生
CursorHoldI
和/或TextChangedI
Vim事件时自动保存。*请参阅插件文档了解如何安装和使用它。
9bfwbjaz5#
不知道是否有人提到过这一点。
(在本例中,它用于Markdown *.md文件)
这将在修改文件内容时写入这些内容,但仅适用于Markdown(*.md)文件。
pu3pd22g6#
907 th/vim-auto-保存自动保存文件。但是如果你的.vimrc依赖于write事件,那么它可能会有问题。
最近,我注意到https://github.com/chrisbra/vim-autosave,它将文件保存到备份目录,如果您的.vimrc依赖于write事件,这听起来很有希望。
lkaoscv77#
使用一个带有逻辑的函数来处理只读缓冲区和空缓冲区,并与一个自动命令配合使用,效果非常好:
自动组
auto_save
包含一个调用AutoSave()
的自动命令。每当当前缓冲区被修改时,它就会被执行(请参阅:help BufModifiedSet
)。AutoSave()
函数只在缓冲区可写、非空且具有文件类型时才写入缓冲区。