我认为我在Vim自动命令中观察到一种奇怪的行为,其中打开一个新缓冲区会改变过去命令的结果(!)。
这是一个简单的例子(VIM 7.3 2010年8月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
命令将返回" null"情况下。
是否有任何Vim向导知道这里到底发生了什么?
我正在尝试构建recover.vim
的一个(非常简化的)版本。
recover.vim
?因为我尝试做的事情(可能)既简单又不同。另外,这个插件使用了很多shell转义,这在我的上下文中很糟糕。我很乐意牺牲功能来摆脱这些逃脱。recover.vim
的作用:可能。但是由于它的使用起来相当复杂,我认为从文档开始编写会更容易......(但是,我会对recover.vim
)的旧github版本进行修改。