본문 바로가기
utils

[Vim] WSL2의 vim에서 윈도우 app로 copy and paste하기

by ds31x 2023. 7. 7.

예전에는 linux와 windows를 동시에 사용하기 보다 각각 사용하고, terminal로 접속하여 사용하던 것과 달리,

WSL2를 사용하다보니 하나의 환경으로 왔다갔다의 경우가 점점 늘어났다.

 

notepad보다는 vim을 사용하는데 (notepad는 서식제거용으로만 사용?)

windows에서 따로 vim을 설치하지 않고 WSL2의 vim을 사용하면서 불편했던 부분이,

 

vim에서 편집하던 내용을
windows에서 동작하는 어플리케이션에 copy and past가 되지 않는다는 점이었음.

 

vim에서 shift+v 등의 visual mode로 복사할 영역을 선택하는 경우, vim 내에서는 잘 copy and past 등의 동작이 되지만, windows의 어플리케이션에는 동작이 안된다.

vim에서 visual (line) mode로 영역을 선택한 상태. 여기서 ctrl+c 해봐야 windows로는 붙여넣기가 안됨(물론 vim 내에서는 p로 붙여넣기가 된다.).

여러 방법 중 두가지가 가장 편하게 사용가능하다.

 

많은 글의 양을 mouse로 선택하고 copy and paste 수행.

 

이는 vim에서 mouse로 선택시 visual mode로 바뀌지 않도록 해주는 것을 이용한다.

순서는 다음과 같음.

  1. vim의 mouse에 의한 visual mode를 끄고 (command mode에서 :set mouse= 를 입력)
  2. 마우스로 해당 영역을 선택하여 ctrl+c 한 이후,
  3. 이후 windows 어플리케이션 에 붙일 장소를 마우스로 클릭해서 커서를 갖다두고 ctrl+v 하면,
  4. 해당 windows 어플리케이션에 paste가 완료됨.
  5. 다시 vim에서 :set mouse=a 로 원래 상태로 돌아가면 된다.

mouse로 visual mode가 동작하지 않도록 하면 마우스로 target 영역을 선택할 경우 다음과 같음.

visual mode로 동작하지 않도록 하고 mouse로 복사할 영역을 선택한 경우의 스크린샷임. 이때 ctrl+c를 하면 windows 어플리케이션에 ctrl+v로 붙여넣기가 가능해짐.

 

참고로, vim에서 mouse 설정은

  • vim 편집창 안에서도 마우스를 인식시키기 위한 설정임.
  • 해당 기능을 :set mouse=a 로 활성시키면
    • 마우스를 클릭을 통해 cursor 이동,
    • drag시 visual mode로 동작,
    • wheel을 통한 스크롤 등이 가능해짐.

다음 글을 보면 hotkey로 설정하는 방법도 나와있음.

https://louky0714.tistory.com/11

 

[Linux] vi/vim 관련 | 마우스 드래그 시 비주얼 모드로 진입 해제방법

[Linux] vi/vim 관련 | 마우스 드래그 시 비주얼 모드로 진입 해제방법 최근 vi/vim에서 특정 code를 복사하기 위해 마우스로 드래그하여 선택하려는 순간 vi/vim편집창이 비주얼 모드로 변경된다. 정말

louky0714.tistory.com

 

clip.exe를 활용하기

 

보다 적은 영역의 내용을 copy and paste할 때는 이 방법이 보다 유용하다.

 

visual mode 등으로 vim에서 선택된 상황에서 클론 : 을 입력하면 command mode로서 명령어를 입력가능해진다.

이때 현재 내용의 clip.exe 라는 프로그램에 write하도록 다음의 명령어를 입력하고 엔터를 누른다.

:'<.'> 는 visual mode에서 선택을 하고 클론을 입력하면 자동으로 입력이 되어있으므로 w !clip.exe 만 입력해주고 엔터를 누르면 된다.

Enter를 누르면 아래 녹색의 Press ENTER or type command to continue 가 보인다.

이 상태에서 windows 어플리케이션을 선택하고 붙일 장소에 cursor를 갖다놓고 ctrl+v를 하면 paste가 된다.

붙여넣기 종료 후엔 vim으로 돌아와서 enter를 누르면 선택된 부분이 해제되면서 다른 작업을 할 수 있음.

 

위에서 사용된 command는 다음과 같이 해석됨.

:'<,'>w ++enc=cp949 !clip.exe
  • : : vim의 command mode임을 나타냄.
  • '<,'> : 현재 선택된 영역을 의미함.
  • w ++enc=cp949 : write 하라는 뜻 (encoding으로는 cp949)으로 다음에 오는 file등에 쓰기를 수행한다.
  • !clip.exe : 외부의 clip.exe 프로그램을 수행한다. !는 외부 명령어 수행시 사용됨.
clip.exe가 utf-8등의 지원이 안되며 한글을 제대로 복사하려면
cp949 로 encoding option을 줘야 한다. 

 

이 command는 clipboard로 현재 선택된 내용을 써지도록 외부 프로그램인 clip.exe를 수행하게 한다.

WSL2에서 windows의 명령어들을 .exe 확장자까지 입력시 수행가능한 특성을 활용한 방법이다.

주의할 것은 encoding을 windows의 기본 encoding인 cp949로 해줘야 한글이 제대로 복사된다. 

  • windows 의 대상 application이 utf-8이고, vim도 utf-8이라해도 clip.exe가 이를 지원하지 않기 때문에...
  • clip.exe로 text를 넘길 때 encoding이 반드시 cp949여야 함.

 

참고로 전체 내용을 다 copy하려면 다음을 수행

:w ++enc=cp949 !clip.exe

 

이 방법은 다음 URL에서 찾은 것임 (stackoverflow에는 없는게 없다. )

https://stackoverflow.com/questions/61550552/how-to-copy-paste-from-vim-in-wsl

 

How to copy/paste from Vim in WSL

I am trying to use Vim to locate and copy/paste some code I need to analyze and take notes on. I am using Debian, in a Windows WSL environment. That's what makes this tricky. The regular "yank a...

stackoverflow.com

cp949에 대한 설명은 다음을 참고하라.

https://dsaint31.me/mkdocs_site/CE/ch01/code_for_character/#american-national-standard-institute-ansi

 

BME228

Codes for Characters Code란 특정 형태의 inforamtion을 다른 방법으로 표현하는 규칙 또는 해당 규칙으로 표현된 결과물을 가르킴. 문자를 나타내기 위한 code는 인간이 사용하는 문자를 일종의 기호 또는

dsaint31.me

 

728x90