2014-03-01 115 views
3

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

然后我可以做一些类似下面的当前选项卡复制到一个新的选项卡gVim的,例如:

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

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

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

目前,当我遇到这个任务,我键入ggyG,打开或移动到新的缓冲区,然后键入Vp,但我不仅失去我的新窗口的光标位置,我用必要失去位置的复制命令在原始窗口中也是如此。这个过程当然可以精简为一个命令。

回答

1

命令应该提供一个良好的起点下面的一系列...

  1. 在原来的缓冲

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

    :execute "setf " . my_ft 
    :0put 
    :call winrestview(my_view) 
    

请注意,“国家”y你想重复的不是特定于缓冲区的,而是特定于窗口的。

1

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