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

사용자 삽입 이미지
들여쓰기/내어쓰기

Vim에서 들여쓰기/내어쓰기는 Visual Selection을 하여 > 또는 < 를 사용하면 됩니다. 문제는 들여쓰기를 여러 번 해야 하는 경우입니다. 감각이 좋으면 '3번 들여쓰기 하면 되겠다'와 같이 한눈에 몇번 할지를 알 수 있겠지만, 범인인 저로서는 불가능 하답니다.
 물론, 선택한 영역을 다시 선택하는 gv를 사용하면 됩니다. 그래도 다른 편집기의 들여쓰기/내어쓰기보다 불편합니다.
다른 편집기 처럼 선택했던 블럭을 그대로 유지하고 싶으면 아래처럼 >, <에 대한 키맵을 사용하면 됩니다.
:vnoremap > >gv
:vnoremap < <gv

저는 개인적으로 vimrc파일에 저장하여 사용하고 있습니다.
2008/07/09 02:33 2008/07/09 02:33
Sangkle 이 작성.

Vim
 찾은 후에 그 단어를 다시 바꾸기 명령을 입력하는 경우가 많다. 그냥 타이핑을 열심히 하면 되긴 하는데 단어가 길거나 비슷한 단어가 연거푸 나오는 경우 오타를 내기 쉽다. 이 경우에 사용하는 것이 Ctrl + r,w(Ctrl 누르면서 r과 w를 순서대로 입력)이다. 이 명령은 이전에 찾았던 것을 그대로 붙여넣어 준다.


 예를들어 naver라는 단어를 찾기를 수행한 후에 google로 바꾸는 다음의 경우를 생각해 보자.
  • /naver를 입력하고 naver를 찾는다.
  • 찾아 보니 google이 들어갈 자리에 naver가 들어가 있는 것은 보고 바꿔야 한다고 생각한다.
  • :%s/naver/google/g 로 naver를 google로 변경한다.
여기서 관심 사항은 마지막 부분이다. naver를 두번이나 입력을 하고 있다. naver 정도의 짧은 단어는 문제가 되지 않겠지만, teamManagement와 같은 긴 단어인 경우에는 오타가 발생할 가능성도 있다. 또 복잡한 정규식을 입력하는 경우라면 더욱 그러할 것이다. 이때 우리는 두번째 입력하는 naver 대신에 Ctrl + r,w를 입력하면 된다. 즉
:%s/Ctrl +r,w/google/g 로 입력하면 된다는 말이다.
2008/07/04 06:27 2008/07/04 06:27
Sangkle 이 작성.

사용자 삽입 이미지
VIM에서 찾기 및 치환 기능은 보통의 편집기들 보다 그 기능이 막강하다.

찾기

찾기는 보통 모드(Normal Mode)에서 사선 기호(/), 또는 물음표(?) 뒤에 찾는 말 또는 정규식을 쓰면 검색이 된다. 사선 기호(/)는 순방향으로(아래로), 물음표(?)는 역방향으로(위로) 찾는다. 예를 들어, love라는 단어를 검색하는 경우에는 다음과 같다.
/love
하이라이트(HighLight, 강조 또는 돋보이기?)기능이 켜져 있으면 찾는 단어는 하이라이트된다. 그리고 다음 찾는 단어로의 이동은 보통모드에서 n 또는 N을 사용하면 된다.

바꾸기

바꾸기는 실행 모드(Excute Mode)에서 s/찾을 말/바꿀 말 를 사용한다.
대체로 다음과 명령을 사용한다.
:1,$s/old/new/g
위 명령은 파일 전체에서 old를 new로 바꾸라는 명령이다. 하나하나 살펴보자
  • : 는 실행모드로 바꾸는 것이다.
  • 1,$ 는 1행에서 마지막행까지는 의미한다. 이를 줄여 %로 쓰기도 한다. 지정하지 않는 경우에는 커서가 위치한 현재 행만 수행한다.
  • s 는 바꾸다(substitute)라는 뜻의다.
  • /old 바꿀 말이다. 여기서는 'old'라는 단어이다.
  • /new 바뀔 말이다. 여기서는 'new'라는 단어이다.
  • /g 바꾸기의 다른 부가 기능을 나타낸다. g는 globally를 뜻하며 검색된 부분을 전부 바꾸라는 뜻이다. 이외에 바꿀지 여부를 물어보는 c가 있다.
2008/07/04 06:15 2008/07/04 06:15
Sangkle 이 작성.

사용자 삽입 이미지
VIM에서 Visual Selection(이하 비주얼 셀(실)렉션)이란 시각적으로 문자를 선택할 수 있는 기능을 뜻한다. 일반적으로 블럭지정이라고 부른다. 비주얼 셀렉션은 v 또는 V로 지정한다. 소문자 v는 글자 단위로 선택할 수 있으며, 대문자 V는 행 단위로 선택이 가능하다. 또한 Ctrl + v(윈도에서는 Ctrl + q)는 EditPlus의 칸단위 선택을 할 수 있다.
그리고 바로 이전에 선택했던 곳을 다시 선택하는 명령은 gv이다.

v : 글자 단위 선택
V : 행단위 선택
Ctrl + v (q) : 칸단위 선택
gv : 이전 선택 영역 다시 선택



2008/07/04 05:33 2008/07/04 05:33
Sangkle 이 작성.