为什么vim gt命令没有按预期设置备用文件?

时间:2014-04-23 18:52:02

标签: vim

在没有任何参数的情况下启动vim,然后执行此实验。下面的实验中使用的文件a,b,c和d不需要存在。

  1. 执行:e a
  2. 执行:tabe b
  3. 执行:tabe c
  4. 执行:tabe d
  5. 执行:ls
  6. Enter 删除上一个命令的输出
  7. 执行gt
  8. 执行:ls
  9. 这是第5步的输出。

    :ls
      1  a   "a"                            line 0
      2  a   "b"                            line 0
      3 #a   "c"                            line 0
      4 %a   "d"                            line 1
    Press ENTER or type command to continue
    

    这表示“c”是备用文件(标有#),“d”是当前文件(标有%)。到目前为止,我们看到了根据文档所期望的内容。如果存在当前文件,则当我们将其他文件作为当前文件时,它将成为备用文件。

    但步骤8的输出如下。

    :ls
      1 %a   "a"                            line 1
      2  a   "b"                            line 0
      3  a   "c"                            line 0
      4  a   "d"                            line 0
    Press ENTER or type command to continue
    

    现在“a”已成为预期的当前文件。它标有%。但是“d”现在还没有成为备用文件。文件“d”不再标有#。为什么没有“d”成为备用文件?

3 个答案:

答案 0 :(得分:4)

"备用文件"是您编辑的上一个文件。

在实际切换缓冲区之前,重要的是创建缓冲区的顺序,而不是访问顺序。

您已修改a,然后b,然后c,然后d

  • a是"备用文件" b
  • b是"备用文件" c
  • c是"备用文件" d

由于a是您编辑的第一个文件,因此没有"之前的文件"所以它没有"备用文件"。

因为d是您编辑的最后一个文件,所以它不是"备用文件"任何事情。这将是"备用文件"您编辑的下一个文件。

gt没有d"备用文件" a的{​​{1}},因为您在ad甚至d之后都没有编辑a

:b a:tabedit a或其他dd为"备用文件" a

正如其他人所指出的那样,您所遇到的是使用标签页的许多缺点之一,因为您在其他编辑器中使用标签。它们可以解决它们旨在解决的问题,但是如果你坚持像文件代理一样对待它们,它们有数百种方法可以解决。

"备用文件的全部概念"是一种导航功能,适用于缓冲区。

答案 1 :(得分:1)

标签页只是窗口的容器;像Windows一样,在它们之间切换不会改变备用文件。

换句话说:导致用:tabedit更改备用文件的原因是:edit部分(这个部分引入了不同的缓冲区,因此前一个变为备用文件),不是:tab部分。因此,切换标签(使用:tabnextgt)不会影响这一点。这同样适用于像<C-W>w这样的窗口切换。

:help alternate-file提供了另一个提示:它位于doc/editing.txt部分,(正好在上方)指定:

  

使用Vim编辑文件意味着:

     
      
  1. 将文件读入缓冲区
  2.   
  3. 使用编辑器命令更改缓冲区
  4.   
  5. 将缓冲区写入文件
  6.   

答案 2 :(得分:0)

这是因为每个窗口都是自己的备用文件。由于您还没有在第一个窗口中切换缓冲区,因此您没有该特定窗口的备用文件。