键入时自动保存在VIM中

Oma*_*bid 4 vim

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

这可能吗?如何实现呢?

sim*_*eco 28

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

autocmd TextChanged,TextChangedI <buffer> silent write
Run Code Online (Sandbox Code Playgroud)

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

注意 (感谢@Kevin):不幸的是,如果您在没有打开文件的情况下打开 vim 会导致错误,因为 vim 会尝试保存您键入的文本,但不会保存在何处。

  • 如果您打开 vim 而不打开文件,这将导致错误。 (3认同)
  • 正如 @eric 所指出的,您可以检查缓冲区是否是只读的,但这似乎可以用于验证它是否由文件支持: `au TextChanged,TextChangedI &lt;buffer&gt; if &amp;readonly == 0 &amp;&amp; fileread(bufname('%' )) | 默默地写| 结束` (3认同)
  • 这就是字面上的解决方案。无需使用插件使事情变得复杂。 (2认同)
  • @simhumileco 解决这个问题的方法可能是指定缓冲区类型。例如 `autocmd TextChanged,TextChangedI *.md 无提示写入` (2认同)

Jay*_*ram 5

您可以使用自动保存插件执行以下操作:

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

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


小智 5

这将处理只读缓冲区(如 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
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下你的每一行代码吗? (2认同)