2

我想我在 Vim 自动命令中观察到一个奇怪的行为,其中打开一个新的缓冲区会改变过去命令的结果(!)。这是一个简单的例子(VIM 7.3 2010 Aug 15)。我刚刚创建了一个test仅包含“磁盘版本”行的文件,然后将此文件保存到磁盘。保持这个文件test在 Vim 中打开,我将文本更改为“SWAP VERSION”,而不保存:现在该文件test有一个关联的交换文件。

空壳:

.vimrc我写了一个init.vim包含单个自动命令的文件,而不是 ,在BufRead调用时输入文件的内容:

au BufRead * %p

然后当我加载vim -u init.vim test并按r键接受交换恢复时,自动命令会按预期打印出“SWAP VERSION”。

奇怪的情况:

init.vim我通过以下方式更改自动命令:

au BufRead * %p | new

相同的过程 ( vim -u init.vim test, r ) 现在打印出“磁盘版本”。换句话说,该命令在执行前一个命令时new已经修改了缓冲区的内容。用无害的替换命令返回到“空”的情况。newecho

有任何 Vim 向导知道这里到底发生了什么吗?

(编辑)上下文:

我正在尝试构建一个(非常简化的)版本的recover.vim.

  • 为什么不使用现有的插件recover.vim因为我正在尝试做一些既(可能)更简单又不同于它所做的事情。另外,这个插件使用了大量的 shell 转义,这在我的上下文中很糟糕。我很乐意牺牲功能来摆脱这些逃逸。
  • 我至少应该看看是怎么recover.vim做的:可能。但由于它相当复杂,我认为从文档开始工作会更容易......(不过,我会尝试使用 github 的旧版本recover.vim)。
  • 我使用的是旧的 Vim 版本:我在这里别无选择(不是管理员,甚至没有在这个环境中编译权限)。
4

0 回答 0