Dev_articles/General

[Hammerspoon] esc 키로 편하게 한영 변환하기 for vim

humblEgo 2020. 12. 26. 03:17
hammerspoon으로 esc키에 한영변환 기능을 맵핑한 과정을 소개합니다.

들어가며

이 글을 읽으시는 분과 마찬가지로 저도 vim을 참 좋아하는데요, vim으로 한글을 입력하다보면 종종 불편한 상황과 마주칩니다.

대표적으로 한글로 입력하다가 저장하고 나가려고 할 때 `:wq` 대신 `:ㅈㅂ`가 입력되는 상황이 자주 거슬리네요.

 

`:wq`는 어디가고..

위 상황이 발생하면 아래 과정이 반복됩니다.

  1. 뭔가 쎄함을 느끼며 화면을 확인한다. 아니나다를까 `:ㅈㅂ` 이 입력되었다.
  2. 백스페이스를 두 번 연타한다.
  3. 입력소스를 영문으로 바꾼다.
  4. 다시 `:wq`를 입력하고 화면을 확인한 후 엔터를 친다.
  5. 다음에는 한영변환을 잊지않겠다고 다짐한다.

번거롭네요! 기본적으로 Normal mode에 진입할 때 한영 입력소스를 신경쓰면 예방되는 문제이긴 합니다. 하지만 이 '신경쓰는 것' 자체도 에너지가 쓰이는 요소네요, 문제입니다.


왜 문제가 반복될까?

위 상황이 발생하는 원인은 뭘까요? 당연하게도 vim의 Normal mode 에는 영문커맨드만 유효하기 때문입니다.

우리가 이 사실을 모르지 않는데 한글커맨드를 입력한 이유는 또 뭘까요? Normal mode로 진입할 때 입력소스를 영어로 변환하는 것을 깜빡했기 때문입니다.


다양한 해결 방법들

그럼 1) vim Normal mode에서 한글명령이 통하게 하거나, 2) Normal mode로 진입할 때 자연스레 영문 입력소스로 변환되게끔 설정하면 문제가 해결될 것입니다. vim을 애용하시는 분이 많은만큼 살짝만 검색해도 해결책이 잔뜩 나옵니다.

1) vim Normal mode에서 한글명령이 통하게 하는 방법

 

2) vim Normal mode로 진입할 때 자연스레 영문 입력소스로 변환되게끔 설정하는 방법


내가 선택한 해결 방법: hammerspoon

저는 해결 방법으로 mac용 매크로툴인 hammerspoon을 선택했습니다.

구름 입력기는 반응이 조금 느린 감이 있었고, 순수한 vim 말고도 vscode에 vim_mode extension을 설치하여 활용하고 있다보니 langmap이나 noimd을 쓰기엔 활용성이 아쉬웠던 반면, hammerspoon은 속도가 뛰어나고, lua라는 언어로 스크립트를 작성하여 키와 맵핑시키는 컨셉이라 활용성도 뛰어나기 때문입니다. 한글로 작성된 친절한 튜토리얼을 발견한 것도 한 몫했습니다. API 문서도 깔끔합니다!

구체적으로 hammerspoon을 활용한 과정은 아래와 같습니다.

1. hammerspoon을 설치합니다.

터미널로도 설치할 수 있다고 들었는데, 저는 다운로드 링크를 통해 zip 파일을 직접 받았습니다. 압축을 풀고 실행시켜줍시다.

2. 설정파일을 엽니다.

설정파일은 `~/.hammerspoon/init.lua` 경로에 위치해있습니다. 터미널로 직접 열 수도 있지만 `Open Config` 메뉴를 클릭하면 바로 열 수 있습니다. 참고로 `Console`을 선택하면 hammerspoon init이나 키 입력에 따른 결과값을 확인할 수 있습니다.

hammerspoon menu icon을 클릭

3. 아래 코드를 설정파일에 복사 & 붙여넣기 합니다.

hammerspoon은 lua 언어로 동작을 정의합니다. lua 언어는 딱히 시간내서 배우지는 않았지만 예시 코드만 봐도 눈치껏 써먹을 수 있는 걸보니 참 편리하고 직관적이네요.

위 코드는 간단하게 vim Normal mode에 진입하기 위해 esc키를 누르면, 현재 입력소스가 한글이면 영문으로 바꾼다음 esc 키가 입력되게끔 설정한 것입니다.

5번 라인에 하드코딩된 "com.apple.keylayout.ABC" 값은 제 맥에 등록된 영문 입력소스명입니다. 이 튜토리얼를 참고하여 hammerspoon console로 직접 영문 입력소스명을 확인하시고 각자의 환경에 맞게 적절히 수정하시는걸 추천드립니다.

11번 라인은 한글로 작성 중 한영전환했을 때 작성 중이던 글자가 소실되는 현상을 막기 위해 넣은 코드입니다. 오른쪽 방향키를 한번 누르는 동작이에요.

14번 라인처럼 esc_bind를 비활성화한 후 escape 이벤트를 날리지 않으면 `convert_to_eng_with_esc` 함수를 재귀호출해버릴 수 있으니 주의해야합니다. 어쩐지 튜토리얼 대로 코드를 따라쳤는데 제대로 동작하질 않더라구요ㅎㅎ; 제 경우 요게 원인이었습니다. 

4. menu의 Reload Config 를 클릭합니다.

이제 esc키를 누르면 Normal 모드에 무조건 영문 입력소스로 변환된 채로 진입합니다! 혹시 제대로 실행되지 않았다면 hammerspoon console 을 확인하며 디버깅해보시길 바랍니다.


마치며

생산성을 위해 잡스나 주커버그처럼 옷 입는 시간을 줄이는 경지까지는 아니더라도, 조금이나마 쓸데없는 시간을 줄이고, 쓸데없는 주의력 낭비를 방지할 수 있었다는 차원에서 나름 만족스럽습니다. 그리고 앞서 언급했던대로 hammerspoon은 다른 방식으로도 응용이 가능한데요, 자주 쓰는 어플리케이션을 실행하는 단축키를 지정할 수 있고, 현재 입력소스를 확인하는 alert 메세지를 표시할 수도 있습니다. 생산성을 높일 수 있는 여지가 더 있는 것이죠 :)

 

앱 단축키와 입력소스 확인 키맵핑 예시


참고