WSL의 Vim : 시스템 클립 보드 동기화? (클립 보드 ^ = 이름 없음)?


12

Windows 용 WSL / Bash를 사용하는 동안 항상 vim에서 작동하고 동일한 방식으로 사용 y yy 3y하고 p싶지만 vim의 내부 클립 보드가 아닌 모든 응용 프로그램에서 공유하는 시스템 클립 보드에 연결 중입니다 ... 이미 클립 보드를 관리해야합니다. 역사.

Vim에는 이미 복사 / 붙여 넣기 버퍼를 시스템 클립 보드와 동기화하는 옵션이 내장되어있는 것 같습니다. 그러나 WSL을 실행할 때 문제는 실제로 /mnt/c/Windows/System32/clip.exe클립 보드에 액세스하는 데 사용해야 한다는 것입니다. 사용할 수 있도록 :

set clipboard^=unnamed

아직 WSL을 지원하지 않는 것 같습니다.

나는 neovim이 이것을 옵션으로 가지고 있음을 이해하지만, 실제로 neovim으로 실험하고 싶지는 않습니다 ...

지금까지 내가 찾은 해결 방법에 가장 가까운 것은 다음과 같습니다.

nnoremap <silent> <leader>y :call system('/mnt/c/Windows/System32/clip.exe', @0)<CR>
vnoremap <silent> <leader>y :call system('/mnt/c/Windows/System32/clip.exe', @0)<CR>

그러나 이것은 제 생각에는 정말 끔찍한 해결책입니다 ... 2 단계 프로세스를 복사하는 것은 ...

물론 마우스 / shift + in으로 복사하여 붙여 넣기를 수행 할 수 있지만 Vim에서이 동기화를 제대로 수행 할 수있는 방법이 있어야한다고 생각합니다.



이 질문을 찾은 Neovim을 사용하는 사람들은 github.com/neovim/neovim/wiki/…를 참조하십시오 .
Andrey Kaipov

답변:


10

나는 이것이 매우 오래된 질문이라는 것을 알고 있지만 최근에 좋은 해결책을 찾았습니다. 많은 좌절을 겪은 후 복사 및 붙여 넣기를 통해 Windows 시스템 클립 보드에 액세스 할 수있는 방법을 알게되었습니다.

다른 답변 https://vi.stackexchange.com/a/15190에 명시된 것처럼 vim 버전이 8.0.1394 이상인 복사하면

let s:clip = '/mnt/c/Windows/System32/clip.exe' 
if executable(s:clip)
    augroup WSLYank
        autocmd!
        autocmd TextYankPost * call system('echo '.shellescape(join(v:event.regcontents, "\<CR>")).' | '.s:clip)
    augroup END
end

붙여 넣기, 가짜 레지스트리 명령에 매핑 (예 : "= p 또는"+ p 등).

map <silent> "=p :r !powershell.exe -Command Get-Clipboard<CR>
map! <silent> <C-r>= :r !powershell.exe -Command Get-Clipboard<CR>

" I thought this will be better :)
noremap "+p :exe 'norm a'.system('/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Command Get-Clipboard')<CR>

마우스 오른쪽 버튼으로 붙여 넣기 기능이 작동하지만 마우스를 사용하지 않으려는 경우 만족스럽지 않습니다


WSL에 vi추가했습니다nnoremap <S-Insert> :r !powershell.exe -Command "& {Get-Clipboard}"<Enter>
Walter A

유용한 답변에 감사드립니다! yank 명령에 가짜 레지스터를 사용할 수 있는지 궁금합니다. 같은 것 noremap "+y :exe 'norm a'.system('echo '.shellescape(join(v:event.regcontents, "\<CR>")).' | clip.exe')<CR>(작동하지 않습니다 ...)
Tropilio

4

이건 어때?

if system('uname -r') =~ "Microsoft"
  augroup Yank
    autocmd!
    autocmd TextYankPost * :call system('clip.exe ',@")
  augroup END
endif

unameLinuxWSL에 대해 리턴되도록 OS 정보를 리턴하는 Linux 터미널 명령입니다 . -r플래그 와 함께 명령은 OS의 릴리스 정보를 리턴하므로 "Windows"를 포함해야합니다.

TextYankPostVim은 이벤트 (참조입니다 :h TextYankPost에서 vim텍스트 가득 차면 활동을 감지).

clip.exeWSL에서 Windows 명령 프롬프트의 명령 (참조입니다 CLIP /?복사 명령 프롬프트에서) textA로부터 또는 반환 command을 통해 clipbord로 text | clip.exe또는 command | clip.exe. 여기에서 clip.exevim 함수는 vim에서 실행됩니다 system.


Neovim에서 has('wsl')대신 사용할 수 있습니다 system('uname -r') =~ "Microsoft".
Justin M. Keyes 5

2

얼마 전에 WSL 지원을 위해 가짜 클립 을 위해 PR을 만들었습니다 .

설치 방법에 대해서는 vimawesome 을 참조하십시오 . help fakeclip사용법.


여전히 유지되고 있습니까?
Chris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.