正如问题标题所述,我希望在VIM的插入模式下输入内容时自动保存文件。
这种操作是否可行?如何实现?
每当文本更改时,我建议保存缓冲区:
autocmd TextChanged,TextChangedI <buffer> silent write
我在这里找到了它。它对我有效。
注意 (感谢@Kevin): 不幸的是,如果您打开vim而没有打开文件,它将导致错误,因为vim将尝试保存您键入的文本但无处可存。
autocmd TextChanged,TextChangedI *.md silent write
。 - craftau TextChanged,TextChangedI <buffer> if &readonly == 0 && filereadable(bufname('%')) | silent write | endif
。 - J Cracknell:AutoSaveToggle
来启用/禁用它。
https://github.com/907th/vim-auto-save:AutoSaveToggle
是 AutoSave
插件的一部分。它不是 Vim 的原生命令! - Aleksei Chernenkov:PluginInstall
而不指定任何插件名称。 - Deqingaugroup autosave
autocmd!
autocmd BufRead * if &filetype == "" | setlocal ft=text | endif
autocmd FileType * autocmd TextChanged,InsertLeave <buffer> if &readonly == 0 | silent write | endif
augroup END
CursorHoldI
和/或TextChangedI
Vim事件上自动保存。不知道是否有人提到过这个。
按文件类型自动保存
(在这种情况下,是针对Markdown *.md文件)
autocmd BufNewFile,BufRead *.md :autocmd TextChanged,TextChangedI <buffer> silent write
使用带有逻辑的函数来处理只读缓冲区和空缓冲区,与自动命令配合使用效果非常好:
" 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
auto_save
包含一个自动命令,调用AutoSave()
。每当当前缓冲区被修改时执行(参见:help BufModifiedSet
)。AutoSave()
函数仅在缓冲区可写、非空且具有文件类型时才写入缓冲区。907th/vim-auto-save自动保存文件,但如果您的.vimrc依赖于写入事件,则可能会出现问题。
最近,我注意到https://github.com/chrisbra/vim-autosave,它将文件保存到备份目录中,如果您的.vimrc依赖于写入事件,这听起来非常有前途。
autocmd CursorHold,CursorHoldI * update
的人,请注意,这会与像Telescope这样打开自定义对话框的插件存在问题,因为脚本将尝试保存对话框。请改用*.*
而不是*
以排除非文件缓冲区。 - SOFeautocmd CursorHold,CursorHoldI * update
。 - undefined