15

正如问题标题所提到的。我希望在我输入 VIM(插入模式)时自动保存文件。

这可能吗?如何实现?

4

6 回答 6

32

我建议在文本更改时保存缓冲区:

autocmd TextChanged,TextChangedI <buffer> silent write

我在这里找到了。这个对我有用。

注意 (感谢@Kevin):不幸的是,如果您打开 vim 而不打开文件,则会导致错误,因为 vim 会尝试保存您键入的文本,但不会保存在哪里。

于 2019-04-19T11:43:32.420 回答
11

您可以使用 AutoSave 插件来执行此操作:

https://github.com/907th/vim-auto-save

请注意默认情况下禁用自动保存,运行:AutoSaveToggle以启用/禁用它。

于 2013-06-28T13:04:22.347 回答
3

这将处理只读缓冲区(如 netrw)和未检测到的文件类型。使用 TextChangedI 而不是 InsertLeave 似乎会导致对在插入模式下键入的每个字符进行写入,这可能是也可能不是您想要的。

augroup autosave
    autocmd!
    autocmd BufRead * if &filetype == "" | setlocal ft=text | endif
    autocmd FileType * autocmd TextChanged,InsertLeave <buffer> if &readonly == 0 | silent write | endif
augroup END
于 2020-02-06T13:13:25.283 回答
2

Vim 中没有对自动保存的原生支持。但是您可以使用vim-auto-save插件来执行此操作。

这个插件默认只在正常模式下自动保存,但它的 README中有一节描述了如何配置插件以在插入模式下保存。提示:您应该将插件配置为自动保存CursorHoldI和/或TextChangedIVim 事件。

请参阅插件文档以了解如何安装和使用它。

于 2017-03-10T08:42:33.460 回答
1

不知道有没有人提到这个。按文件类型自动保存

(在这种情况下,它适用于 Markdown *.md 文件)

autocmd BufNewFile,BufRead *.md :autocmd TextChanged,TextChangedI <buffer> silent write

这将在文件内容被修改时写入文件内容,但仅适用于 Markdown (*.md) 文件。

于 2020-08-26T01:22:05.763 回答
0

907th/vim-auto-save 自动保存文件。但是如果你的 .vimrc 依赖于 write 事件,那么它可能有问题。

最近,我注意到https://github.com/chrisbra/vim-autosave,它将文件保存到备份目录,如果您的 .vimrc 依赖于 write 事件,这听起来很有希望。

于 2020-07-15T21:19:19.730 回答