用于“编辑新文件”或“切换到现有缓冲区”的单个vim命令?

时间:2012-12-15 13:37:10

标签: vim

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

我正在寻求在以下两个条件下取得成功的命令:

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

澄清: 对不起,所有的误导。实际上,只要修改后的“tmp.rb”没有加载到当前窗口中,单个命令e tmp.rb就会生成,在哪种情况我更喜欢e tmp.rb不会导致错误并且与b tmp.rb具有相同的效果。也许这个小问题会让缓冲区,窗口等更容易编写脚本。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我无法重现你的问题。

我尝试重现您的问题是

  1. 用vim打开tmp.rb,写一些东西并保存。
  2. 在其他shell中,

    $ echo > tmp.rb
    
  3. 在vim中输入:ee: tmp.rb,它会毫无问题地重新打开文件。

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

答案 2 :(得分:0)

你问题的标题是“或”,但它的正文是“AND”。

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

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

:e tmp.rb
:b tmp.rb

如果你不介意安装插件,CtrlP:CtrlPMixed可以帮助你提供漂亮的抽象。