我想我在 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
已经修改了缓冲区的内容。用无害的替换命令返回到“空”的情况。new
echo
有任何 Vim 向导知道这里到底发生了什么吗?
(编辑)上下文:
我正在尝试构建一个(非常简化的)版本的recover.vim
.
- 为什么不使用现有的插件
recover.vim
?因为我正在尝试做一些既(可能)更简单又不同于它所做的事情。另外,这个插件使用了大量的 shell 转义,这在我的上下文中很糟糕。我很乐意牺牲功能来摆脱这些逃逸。 - 我至少应该看看是怎么
recover.vim
做的:可能。但由于它相当复杂,我认为从文档开始工作会更容易......(不过,我会尝试使用 github 的旧版本recover.vim
)。 - 我使用的是旧的 Vim 版本:我在这里别无选择(不是管理员,甚至没有在这个环境中编译权限)。