键入时自动保存在VIM中

kupeojn6  于 2022-11-11  发布在  其他
关注(0)|答案(7)|浏览(214)

正如问题标题所提到的,我希望在输入VIM(插入模式)时自动保存文件。
这可能吗?如何实现?

vlju58qv

vlju58qv1#

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

autocmd TextChanged,TextChangedI <buffer> silent write

我找到了它here。它适合我。

备注*(感谢@Kevin)*:不幸的是,如果你打开vim而没有打开文件,这将导致错误,因为vim将试图保存你键入的文本,但不会有位置。

quhf5bfb

quhf5bfb2#

您可以使用AutoSave插件来执行此操作:
https://github.com/907th/vim-auto-save
请注意,默认情况下自动保存是禁用的,请运行:AutoSaveToggle来启用/禁用它。

qjp7pelc

qjp7pelc3#

这将处理只读缓冲区(如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
hfsqlsce

hfsqlsce4#

在Vim中没有对自动保存的本地支持。但是你可以使用vim-auto-save插件来执行。
此插件默认情况下只在正常模式下自动保存,但在它的自述文件中有一节描述了如何配置插件以在插入模式下保存。* 提示:您应该将插件配置为在发生CursorHoldI和/或TextChangedI Vim事件时自动保存。*
请参阅插件文档了解如何安装和使用它。

9bfwbjaz

9bfwbjaz5#

不知道是否有人提到过这一点。
(在本例中,它用于Markdown *.md文件)

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

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

pu3pd22g

pu3pd22g6#

907 th/vim-auto-保存自动保存文件。但是如果你的.vimrc依赖于write事件,那么它可能会有问题。
最近,我注意到https://github.com/chrisbra/vim-autosave,它将文件保存到备份目录,如果您的.vimrc依赖于write事件,这听起来很有希望。

lkaoscv7

lkaoscv77#

使用一个带有逻辑的函数来处理只读缓冲区和空缓冲区,并与一个自动命令配合使用,效果非常好:

" 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()函数只在缓冲区可写、非空且具有文件类型时才写入缓冲区。

相关问题