본문 바로가기
목차
utils

[vim] clipboard 와 mouse selection 사용하기 : Neovim (on macOS)

by ds31x 2024. 1. 5.
728x90
반응형

clipboard 와 mouse selection 사용하기 (Neovim)

 

vim에서도 설정이 비슷하지만, 우선 neovim으로 테스트를 함.


문제점

vi에서 yank등을 사용하여 잘라낸 content들은 vi 내에서는 p를 통해 붙이기가 되지만,
다른 어플리케이션에 붙여지지 않는다.

"+y 나 "+p 등의 clipboard를 활용하는 레지스터로의 yank와 paste가 제대로 동작안함.

 

2025.08.02 - [utils] - [Utils] vim (or nvim)에서의 register

 

[Utils] vim (or nvim)에서의 register

과거 글 "https://ds31x.tistory.com/310"을 실수로 삭제하여 재작성한 글임.vim (or nvim) 에서의 registerVim과 Neovim에서 레지스터(register) 는 텍스트를 저장하고 조작하는 데 사용되는 일종의 저장소(or buffer)

ds31x.tistory.com


해결방안

이를 위해선 clipboard에 해당 내용이 들어가도록 해야하는데 이 경우 몇가지 설정이 필요하다.

 

우선 설치된 vim (or nvim)이 clipboard 와의 연동이 가능하도록 compile된 버전이어야 하고,

이는 vim의 경우, vim --version (또는 명령어 모드에서 :version 입력하고 엔터)을 통해 +clipboard 라는 표시가 되어있는지로 확인 가능하다.

-clipboard인 경우 지원이 되지 않음.


neovim--version으로 동작시켜도 해당 정보가 안 나온다.

이 경우엔 nvim을 수행하고 명령어 모드에서 :checkhealth 를 입력하고 엔터를 치면 확인 가능함.

macOS에서의 nvim의 :checkhealth 수행장면임


init.vim을 이용하는 방법 (.vimrc 와 호환해서 쓰는 경우)

위와 같이 clipboard가 지원됨을 확인하고 나서 .vimrc (for vim)나 init.vim (for nvim)등에 다음의 설정을 추가한다.

# Linux
set mouse=nvi
set clipboard=unnamedplus, unnamed
# # macOS
# set mouse=nvi
# set clipboard=unnamedplus
  • 위의 라인은 mouse를 이용하여 normal, visula, insert 모드에서 copy and paste 를 할 영역을 지정하게 해주고,
  • 아래 설정은 clipboard에 yank나 ctrl + c (or cmd + c )등을 통해 vi의 내용을 복사할 수 있게 해주는 것임.
    • 엄밀하게는 기본 레지스터를 clipboard로 지정하도록 해준 것임.
    • neovim은 맥os에서는 pbcopy, pbpaste 를 사용하여 clipboard에 접근. (linux의 경우, xclip 또는 xsel)

다음의 register 를 참고하라.

 

  • unnamedplus 레지스터→ "+ → Ctrl+C / Ctrl+V용 클립보드
  • unnamed 레지스터→ "* → 마우스로 드래그 선택(primary selection)

참고로 macOS는 primary가 없이 pbcopy와 pbpaste가 시스템 클립보드 만 사용: unnamedplus만 기재하는게 깔끔.

 

 

OS별 clipboard 관련된 명령어는 다음을 참고:


init.lua 를 사용하는 방법(권장함)

macOS에선 init.lua에 다음만 설정하면 문제 없음:

vim.opt.mouse = "nvi"
vim.opt.clipboard = "unnamedplus"

 

Linux에서 xclip을 이용하는 방식은 다음의 접은글 참고:

 

다음은 wsl에서 win32yank.exe 를 사용하는 방법임.

 

1. cmd.exe 나 Windows PowerShell에서 winget으로 win32yank.exe를 설치

winget install equalsraf.win32yank

 

2. WSL의 /usr/local/bin/ 디렉토리에 win32yank.exe 에 대한 symbolic link를 생성

sudo ln -s /mnt/c/Users/<USERNAME>/AppData/Local/Microsoft/WinGet/Packages/equalsraf.win32yank_*/win32yank.exe \
    /usr/local/bin/win32yank.exe
  • 이 후 WSL에서 which win32yank.exe 를 수행하여 제대로 찾는지 확인할 것.

3. neovim에서 :checkhealth로 다음을 확인할 것:

아래의 Clipboard 에서 win32yank가 보여야 함

 

4. 이 후, ~/.config/nvim/init.lua 파일에 다음의 스크립트 코드를 추가

-- 1. 기본 옵션들
vim.opt.mouse = "nvi"
vim.opt.clipboard:append({"unnamedplus", "unnamed"})

-- 2. clipboard provider (for WSL)
vim.g.clipboard = {
  name = "win32yank",
  copy = {
    ["+"] = "cmd.exe /c win32yank.exe -i --crlf",
    ["*"] = "cmd.exe /c win32yank.exe -i --crlf",
  },
  paste = {
    ["+"] = "cmd.exe /c win32yank.exe -o --lf",
    ["*"] = "cmd.exe /c win32yank.exe -o --lf",
  },
  cache_enabled = 0,
}
  • win32yank.execmd.exe에서 수행되어야 함.
  • -i 옵션은 클립보드에 내용을 보낼 때이고
  • -o 옵션은 클립보드의 내용을 가져올 때임.
  • --crlf 는 carriage return과 line feed를 의미 (Windows로 붙여넣기 이니.)
  • --lf 는 line feed를 의미 (Linux로 붙여넣기이니)

win32yank.exe 관련하여 참고한 자료는 다음과 같음 (렉이 걸린다고 하는데... 내 경우엔 못 느낌. 개선된듯):

https://www.reddit.com/r/neovim/comments/171fu71/how_can_i_view_the_exact_clipboard_commands_that/?tl=ko


추가사항

개인적으로 neovim을 사용하지만
기존의 vim과 동일한 설정파일을 사용하고 있다 (neovim 고유의 설정은 잘 모르는터라...)

 

다음의 방법은 lua 스크립트를 이용하지 않는 경우엔 vim과 neovim을 동일 설정으로 동작하게 해준다.

(WSL의 경우엔 clipboard를 쓰려면... lua 스크립트가 필요하므로 비추천임)

 

맥 os의 경우 ~/.config/nvim/init.vim 파일을 다음과 같이 편집하고,

~/.vimrc 에 원하는 설정을 기재하면 neovimvim에 같이 적용됨.

set runtimepath^=~/.vim runtimepath+=~/.vim/after
let &packpath = &runtimepath
source ~/.vimrc

 

runtimepath맨 앞(^)~/.vim을 추가하고 runtimepath맨 뒤~/.vim/after 추가

packpathruntimepath완전히 동일하게 설정

  • runtimepath : 설정/스크립트 검색 경로
  • packpath : 패키지 플러그인(pack/*/start) 검색 경로

 


읽어보면 좋은 URLs

https://velog.io/@markyang92/xclip-linux-%ED%81%B4%EB%A6%BD%EB%B3%B4%EB%93%9C-vim-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%81%B4%EB%A6%BD%EB%B3%B4%EB%93%9C

 

xclip linux 클립보드 / vim 시스템 클립보드 / tmux 클립보드

xclip, vim 시스템 클립보드 사용

velog.io

https://stackoverflow.com/questions/3961859/how-to-copy-to-clipboard-in-vim

 

How to copy to clipboard in Vim?

Is it possible to copy to clipboard directly from Vim? yy only copies stuff to Vim's internal buffer. I want to copy to the OS's clipboard. Is there any such command in Vim or you can only yank stuff

stackoverflow.com

 

https://netsarang.atlassian.net/wiki/spaces/KRSUP/pages/27263015/vi+vim+yank

 

vi(vim)에서 복사(yank)한 문자열을 윈도우 클립 보드에 넣기 - 기술지원 - NetSarang Computer

Xshell을 통하여 텍스트 기반의 vi(vim)을 사용할 때 y(yank) 명령을 사용하여 문자열을 복사하는 경우가 있습니다. 이 때 복사된 문자열은 vim의 레지스터에 등록될 뿐 Xshell이 구동 중인 윈도우 클립

netsarang.atlassian.net

 

https://80000coding.oopy.io/6e7153c0-6a99-41b2-b318-cc591a38d78f

 

[Vim] Vim에서 마우스 드래그로 텍스트 복붙하기

Vim은 마우스로 긁어서 복붙이 외 않되?

80000coding.oopy.io

 


 

728x90