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

时间:2018-02-20 12:40:40

标签: vim neovim

目前我已经set clipboard+=unnamed,它将未命名的VIM注册链接到系统剪贴板。

我想要的只是将Vims寄存器0与系统剪贴板相关联,其中"将始终包含最近被拉动的文本,但从不删除文本" [1]。

这样就可以了,我的系统剪贴板(有自己的历史记录)没有得到垃圾邮件,内容包括删除,更改和放置来自Vim的操作,例如只有来自Vim的抽头操作才与系统剪贴板共享。

这可能吗?

1)https://sanctum.geek.nz/arabesque/advanced-vim-registers/

2 个答案:

答案 0 :(得分:1)

虽然这并不是完全你描述的内容,但我想知道你是否喜欢这样的行为:

set clipboard+=unnamedplus

:help clipboard中的详细信息。从本质上讲,这会将系统剪贴板提供程序链接到抽头操作,这样当您将文本放入以下寄存器时(至少在我的机器上):

""
"0
"+

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

""
"1
"+

因为删除通常会在任何情况下跳过寄存器0。那么这可能会接近你所追求的目标吗?

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

没有unnamedplus的选项

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

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

同样,不是你所要求的,但我怀疑你是否正在寻找一个能够响应寄存器变化的插件。

答案 1 :(得分:1)

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

if has("clipboard")
  if v:version > 703 || v:version == 703 && has('patch597')
      set clipboard^=autoselectplus
  else
      set clipboard^=autoselect
  endif
endif

这只会将扬声从可视模式选择同步到剪贴板。 如果启用了鼠标模式,则可以单击选择区域并将其y放入剪贴板同步的+缓冲区中。或者只需使用v来启动选择。

我意识到,键击效率不如您建议的那样简单地从剪贴板集成中屏蔽未命名的寄存器,因此也可以同步简单的编辑模式(yy),但是ddx不会。但是autoselect将使您的剪贴板保持清洁。