【问题标题】:Is the vim clipboard a stack? If yes, how can I paste copied data from that stack?vim剪贴板是堆栈吗?如果是,我如何粘贴从该堆栈复制的数据?
【发布时间】:2013-07-01 05:09:54
【问题描述】:
当您不在 vim 中插入更多内容并删除某些内容时,它会自动在剪贴板中。这个剪贴板像堆栈一样工作吗?
如果剪贴板是一个堆栈,我如何访问此堆栈中以前的条目?
如果剪贴板不是堆栈,它是如何工作的?它可以同时保存多个数据条目吗?以及如何访问它们?
我想要的是创建一个宏(记录),以获取此剪贴板堆栈中的第 N 个条目,或者获取多个数据条目(如果它们可以同时保存在内存中)。
【问题讨论】:
标签:
vim
macros
clipboard
vim-registers
【解决方案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 使用寄存器来拉取和删除。
确切的机制有点棘手,所以我建议你看看:h registers