当我使用"+y
复制到系统剪贴板时,选定的内容会复制到寄存器+
以及默认的(")寄存器。如何确保内容只复制到寄存器+
而不修改"
寄存器?
编辑:我现在明白这是预期的行为,任何猛拉都会修改默认寄存器。我仍然想知道是否有解决方法。
我提出了一个天真的解决方案
对于视觉模式
vnoremap <Leader>y :<C-u>let @+=@*<CR>
对于单行
nnoremap <Leader>yy :<C-u>let @+=getline('.') . "\n"<CR>
但我们会缺少许多 yank 功能。我希望有人提供更好的解决方案。
答案1
您需要定义一个自定义运算符;:help :map-operator
有详细信息和示例。通过该功能,您还可以轻松实现视觉模式(已在示例中显示)和yy
映射(使用v:count . 'yy'
)。
为了避免 yank 破坏默认寄存器,请将保存和恢复该寄存器的逻辑包含在以下内容中:
let l:save_clipboard = &clipboard
set clipboard= " Avoid clobbering the selection and clipboard registers.
let l:save_reg = getreg('"')
let l:save_regmode = getregtype('"')
" some yank
call setreg('"', l:save_reg, l:save_regmode)
let &clipboard = l:save_clipboard