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

Posted

技术标签:

【中文标题】如何禁用vim粘贴到/从系统剪贴板?【英文标题】:How to disable vim pasting to/from system clipboard? 【发布时间】:2016-12-01 17:17:38 【问题描述】:

基本上,我需要关于如何执行此处描述的相反的建议:

How to make vim paste from (and copy to) system's clipboard?

当我在编辑器中删除某些内容时,我不希望 vim 覆盖系统剪贴板。对我来说通常的工作流程是用鼠标选择一段代码(让我们称之为第 1 段),然后转到另一段代码(让我们称之为第 2 段),在可视模式下选择第 2 段vim,使用“c”删除它,然后使用鼠标中键粘贴#1。使用新行为,而不是粘贴第 1 块,我粘贴第 2 块。

在 vim 7.2 中我可以做到这一点,但在 vim 7.4 中我不能。由于正确的 C++11 语法突出显示,我想使用 7.4,但是这种更改的默认行为让我很生气。

我认为,这与 vim (vim --version),我需要以某种方式将它们更改为 "-xterm_clipboard" 和/或 "-clipboard"。我尝试使用选项 "--with-x=no" 重新编译 vim 7.4,但不知何故没有帮助。

请帮我在 vim 中默认禁用复制/粘贴到系统剪贴板。

谢谢!

【问题讨论】:

您有两个选择。首先,最好避免使用剪贴板寄存器。其次,将其映射或设置到其他寄存器。 :) 【参考方案1】:

好吧,要回答标题中的问题,您可以这样做

:set clipboard=

这将使 vim 使用它的内部寄存器而不是系统寄存器。

但实际上,这种行为与系统剪贴板无关。更多的是对vim寄存器的普遍误解。

Vim 默认“剪切”而不是“删除”。这意味着每个删除命令(cd)同时拉到未命名的寄存器。要解决这个问题,只需使用黑洞寄存器,例如使用"_c"_d 而不是只使用cd

9. Black hole register "_               *quote_*
When writing to this register, nothing happens.  This can be used to delete
text without affecting the normal registers.  When reading from this register,
nothing is returned.  not in Vi

要使其成为您特定情况的默认行为,您可以这样做

xnoremap c "_d

“xnoremap”中的“x”表示此映射适用于视觉模式(使用 v)和选择模式(使用鼠标)

Related SO link.

【讨论】:

(这是对上一版回复的评论)非常感谢! ":set clipboard=" 对我有用 :) 如果您将答案反过来建议我改为 ":set clipboard=",我会接受它;) @S.V 很高兴我能帮上忙!另外,请注意,如果您以后还有更多问题,还有一个dedicated vim site。 谢谢!事实上,我不知道vi.stackexchange.com - 不知何故,我的谷歌搜索把我带到了这里,而不是专门的 vim 网站。【参考方案2】:

检查

:h clipboard-unnamed

这个扩展可能对你也有用http://vimawesome.com/plugin/easyclip

【讨论】:

以上是关于如何禁用vim粘贴到/从系统剪贴板?的主要内容,如果未能解决你的问题,请参考以下文章

vim 如何与外界粘贴复制

Vim

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

vim剪贴板是堆栈吗?如果是,我如何粘贴从该堆栈复制的数据?

从剪贴板粘贴代码时,Vim 会放置很多制表符 [重复]

VI/VIM 无法使用系统剪贴板(clipboard)