vi(vim)에서 복사(yank)한 문자열을 윈도우 클립 보드에 넣기

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

다음은 vim의 yank로 복사한 문자열을 윈도우 클립보드로 복사하여 윈도우의 다른 응용프로그램에서 사용할 수 있는 방법에 대한 안내입니다.

1. VI(VIM)의 레지스터



vim은 문자열을 yank할 때 레지스터를 지정할 수 있습니다.

  • "xyy : 한 줄을 x 레지스터에 복사

vim의 여러 레지스터 중 특수한 레지스터가 있습니다.

  • " 레지스터 : 기본 레지스터입니다. 특별히 지정하지 않으면 이곳에 복사됩니다. ""yy = yy
  • * 또는 + 레지스터 : 시스템 클립보드 레지스터입니다.
  • ""yw : 한 단어를 " 레지스터에 복사 = yw


Xshell로 원격 접속을 한 후 vim을 실행할 때 시스템 클립보드는 원격 유닉스/리눅스의 클립보드를 의미합니다.
그러므로 *이나 +레지스터에 문자열을 복하하여도 원격의 클립보드에 들어갈 뿐 사용자의 PC에서는 사용할 수 없습니다.

원격 시스템의 클립 보드에 접근할 필요가 있습니다.
X11 응용프로그램을 사용할 수 있도록 하는 PC용 X 서버를 이용하면 원격 시스템의 클립 보드에 접근할 수 있습니다.

2. PC X 서버의 X SELECTION을 이용한 복사한 문자열 공유



X selection은 X window에서 프로그램 윈도우 사이에 데이터를 전달할 수 있도록 하는 MS 윈도우의 클립보드와 같은 역할을 하는 곳입니다.
Xshell에서 구동 중인 vim과 MS 윈도우의 응용프로그램 사이의 복사 문자열을 Xmanager와 같은 PC X 서버의 X selection을 이용하여 공유할 수 있습니다.

  1. vim이 xterm 등의 clipboard 기능을 지원하도록 되어 있는지 확인해 봅니다

    $ vim --version | grep clipboard 


    결과가 +clipboard로 나와야 합니다. -clipboard일 경우 X11 기능이 포함되어 있지 않으므로
    관리자 권한으로 X11 클립보드 기능이 포함된 패키지를 설치합니다. 

    # yum install vim-X11
    (Redhat, CentOS 계열)
    # apt-get install vim-gtk 또는 apt-get install vim-gnome
    (Ubuntu 계열)
  2. Xmanager를 설치 후 실행합니다. PC의 IP 주소와 구동 중인 Xmanager의 DISPLAY 번호를 확인합니다. 최초 실행 시에는 0번입니다.

  3. Xshell을 실행한 후 DISPLAY를 설정합니다. DISPLAY 의미와 설정에 대해서는 Xmanager FAQ를 참고합니다.

    $ export DISPLAY=PC_IP_ADDR:0

    (예의 숫자 0은 Xmanager 디스플레이 번호이므로 위 2.에서의 번호와 같아야 합니다)

    SSH 프로토콜을 사용할 경우 자동으로 X11 포워딩이 설정되고 X 응용프로그램 구동 시
    자동으로 Xmanager가 구동되므로 Xmanager 시작이나 DISPLAY 설정이 필요 없습니다.

  4. X11 vim을 구동합니다.

    $ vimx => Redhat, CentOS 계열
    $ vim.gnome 또는 vim.gtk => Ubuntu 계열
    :set clipboard=unnamed
  5. visual 모드 등의 vim의 선택 방법으로 복사(yank)한 문자열이 * 레지스터나 + 레지스터에 들어 가도록 합니다.

    "+y 또는 "*y => 현재 선택 영역 복사
    "+cw => 현재 단어 변경(change word)
    "+dd => 현재 줄을 지움. 지운 내용 클립 보드에 복사됨.

  6. MS 윈도우의 응용프로그램이나 Xterm과 같은 X 응용 프로그램에 붙여 넣습니다.

3. 일반적인 사용을 위한 옵션들



vim에서 문자열 복사 시 *, + 레지스터를 따로 지정하지 않고 복사와 동시에 클립보드에 들어가게 하거나
선택 영역을 vim의 복사 방식이 아닌 Ctrl+C나 Ctrl+Insert 키로 정하는 설정입니다.

  1. vimx 등을 vim 기본 값으로 설정.

    $ alias vi=vim; alias vim=/usr/bin/vimx

    vim을 X 연결 없이 사용하고자 할 경우 '-X' 옵션을 붙여서 실행합니다.

  2. 기본 레지스터를 클립보드로 지정합니다. vim에서 다음 명령을 입력합니다.

    :set clipboard=unnamed
  3. vim의 선택 영역을 Ctrl+C나 Ctrl+V를 통해서 복사하고 붙여 넣고자 할 때입니다. vim에서 다음 명령을 실행합니다.

    :vnoremap <C-c> "+y
    (:vnoremap <C-Insert> "+y)
    :inoremap <C-v> <ESC>"+pa