3

问题:如果文件“tmp.rb”已被修改,命令“e tmp.rb”将失败。

我正在寻找在以下两种情况下都能成功的命令:

  • 如果“tmp.rb”不在缓冲区列表中,将加载该文件;
  • 如果“tmp.rb”已经在缓冲区列表中并被修改,缓冲区将被加载(在当前窗口中)。

澄清:对不起所有的误导。e tmp.rb实际上,只要修改后的“tmp.rb”没有加载到当前窗口中,一个命令就可以实现两者,在这种情况下我更喜欢e tmp.rb不会导致错误并且与b tmp.rb. 也许这个小问题会使围绕缓冲区、窗口等的脚本更容易一些。

4

3 回答 3

1

:edit当缓冲区已经加载和修改以防止您意外覆盖更改时,该命令将失败。如果您确实想覆盖,请:edit!改用。在许多 Vim 命令中,附加的 bang ( !) 强制命令。或者,如果您希望 Vim 要求您确认,请使用:confirm edit.

于 2012-12-15T14:14:12.063 回答
0

你的问题的标题是“OR”,但它的主体是“AND”。

Vim 的命令通常非常精确,很少会看到一个模棱两可的命令会执行多个互斥的事情。可用于进入插入模式的键数 ( iaIAsScCoO) 就是一个很好的例子。

您应该针对每种情况使用适当的命令:

:e tmp.rb
:b tmp.rb

如果您不介意安装插件,CtrlP:CtrlPMixed可能会帮助您进行出色的抽象。

于 2012-12-15T14:45:07.277 回答
0

我无法重现您的问题。

我尝试重现您的问题的方法是

  1. 用vim打开tmp.rb,写点东西保存。
  2. 在其他外壳中,

    $ echo > tmp.rb
    
  3. 在 vim 中输入:eor e: tmp.rb,它重新打开文件没有任何问题。

如果其他程序同时访问 tmp.rb,则该其他程序可能正在锁定文件,因此您遇到了您描述的问题。

于 2012-12-15T13:56:57.520 回答