Vim'autowriteall'选项仅适用于特定缓冲区

时间:2009-07-31 01:47:06

标签: vim

'autowriteall'选项使Vim在退出时保存所有缓冲区。我希望能够仅将此选项用于一个特定缓冲区(即将被丢弃的临时文件),但不能用于其他缓冲区。

如何让Vim自动保存仅针对一个特定缓冲区的更改?

3 个答案:

答案 0 :(得分:1)

它不是很完美,但一种选择是使用VimLeavePre autocmd:

:autocmd VimLeavePre <buffer> w

但是,您必须退出:q!:qa!才能使用此功能,否则它将永远无法启动autocmd。

:help autocmd
:help VimLeavePre
:help autocmd-buffer-local

答案 1 :(得分:1)

您将不得不使用自动命令的组合。显而易见的相关问题是:

  • BufHidden
  • BufLeave
  • BufUnload
  • BufDelete

这将涵盖隐藏缓冲区,将它们留给其他缓冲区或窗口,关闭Vim和删除缓冲区。 (我认为BufDelete在给定BufUnload时是多余的,但我并不完全确定我已经考虑了所有情况)。请注意,VimLeavePre仅在您尝试保存的缓冲区是活动缓冲区时才有效,因此它不是您想要的。

模板自动命令将是

:autocommand {event} {filename} w

或者,如果您没有匹配的简单文件名模式,或者根本没有一个(在这种情况下w命令需要文件名参数),您可以使用缓冲区本地自动命令。这些可能必须在创建缓冲区时以某种方式设置,就好像它是由某个脚本生成的一个来显示某些信息。有关此信息,请参阅:

:help autocmd-buffer-local

您可以从

获取有关众多自动命令事件的信息
:help autocommand-events

答案 2 :(得分:0)

也许你想要的是:

setlocal autowriteall

setlocal仅启用指定缓冲区的函数。 autowriteall是autowrite + save on quit,enew,e等等(h autowriteall)