Vim을 사용할때 입력모드에서 한글을 입력하다가 ESC키를 누르고 명령 모드로 변경하서 명령을 내리기 위해서는 귀찮게시리 다시 영문으로 입력을 바꿔야 합니다. 다른 버전의 Vim에서는 어느정도 이 귀찮음을 해결하는 방법이 있는데, MacVim은 아직까지 이 방법이 안 됩니다. 이유는 일단 MacVim의 IM이 문제가 있기 때문입니다. 고수님들은 소스를 직접 변경해서 사용할 수도 있지만 저처럼 부족한 능력을 가진 사람은 너무나 먼 길입니다.

그래서 이 문제를 해결해 보고자 열심히 이것 저것 해 봤습니다. 그러다가 어설프게나마 해결(?!)을 해서 이렇게 글을 남겨 둡니다.


최근 공개된 MacVim snapshot 40에서는 imdisable 옵션이 기본으로 설정돼 있습니다. 아무래도 문제가 많은가 봅니다. 한글입력 상태에서 imd를 끄고 입력을 하면 맥빔 아이콘 하나가 더 생기고 독(Dock)에서 통통 튀는 좀비 MacVim이 생깁니다. 그래서 이전에도 MacVim에 관한 포스팅을 할 때 imd를 켜는 방법을 설명했습니다. 이전에 OS X를 위한 Vim. MacVim에서 말했지만 imd를 끈 상태가 정상적으로 작동하게 되면 한영 전환의 귀찮음이 쉽게 해결이 됩니다. 그러나! 안 된다는게 아쉽울 따름입니다.

서론이 길어서 죄송합니다.
해결 방법은  한글 입력일 때 ESC를 치면 영문으로 변경해는 AppleScript를 작성하는 것입니다.

우선 AppleScript를 작성해 보겠습니다. AppleScript는 Vi와 같은 텍스트 편집기를 사용하셔도 되지만 스크립트 편집기(Script Editor.app)를 사용하는 것이 편합니다. 그래서 저는 스크립트 편집기를 사용했습니다.

사용자 삽입 이미지

스크립트 에디터에서 위와 같이 입력하시면 됩니다.
간딘히 소스를 설명하자면, 현재 입력기의 상태를 알아보기 위해서 com.apple.HIToolbox 도메인에 AppleSelectedInputSources를 가져와서 content에 저장합니다.

if content contains "hangul" or content contains "korea" then
 ...
end if
이 content에 hangul이나 korea가 있으면 현재 입력 상태가 한글 상태라는 뜻입니다. OS X에 내장된 한글 입력기를 사용하시는 분은 korea가 나타날 것이고 바람 입력기를 사용하시는 분은 hangul이라고 나옵니다. 직접 입력 상태를 바꿔가면서 터미널에서 com.apple.HIToolbox 도메인을 읽어 보시면 알 수 있습니다.

keystroke " " using shift down
 한글 상태이면 시스템에 Shift+스페이스키 이벤트를 전달합니다. 이건 사용하시는 분에 따라 알아서 적당한 키를 쓰시면 됩니다. 영문으로 가게만 하면 됩니다.

AppleScript는 이게 전부입니다. 이 파일을 저장하고 적당한 위치로 이동 시킵니다. 저는 toEng.scpt로 저장하고 /usr/AppleScript라는 곳으로 이동시켰습니다.

이제 MacVim을 설정해 보겠습니다. .gvimrc 파일을 열고 다음을 추가합니다.
inoremap <silent> <ESC> <ESC>:call ToEng()<CR>
function! ToEng()
:silent exe "!osascript /usr/AppleScript/toEng.scpt"
endfunction

이제 맥빔을 시작하시고 테스트를 하면 됩니다. 입력모드에서 한글을 입력하다가 ESC키를 눌러서 명령모드로 빠져나와 보시면 자동으로 영문으로 변경 되는 것을 보실 수 있습니다.

이 방법의 단점은 입력기를 직접 바꾸지 않고 키 입력 이벤트로 처리해서인지, 스크립트여서인지는 모르겠지만 살짝 느린거 같은 느낌을 준다는 것이고, 위와 같은 과정을 해 줘야 하는 번거로움이 있다는 것입니다. 뭐. 그래도 나름 쓸만 하다고 생각합니다. 더 좋은 방법이 있으신 분은 알려주세요~

애플스크립트 파일 :
2008/12/31 07:59 2008/12/31 07:59
Sangkle 이 작성.

사용자 삽입 이미지
Vim은 Vim 홈페이지에서 플랫폼 별로 다운 받아서 설치하여 사용할 수 있습니다. 하지만 OSX에서는 OSX에 특화된 Vim을 사용할 수 있는데 그것이 바로 맥빔(MacVim)입니다. 맥빔은 여기에서 다운 받을 수 있습니다. 빔 공식 페이지보다 살짝 느리게 판올림되기는 하지만, OSX에서는 GVim보다는 맥빔을 설치하여 사용하시는 것을 추천합니다. 현재 이글을 쓰는 시점에서는 7.2버전으로 판올림 되어 배포되고 있습니다.

 맥빔은 콘솔에서 사용하는 Vim 보다는 GVim과 유사합니다. 여기에 몇가지 기능이 추가 되어 있습니다. 이에 대해서 조금 설명해 보겠습니다. 좀 더 자세한 내용은 MacVim을 수행하고 :h macvim을 입력하면 Vim도움말 형식으로 보실 수 있습니다.

전체화면 보기

 맥빔은 풀스크린(전체화면 보기)를 지원합니다. IE의 전체화면 보기와 유사하게 전체화면 보기로 설정하면 맥빔히 화면 가득하게 나오게 됩니다. 맥빔을 시작하고 :set fullscreen 또는 :set fu 를 입력하시면 전체화면 보기로 전환 됩니다. 전체화면에서 다시 원래 화면으로 돌아오려면 :set nofullscreen 또는 :set nofu를 입력하십시오.
 전체화면을 수행하면 맥빔의 세로 길이는 기본적으로 늘어나는 반면 가로 화면은 기존의 너비와 동일하고 화면의 나머지 여백을 검은색으로 칠하여 보여줍니다. fuoptions을 설정하면 이를 변경할 수 있습니다. fuoptions는 maxvert, maxhorz를 사용할 수 있습니다. 전체화면에서 가로와 세로 둘 다 늘어나게 하려면 전체화면으로 전환하기 전에 :set fuoptions=maxvert,maxhorz를 입력한 후에 전체화면으로 전환하면 됩니다.

창을 투명하게

  Leopard에 있는 터미널과 유사하게 맥빔도 맥빔의 클라이언트 영역을 투명하게 할 수 있습니다. 이는 transparency를 설정하면 됩니다.  transparency값은 0~100 사이의 정수로 투명한 정도를 설정할 수 있습니다. 100이 가장 투명도가 높은 다시 말하면, 창이 완전히 투명하게 됩니다. 이 값은 기본값이 0입니다. 예를 들어 :set transparency=10 과 같이 설정하여 사용합니다. transparency 값을 100으로 하면 완전하게 투명은 되지만 다른 창에서 맥빔으로 전환시 클라이언트 영역을 클릭하면 전환이 안 되거나, 다른창으로 이동 시에 줄이 나타나는 것과 같은 버그(?)가 있습니다.

한글입력 버그?

 맥빔을 설치하고 별다른 설정 없이 바로 실행하면  OSX의 IME와 맥빔이 엉켜서 오작동을 보입니다. 또 빔의 검색을 수행하는 슬러시(/)를 입력하면 영문 입력 상태에서 한글로 변환되어 한글이 입력되는 현상이 있습니다. 이 문제를 해결하는 방법이 있습니다.
 간단하게는 :set imd(또는 :set imdiable)를 수행하면 됩니다.  이 설정을 사용하면 맥빔이 OSX의 IM만 사용합니다.
또는 다음과 같은 설정을 사용하시면 됩니다.
set noimd
set imi=1
set ims=-1

하나하나 살펴 보겠습니다.
noimd는 위에서 설명한 imd와 반대 설정입니다.
imi (또는 iminsert)는 삽입모드(Insert Mode)에서의 IM을 설정합니다. imi에 할당되는 값은 0, 1, 2가 있습니다.

  • 0은 :lmap을 비활성, IM도 비활성.
  • 1은 :lmap은 활성, IM은 비활성.
  • 2는 :lmap은 비활성, IM은 활성.

imi를 0으로 설정하면 한글을 입력할 수 없습니다. lmap과 IM 둘 다 비활성이라서 영문만 입력이 가능하고 한영 변환을 시켜도 바로 영문으로 돌아옵니다. 2가 제대로 작동 된다면 정말 좋을 것 같습니다만 이 설정도 가끔 오작동을 일으킵니다. 그래서 1로 설정하여 사용하면 됩니다.
ims는 검색(/) 패턴 입력할 때의 IM을 설정합니다. ims에 설정 가능한 값은 위 imi에 설정 가능한 값과 같습니다. 여기에 -1이 추가되는데, 이 뜻은 imi와 같은 설정이라는 뜻입니다. 즉 ims를 -1로 설정하면  imi가 0이면 ims도 0으로, imi가 1이면 ims도 1이 설정된 것으로 작동합니다.
이 설정이 set imd보다 좋은 점은 입력모드에서 한글을 입력하다 ESC키로 입력모드를 나가면 바로 영문으로 전환 되어 Vim명령을 바로 쓸 수 있다는 것입니다. 다만 다시 입력모드로 돌아가도 영문 입력인체로 남아 있습니다. 만일 메뉴얼처럼 설정을 2로 했을 때 정상적으로 작동한다면, 입력모드에서 한글을 입력하다가 ESC로 입력 모드를 나간 뒤,  다른 명령을 수행한 후 다시 입력모드로 돌아가면 바로 한글이 입력할 수 있습니다.


2008/08/19 00:00 2008/08/19 00:00
Sangkle 이 작성.