Você precisa definir um operador personalizado; :help :map-operator
tem os detalhes e um exemplo. Com essa função, você também pode facilmente implementar o modo visual (já mostrado no exemplo) e yy
mappings (usar v:count . 'yy'
) facilmente.
Para evitar que o yank atrapalhe o registro padrão, coloque a lógica da seguinte maneira que salva e restaura o registro:
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