如何在Vim中复制缓冲区?

时间:2014-03-01 15:14:35

标签: vim copy buffer

我正在寻找一种方法来制作一个新缓冲区,它是当前缓冲区的副本。

然后,我可以执行以下操作,将当前标签复制到gVim中的新标签页,例如:

:let b = bufnr("%") | tabnew | execute 'buffer' b | *duplicate*

但是,这个问题不是特定于制表符或gVim;我可能想在split命令或vert diffsplit命令后复制缓冲区。 (实际上,vert diffsplit是我意识到我想复制缓冲区的第一个实例。)

理想情况下,我还希望尽可能多地保留原始缓冲区和窗口状态,包括游标位置,但原始缓冲区只读状态被忽略,新缓冲区始终可写。

目前,当我遇到此任务时,我键入ggyG,打开或移动到新缓冲区,然后键入Vp,但不仅会丢失新窗口的光标位置,副本命令我使用必须丢失原始窗口中的位置。这个过程肯定可以简化为一个命令。

2 个答案:

答案 0 :(得分:1)

以下命令序列应该提供一个很好的起点......

  1. 在原始缓冲区中:

    :%y
    :let my_view = winsaveview()
    :let my_ft = &filetype
    :new
    
  2. 在新缓冲区中:

    :execute "setf " . my_ft
    :0put
    :call winrestview(my_view)
    
  3. 请注意,您要复制的“状态”不是缓冲区特定的,而是特定于窗口的。

答案 1 :(得分:1)

我的clone plugin为此提供了:CloneAs {file}命令。它基本上创建了一个新的缓冲区,并复制原始缓冲区,光标位置和关键选项。