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 이 작성.

Trackback URL : http://www.sangkle.com/trackback/129

Trackback RSS : http://www.sangkle.com/rss/trackback/129

Trackback ATOM : http://www.sangkle.com/atom/trackback/129


« Prev : 1 : 2 : 3 : 4 : 5 : 6 : 7 : ... 37 : Next »