시스템 클립보드에 복사를 사용하면 "+y
선택한 내용이 +
기본(") 레지스터뿐만 아니라 레지스터에도 복사됩니다. 레지스터를 +
수정하지 않고 내용이 레지스터에만 복사되도록 하려면 어떻게 해야 합니까?"
편집: 이제 이것이 예상되는 동작이라는 것을 이해합니다. 모든 양키는 기본 레지스터를 수정합니다. 해결 방법이 있는지 알고 싶습니다.
나는 순진한 해결책을 생각해 냈습니다.
시각적 모드의 경우
vnoremap <Leader>y :<C-u>let @+=@*<CR>
단일 라인의 경우
nnoremap <Leader>yy :<C-u>let @+=getline('.') . "\n"<CR>
하지만 우리는 많은 기능을 놓치게 될 것입니다. 누군가가 더 나은 해결책을 갖고 있기를 바랍니다.
답변1
사용자 정의 연산자를 정의해야 합니다. :help :map-operator
세부사항과 예시가 제공됩니다. 이 기능을 사용하면 시각적 모드(예제 참조)와 yy
매핑( 사용 v:count . 'yy'
)을 쉽게 구현할 수도 있습니다.
끌어오기로 인해 기본 레지스터가 손상되는 것을 방지하려면 다음 항목에 이 레지스터를 저장하고 복원하는 논리를 포함하세요.
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