2012년 5월 16일 수요일

OSX/Tmux에서 Vim을 쓸 때 발생하는 클립보드 문제

이 포스트는 Vim에서 붙여넣기를 할 때 발생하는 아래와 같은 오류메시지를 해결하기 위함이다.

E353: Nothing in register *

이 오류는 콘솔에서 Vim 설정 중 Pasteboard(클립보드) 연동을 설정한 경우에 발생하는 문제로 추측된다.

정확한 원인은 모르겠지만, Vim 7.3 이상 버전 - Homebrew/MacPort 등으로 설치한 Macvim 등 - 에서 클립보드 연동 기능을 설정해 놨을 경우, 레지스터에 복사하는 행위(예를 들어 y를 눌러 yank 하는 경우 등)가 발생하면 터미널에서 이를 인식해 클립보드로 옮겨지게 되어있는데, Tmux가 이 터미널의 역활을 하게 되면서 이 연결을 방해하는 케이스일 것이다.

이런 문제를 해결하기 위해선 Tmux 소스를 패치해서 설치해야 되는 문제가 있었는데, 개인적으로 Homebrew로 패키지를 관리하기 때문에 굉장히 꺼리는 편이다. (아무래도 업그레이드 등에서 덮어쓰기 될 가능성이 높으니 말이다)

다행히도 해결 방법은 있었다. reattach-to-user-namespace라는 유틸리티를 설치해서 활용하는 방법이다.

$ brew install reattach-to-user-namespace

설치가 되면 Tmux 설정을 고쳐야 된다. ~/.tmux.conf 파일을 열어서 다음 라인을 입력한다.

set-option -g default-command "reattach-to-user-namespace -l bash"

끝에 'bash' 는 자신이 사용하는 쉘(shell)로 고쳐야 한다. 아마 대부분 bash를 쓸 것이고 특별한 사람들이라면 zsh일 것이다.

이 후 Tmux를 기동해서 확인해 보자. 내 경우는 아주 잘 고쳐졌다. Vim에서 복사하고 붙여넣기가 된다면 해결된 것이다. 물론 터미널 외부에서 복사한 내용도 붙여넣기가 되어야 할 것이다.

ps. OSX에 기본적으로 탑재된 Vim의 경우 위의 문제가 발생하지 않는다. 이유는 굉장히 단순한데, Vim 버전 7.3 미만 버전에서는 클립보드 연동이 안되거나 좀 다른 방법을 이용해야 하기 때문이다.

ps2. 사용하는 터미널에 따라 문제가 다를 수도 있다. 위의 경우는 iTerm2를 사용하는 케이스이다.

관련포스트: [Vim] 콘솔에서 클립보드 엑세스 하기

참고원문: http://johnwilger.com/blog/2012/04/12/tmux-and-the-osx-clipboard/

댓글 없음 :