In vim, change language layout to english when type escape key

1. 개요

  • 환경
    OS: OSX
    VIM: Neovim 0.5

  • 문제점
    vim에서 한글 입력중 normal mode로 변경했을 때 명령을 입력하기 위해 한영 전환을 해야한다.
    처음 배울 때는 그러려니 했는데 쓸수록 불편하여 방법을 찾아보았다.

2. 해결 방법

  • hammperspoon 이라는 앱을 사용하였다.
    hammerspoon은 이벤트를 후킹하여 원하는 액션을 수행한다.
    이벤트와 수행할 액션은 lua 로 작성된 init.lua 스크립트 파일에 정의한다.

  • init.lua 파일
    hammerspoon을 설치 후 ‘Open Config’ 를 클릭하여 설정 파일을 연 후 아래와 같이 작성한다.

local inputEnglish = "com.apple.keylayout.US"

-- 영문 입력상태 아니면 영문 입력으로 변경
function change_to_inputEnglish()
    local inputSource = hs.keycodes.currentSourceID()
    if not (inputSource == inputEnglish) then
        hs.keycodes.currentSourceID(inputEnglish)
    end
    hs.eventtap.keyStroke({}, 'escape')
end

-- escape 키 입력시 change_to_inputEnglish 함수를 호출하도록 바인딩 
hs.hotkey.bind({'ctrl'}, '[', change_to_inputEnglish)

-- 정확하진 않지만 키를 바인딩하면 그 키 이벤트는 바인딩된 함수 수행 후 소멸하는 것으로 보인다. 
-- 따라서 키 이벤트를 바인딩하여 사용 후에는 동일한 역할을 하는 다른 키 이벤트를 발생히켜야 한다. 
-- 그렇지 않고 동일한 이벤트를 발생시키면 recursive call 이 되어 무한 루프에 빠지게 된다.  
-- 여기서는 Ctrl-[ 키를 바인딩 하였고 사용 후 동일한 역할을 하는 escape 이벤트를 발생시켰다.  

댓글남기기