仅将寄存器0与Vim中的系统剪贴板关联

仅将寄存器0与Vim中的系统剪贴板关联,vim,neovim,Vim,Neovim,目前我已经设置了剪贴板+=unnamed,它将未命名的VIM寄存器与系统剪贴板链接起来 不过,我想要的是,仅将Vims寄存器0与系统剪贴板关联,系统剪贴板“将始终包含最近拖动的文本,但从不删除文本”[1] 这将使我的系统剪贴板(有自己的历史)不会收到来自Vim的删除、更改和放置操作内容的垃圾邮件,例如,只有来自Vim的yank操作与系统剪贴板共享 这可能吗 1) 虽然这并不是您所描述的,但我想知道您是否喜欢以下行为: set clipboard+=unnamedplus :帮助剪贴板中的详细信

目前我已经设置了剪贴板+=unnamed,它将未命名的VIM寄存器与系统剪贴板链接起来

不过,我想要的是,仅将Vims寄存器0与系统剪贴板关联,系统剪贴板“将始终包含最近拖动的文本,但从不删除文本”[1]

这将使我的系统剪贴板(有自己的历史)不会收到来自Vim的删除、更改和放置操作内容的垃圾邮件,例如,只有来自Vim的yank操作与系统剪贴板共享

这可能吗

1)

虽然这并不是您所描述的,但我想知道您是否喜欢以下行为:

set clipboard+=unnamedplus
:帮助剪贴板中的详细信息
。本质上,这将系统剪贴板提供程序链接到拖动操作,以便在拖动文本时将其放入以下寄存器(至少在我的机器上):

这避免了“+y”和“朋友”的必要性。删除将填充:

""
"1
"+
因为delete在任何情况下都会跳过寄存器0。所以这可能接近您的目标

我相信在某些系统上,寄存器
*
+
是相同的,因此您可能会发现它也会在您的系统上填充
*
。除非指定了另一个寄存器,否则粘贴将从
+
开始

不带
unnameplus的选项

另一种方法是使用leader键将您的yank操作与适合您的行为特别绑定。我在一些
init.vim
中看到了这一点,尽管我自己并不觉得这特别有用。例如:

nnoremap <leader>y "+y
vnoremap <leader>y "+y
nnoremap <leader>p "+p
vnoremap <leader>p "+p
nnoremap y“+y
vnoremap y“+y
nnoremap p“+p
vnoremap p“+p

同样,这并不是你想要的,但我怀疑除此之外,你正在考虑编写一个响应寄存器更改的插件。

另一半解决方案是使用剪贴板集成的自动选择模式:

if has("clipboard")
  if v:version > 703 || v:version == 703 && has('patch597')
      set clipboard^=autoselectplus
  else
      set clipboard^=autoselect
  endif
endif
这将仅将视觉模式选择中的yanks同步到剪贴板。 如果启用了鼠标模式,则可以单击选择并
y
将区域同步到剪贴板的
+
缓冲区。或者只需使用
v
启动选择


我意识到这并不像你建议的那样,简单地屏蔽剪贴板集成中的未命名寄存器那样有效,这样简单的编辑模式就会被猛拉(
yy
)也同步了,但是
dd
&
x
不会。但是
autoselect
会让你的剪贴板更干净。

谢谢你的评论。我应该说明我知道unnameplus选项。我在我的问题中添加了我想要实现的更详细的内容。不用担心。我想不出一个方法来了解你的具体行为请描述,但我在回答中添加了另一个选项。有趣的方法虽然是个好主意,但可以尝试一下
if has("clipboard")
  if v:version > 703 || v:version == 703 && has('patch597')
      set clipboard^=autoselectplus
  else
      set clipboard^=autoselect
  endif
endif