如何创建一个新缓冲区作为另一个缓冲区的克隆?换句话说,内容应该相同,但最终应该是 2 个不同的缓冲区。我对这样做的编程方式更感兴趣,而不是从映射的角度来看,因为这是未来插件所需要的。
像拉动一个缓冲区,然后将焦点放在另一个缓冲区并粘贴这样的建议在这里不起作用,因为这意味着我们已经覆盖了用户之前的拉动,因此在调用我们的插件方法后破坏了用户的体验。我正在寻找一些尽可能偷偷摸摸的方法。
此外,作为奖励,这个新缓冲区应该被隐藏起来,因为它只是用来快速存储一些处理过的数据,然后立即死亡。最好不要进行任何拆分,因为即使尽快关闭(例如:new
/:close
组合),它们也会引入烦人的闪烁(因为 Vim 重绘屏幕)。我们也不能假设我们要克隆的缓冲区有名称。
谢谢你。
结论
一些测试表明,使用
:put=getbufline(...)
是最快的方法,也是最安全的方法,因为它不会以任何方式干扰用户体验。
虽然没有人回答这个问题,但我设法找到了一个函数,它可以创建一个没有任何拆分的新隐藏缓冲区,即它将在没有窗口的背景上静默创建。要了解更多信息,请参阅:h bufnr()
。例子:
let buffer_number = bufnr('My New Hidden Buffer', 1)
此外,此调用将隐式执行以下操作:
let &l:buflisted = 0
在这个新创建的缓冲区上,所以它也会被隐藏:ls
,这正是我们需要满足上述要求。
因此,对于用户来说,不会有任何闪烁或任何视觉刺激,例如 from :new
/ :close
combo ......对于一些肮脏的工作来说,这是一个真正隐藏的缓冲区。