Vim Copia para a Área de Transferência do Sistema sem sobrescrever o registro padrão (")

4

Quando eu uso "+y para copiar para a área de transferência do sistema, o conteúdo selecionado é copiado para o registrador + , bem como para o registrador padrão ("). Como posso garantir que o conteúdo seja copiado somente para a + register sem modificar o " register?

EDITAR: Eu agora entendo que este é o comportamento pretendido e qualquer arranjo irá modificar o registro padrão. Eu ainda quero saber se há uma solução alternativa para isso.

Eu vim com uma solução ingênua

para o modo visual

vnoremap <Leader>y :<C-u>let @+=@*<CR>

e para linha única em

nnoremap <Leader>yy :<C-u>let @+=getline('.') . "\n"<CR>

Mas estaremos perdendo muitos recursos do yank. Espero que alguém ofereça uma solução melhor.

    
por ma08 12.09.2014 / 13:34

1 resposta

1

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
    
por 15.09.2014 / 13:38

Tags