Vim은 기본 레지스터(")를 덮어쓰지 않고 시스템 클립보드에 복사합니다.

Vim은 기본 레지스터(")를 덮어쓰지 않고 시스템 클립보드에 복사합니다.

시스템 클립보드에 복사를 사용하면 "+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

관련 정보