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剪贴板是堆栈吗?如果是,我如何粘贴从该堆栈复制的数据?的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA 中的堆栈跟踪控制台

vim在系统剪切板的复制与粘贴

如何禁用vim粘贴到/从系统剪贴板?

vim 如何与外界粘贴复制

IDEA插件系列(89):Copy/Paste Stack插件——复制/粘贴工具栈

如何使用+剪贴板使用Brew安装Vim?