vim剪贴板是堆栈吗?如果是,我如何粘贴从该堆栈复制的数据?
Posted
技术标签:
【中文标题】vim剪贴板是堆栈吗?如果是,我如何粘贴从该堆栈复制的数据?【英文标题】:Is the vim clipboard a stack? If yes, how can I paste copied data from that stack? 【发布时间】:2013-07-01 05:09:54 【问题描述】:当您不在 vim 中插入更多内容并删除某些内容时,它会自动在剪贴板中。这个剪贴板像堆栈一样工作吗?
如果剪贴板是一个堆栈,我如何访问此堆栈中以前的条目? 如果剪贴板不是堆栈,它是如何工作的?它可以同时保存多个数据条目吗?以及如何访问它们?
我想要的是创建一个宏(记录),以获取此剪贴板堆栈中的第 N 个条目,或者获取多个数据条目(如果它们可以同时保存在内存中)。
【问题讨论】:
听起来你可能正在寻找像 YankRing 这样的插件。 确实如此。 YankRing 或YankStack. 【参考方案1】:我不会说它是一个堆栈。它像堆栈一样工作(用于删除)。
我认为你需要看看“编号寄存器”。
Vim 有 0-9 个编号的寄存器。如果你认为它是一个堆栈,堆栈的大小是9(1-9)用于删除。
抽出的东西存储在寄存器 0 和""
中,没有堆栈结构。
我说它可以“stack like”工作,但不能堆栈(用于删除),因为使用堆栈数据结构,您无法随机获取元素。你可以弹出或推送。但是使用 vim 的寄存器,您可以通过 "1 "3 "5
获取任何 (0-9) 元素,并保持“堆栈”不变。
阅读:h registers
了解详情。
【讨论】:
【参考方案2】:系统剪贴板(注册 "+
)不是堆栈,除非您使用外部工具(例如 Windows 上的 ClipX,或 GNOME 上的 Glipper)来提供操作系统级别的历史记录。
我认为你的意思是默认的 Vim 寄存器。实际上,删除和更改(至少一整行)被复制到编号的寄存器。当前删除进入"1
,其内容移至"2
等。
详情请见:help quote_number
。
与任何其他寄存器一样,您可以通过p
正常模式命令(例如"1p
)、:put reg
、<C-r>reg
从插入模式或通过getreg()
或@reg
以编程方式访问它们。
【讨论】:
【参考方案3】:有点。
Vim 使用寄存器来拉取和删除。
除非您明确使用“黑洞寄存器”,否则始终使用未命名寄存器 ""
。
编号寄存器 "0-9
用于在不使用特定寄存器的情况下拉取或删除。
确切的机制有点棘手,所以我建议你看看:h registers
【讨论】:
以上是关于vim剪贴板是堆栈吗?如果是,我如何粘贴从该堆栈复制的数据?的主要内容,如果未能解决你的问题,请参考以下文章