【问题标题】:How can a buffer be duplicated in Vim?如何在 Vim 中复制缓冲区?
【发布时间】:2014-03-18 23:51:41
【问题描述】:

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

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

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

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

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

目前当我遇到这个任务时,我输入ggyG,打开或移动到新缓冲区,然后输入Vp,但我不仅在新窗口中失去了光标位置,而且我使用的复制命令必须也失去了在原始窗口中的位置。该过程肯定可以简化为一个命令。

【问题讨论】:

    标签: vim copy buffer


    【解决方案1】:

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

    1. 在原始缓冲区中:

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

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

    请注意,您要复制的“状态”不是特定于缓冲区的,而是特定于窗口的。

    【讨论】:

    • :0put 在底部留下一个空行。我们怎样才能避免这种情况?
    • 你可以在:0put之后做:$d
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 2014-01-21
      相关资源
      最近更新 更多