hammerspoon으로 esc키에 한영변환 기능을 맵핑한 과정을 소개합니다.
들어가며
이 글을 읽으시는 분과 마찬가지로 저도 vim을 참 좋아하는데요, vim으로 한글을 입력하다보면 종종 불편한 상황과 마주칩니다.
대표적으로 한글로 입력하다가 저장하고 나가려고 할 때 `:wq` 대신 `:ㅈㅂ`가 입력되는 상황이 자주 거슬리네요.
위 상황이 발생하면 아래 과정이 반복됩니다.
- 뭔가 쎄함을 느끼며 화면을 확인한다. 아니나다를까 `:ㅈㅂ` 이 입력되었다.
- 백스페이스를 두 번 연타한다.
- 입력소스를 영문으로 바꾼다.
- 다시 `:wq`를 입력하고 화면을 확인한 후 엔터를 친다.
- 다음에는 한영변환을 잊지않겠다고 다짐한다.
번거롭네요! 기본적으로 Normal mode에 진입할 때 한영 입력소스를 신경쓰면 예방되는 문제이긴 합니다. 하지만 이 '신경쓰는 것' 자체도 에너지가 쓰이는 요소네요, 문제입니다.
왜 문제가 반복될까?
위 상황이 발생하는 원인은 뭘까요? 당연하게도 vim의 Normal mode 에는 영문커맨드만 유효하기 때문입니다.
우리가 이 사실을 모르지 않는데 한글커맨드를 입력한 이유는 또 뭘까요? Normal mode로 진입할 때 입력소스를 영어로 변환하는 것을 깜빡했기 때문입니다.
다양한 해결 방법들
그럼 1) vim Normal mode에서 한글명령이 통하게 하거나, 2) Normal mode로 진입할 때 자연스레 영문 입력소스로 변환되게끔 설정하면 문제가 해결될 것입니다. vim을 애용하시는 분이 많은만큼 살짝만 검색해도 해결책이 잔뜩 나옵니다.
1) vim Normal mode에서 한글명령이 통하게 하는 방법
2) vim Normal mode로 진입할 때 자연스레 영문 입력소스로 변환되게끔 설정하는 방법
- 구름 입력기 사용
- noimd 설정
- input-source-switcher 설치 및 사용
- karabiner 활용
- hammerspoon 활용
내가 선택한 해결 방법: 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이나 키 입력에 따른 결과값을 확인할 수 있습니다.
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 메세지를 표시할 수도 있습니다. 생산성을 높일 수 있는 여지가 더 있는 것이죠 :)
참고
'Dev_articles > General' 카테고리의 다른 글
[로그인?] 다양한 인증 수단들 (0) | 2021.04.11 |
---|---|
[Blog] 티스토리에 자동 목차(TOC) 추가하기 feat. Odyssey skin (2) | 2021.01.02 |
[Hammerspoon] typora도 vim처럼 쓰고 싶다.. vim keymap 설정기! (4) | 2020.12.27 |
Ruby language (0) | 2020.12.15 |