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

How to disable vim pasting to/from system clipboard?

提问人:S.V 提问时间:7/27/2016 最后编辑:datUserS.V 更新时间:3/2/2023 访问量:3505

问:

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

如何从系统的剪贴板粘贴(并复制到)vim?

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

在 vim 7.2 中我可以这样做,但在 vim 7.4 中我不能。由于正确的 C++11 语法突出显示,我想使用 7.4,但这种更改的默认行为正在杀死我。

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

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

谢谢!

VIM 编辑器 剪贴板

评论

0赞 SibiCoder 7/27/2016
您有两种选择。首先,最好避免使用剪贴板寄存器。其次,将其映射或设置为其他寄存器。:)

答:

0赞 P4C 7/28/2016 #1

检查

:h clipboard-unnamed

此扩展也可能对您有用 http://vimawesome.com/plugin/easyclip

18赞 DJMcMayhem 7/28/2016 #2

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

:set clipboard=

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

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

默认情况下,Vim 会“剪切”而不是“删除”。这意味着每个删除命令 ( 和 ) 都会同时拉向未命名的寄存器。要解决这个问题,只需使用黑洞寄存器,例如使用 or 而不是仅仅做 or 。cd"_c"_dcd

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)和选择模式(使用鼠标)

相关 SO 链接

评论

0赞 S.V 7/28/2016
(这是对您回复的先前版本的评论)谢谢!“:set clipboard=”对我来说:)如果你把你的答案反转回来,建议我“:set clipboard=”,我会接受;)
0赞 DJMcMayhem 7/28/2016
@S.V 很高兴我能帮上忙!另外,正如您所知,如果您有更多问题,还有一个专门的 vim 站点
0赞 S.V 7/28/2016
谢谢!事实上,我不知道 vi.stackexchange.com - 不知何故,我的谷歌搜索将我带到了这里,而不是专门的 vim 网站。