我正在寻找一种方法来制作一个新缓冲区,它是当前缓冲区的副本。
然后,我可以执行以下操作,将当前标签复制到gVim中的新标签页,例如:
:let b = bufnr("%") | tabnew | execute 'buffer' b | *duplicate*
但是,这个问题不是特定于制表符或gVim;我可能想在split
命令或vert diffsplit
命令后复制缓冲区。 (实际上,vert diffsplit
是我意识到我想复制缓冲区的第一个实例。)
理想情况下,我还希望尽可能多地保留原始缓冲区和窗口状态,包括游标位置,但原始缓冲区只读状态被忽略,新缓冲区始终可写。
目前,当我遇到此任务时,我键入ggyG
,打开或移动到新缓冲区,然后键入Vp
,但不仅会丢失新窗口的光标位置,副本命令我使用必须丢失原始窗口中的位置。这个过程肯定可以简化为一个命令。
答案 0 :(得分:1)
以下命令序列应该提供一个很好的起点......
在原始缓冲区中:
:%y
:let my_view = winsaveview()
:let my_ft = &filetype
:new
在新缓冲区中:
:execute "setf " . my_ft
:0put
:call winrestview(my_view)
请注意,您要复制的“状态”不是缓冲区特定的,而是特定于窗口的。
答案 1 :(得分:1)
我的clone plugin为此提供了:CloneAs {file}
命令。它基本上创建了一个新的缓冲区,并复制原始缓冲区,光标位置和关键选项。