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

S.V*_*S.V 6 vim clipboard editor c++11

基本上,我需要建议如何与此处描述的相反:

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

不想 VIM覆盖系统剪贴板,当我删除编辑器中的东西.对我来说,通常的工作流程是用鼠标选择一段代码(让我们称之为#1),然后转到另一段代码(让我们称之为#2),在视觉模式中选择#2 vim,使用"c"删除它,并使用鼠标中键粘贴#1.使用新的行为,而不是粘贴#1,我粘贴#2.

在vim 7.2中我可以做到这一点,但在vim 7.4中我不能.我想使用7.4由于正确的C++ 11语法高亮,但这种改变的默认行为正在扼杀我.

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

请帮助我默认禁用vim中的复制/粘贴到系统剪贴板.

谢谢!

DJM*_*hem 8

那么,要回答你标题中的问题,你就可以做到

:set clipboard=
Run Code Online (Sandbox Code Playgroud)

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

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

Vim默认为"cut"而不是"删除".这意味着每个删除命令(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}
Run Code Online (Sandbox Code Playgroud)

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

xnoremap c "_d
Run Code Online (Sandbox Code Playgroud)

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

相关的SO链接.