본문 바로가기

카테고리 없음

Mac 에서 Vim 명령어모드 한글 처리 vscode 포함

 

 

MacVIM : 여러 방법이 있지만 .vimrc 에 set noimd 적용으로 쉽게 처리

 

vscode : 

brew tap daipeihust/tap && brew install im-select
which im-select

/usr/local/bin/im-select 에 설치된다.

 

vscode vim 의 설정(Extended Setting) 

 

이미지 대로 셋팅하면 명령어모드로 전환시 자동으로 영문으로 변경되고

다시 입력모드로 들어가면 이전 모드(한글/영문) 로 바뀐다.

 

 

https://mycodings.fly.dev/blog/2022-08-07-vs-code-with-korean-input-auto-change

 

VS Code Vim에서 한글 세팅 제대로 하기

VS Code Vim에서 한글 입력 후 ESC키를 눌러 명령 모드로 전환 시 자동으로 영문 키보드로 전환하기

mycodings.fly.dev

 

한국어 키보드로 VIM 사용하기

처음 한국어 키보드로 VIM을 사용하다보면 다음과 같은 문제들을 마주하게 됩니다.

  1. <Esc>를 입력하여 NORMAL 모드로 돌아오고 j를 눌러 아랫줄로 이동하려 하는데 ㅓ가 입력되어 커서가 움직이지 않는 문제.
  2. 한글로 타이핑하고 파일을 저장하기 위해 <Esc>:w를 입력하였으나, 실제로는 <Esc>:ㅈ가 입력되어 저장되지 않는 문제.

이 문제들은 모드를 전환할 때마다 직접 영문으로 전환해주면 해결됩니다. 그러나 몹시 불편합니다. <Esc>를 누를 때마다 현재 한글 모드인지 영문 모드인지를 생각하면서 한/영전환 키를 일일이 눌러주는 일만은 피하고 싶습니다.

방법 : 입력기 변경

맥이라면 구름 입력기를 사용하는 방법이 있습니다. 구름 입력기에는 <Esc>를 누를 때마다 영문으로 전환해주는 옵션이 있습니다.

  • 제가 쓰고 있는 방법입니다. 가장 추천하는 방법이며, 맥이라면 가장 심플한 방법이라 생각합니다.
  • 리눅스에도 해당 기능을 지원하는 한글 입력기가 있을 것으로 봅니다.

방법 : noimd를 설정

다음과 같이 .vimrc에 설정해 줍니다.

set noimd
 
  • 한글 입력을 하다 NORMAL 모드로 돌아갔을 때 아무런 문제 없이 NORMAL 모드의 명령어들을 사용할 수 있습니다.
  • :명령줄로 가보면 아직 한영전환 키를 입력하지 않았는데도 영문이 기본으로 입력됩니다.
  • 다시 INSERT 모드로 돌아와보면 한글이 그대로 나옵니다. 영문을 사용하려면 한영전환 키를 입력해야 합니다.
  • 단점 : MacVim 에서는 잘 되지만, 터미널 VIM 에서는 안 됩니다.

방법 : langmap 설정 사용

다음과 같이 설정하면 NORMAL 모드에서 한글을 입력해도 작동합니다.

set langmap=ㅁa,ㅠb,ㅊc,ㅇd,ㄷe,ㄹf,ㅎg,ㅗh,ㅑi,ㅓj,ㅏk,ㅣl,ㅡm,ㅜn,ㅐo,ㅔp,ㅂq,ㄱr,ㄴs,ㅅt,ㅕu,ㅍv,ㅈw,ㅌx,ㅛy,ㅋz
 
  • ㅁ을 a로, ㅠ를 b로 인식하게 하는 기능입니다. 본래는 그리스어 키보드 같은 좀 특별한 키보드를 위한 기능이라 할 수 있습니다.
  • 문제점 : 한글이 조합형 글자이다 보니 한글 자음 다음에 한글 모음을 입력할 때 키를 한 번 더 눌러야 명령어가 인식됩니다.

방법 : input-source-switcher 설치

input-source-switcher를 설치해서 쓰는 방법이 있습니다.

방법 : Karabiner

맥이라면 Karabiner 의 프리셋을 사용할 수도 있고, Karabiner의 설정 파일인 private.xml에서 다음과 같이 설정해 주는 방법도 있습니다.

<vkchangeinputsourcedef>
    <name>KeyCode::VK_CHANGE_INPUTSOURCE_TO_ENGLISH</name>
    <inputsourceid_equal>com.apple.keylayout.ABC</inputsourceid_equal>
</vkchangeinputsourcedef>
<item>
    <identifier>esc_abc_escape</identifier>
    <name>영문으로 inputsource 전환 후, ESC 입력</name>
    <autogen>
        __KeyOverlaidModifier__
        KeyCode::ESCAPE,
        KeyCode::VK_MODIFIER_EXTRA1,
        KeyCode::VK_CHANGE_INPUTSOURCE_TO_ENGLISH,
        KeyCode::ESCAPE,
    </autogen>
</item>
 

위와 같이 설정해주면 <Esc>키를 누를 때마다 영문 전환이 됩니다.

  • 치명적인 문제 : OSX에서는 잘 돌아가지만, OSX의 다음 버전인 macOS에서는 입력 관련 변경 사항이 있어서 Karabiner가 제대로 동작하지 않습니다. macOS를 위한 Karabiner-Elements가 현재 개발중이긴 한데, 아직까지는 단순 키 맵핑만 가능해서 원하는 기능을 위해 사용하기에는 부족한 점이 많습니다.

업데이트된 Karabiner-Elements에서 위 룰을 Complex Modifications를 사용하여 json 파일로 추가가 가능합니다. ~/.config/karabiner/assets/complex_modifications/ 에 새로운 json 파일을 추가하고 (ex. escape_to_en.json) 다음 내용을 추가해줍니다.

{
  "title": "Convert to en when ESC",
  "rules": [
    {
      "description":"Convert to en when ESC",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "escape",
            "modifiers": {
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "escape"
            }
          ],
          "to_after_key_up": [
            {
              "select_input_source": {
                "language": "en"
              }
            },
            {
              "key_code": "escape"
            }
          ],
          "conditions": [ 
            { 
              "type": "frontmost_application_if",
              "bundle_identifiers": [
                "^com\\.apple\\.Terminal$",
                "^com\\.googlecode\\.iterm2$",
                "^co\\.zeit\\.hyperterm$",
                "^co\\.zeit\\.hyper$",
                "^io\\.alacritty$",
                "^net\\.kovidgoyal\\.kitty$" 
              ]
            }
          ]
        }
      ]
    }
  ]
}
 

이후 Karabiner-Elements 환결설정 -> Complex Modifications -> Add rule 에서 해당 rule을 Enable 해줍니다. 이후 conditions에 추가된 터미널 앱들 안에서 <Esc>를 입력할 때마다 영문으로 전환됩니다.

방법 : AutoHotkey

Windows 라면 AutoHotkey 를 쓰는 방법이 있습니다. 다음과 같은 코드를 Ahk로 실행하면 <Esc>를 입력할 때마다 영문으로 전환됩니다.

  • 아래의 IME_CHECK 코드 출처는 다음과 같습니다.
  • http://autohotkey.co.kr/b/1-357
  • 특정 프로그램(ex: VSCode)에서만 실행을 원할 경우, IfWinActive 기능을 사용합니다.
  • Windows 11에선 Legacy IME를 사용하는 경우에만 작동합니다.
$Esc::
    if(IME_CHECK("A"))
        Send, {VK15}    ;영문이라면 한영전환 키를 입력해준다.
    Send, {Escape}
    return

/*
  IME check 
*/
IME_CHECK(WinTitle) {
  WinGet,hWnd,ID,%WinTitle%
  Return Send_ImeControl(ImmGetDefaultIMEWnd(hWnd),0x005,"")
}
Send_ImeControl(DefaultIMEWnd, wParam, lParam) {
  DetectSave := A_DetectHiddenWindows
  DetectHiddenWindows,ON
   SendMessage 0x283, wParam,lParam,,ahk_id %DefaultIMEWnd%
  if (DetectSave <> A_DetectHiddenWindows)
      DetectHiddenWindows,%DetectSave%
  return ErrorLevel
}
ImmGetDefaultIMEWnd(hWnd) {
  return DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)
}
 
  • Windows 11에서 업데이트 된 IME를 사용하는 경우라면 아래 스크립트를 사용합니다. 참고한 출처
$Esc::
    if(IME_CHECK("A"))
        Send, {VK15}    ;영문이라면 한영전환 키를 입력해준다.
    Send, {Escape}
    return

/*
  IME check 
*/
IME_CHECK(WinTitle) {
  WinGet,hWnd,ID,%WinTitle%
; IMC_GETOPENSTATUS(0x5) 대신 IMC_GETCONVERSIONMODE(0x1)를 사용
  Return Send_ImeControl(ImmGetDefaultIMEWnd(hWnd),0x001,"") 
}
Send_ImeControl(DefaultIMEWnd, wParam, lParam) {
  DetectSave := A_DetectHiddenWindows
  DetectHiddenWindows,ON
   SendMessage 0x283, wParam,lParam,,ahk_id %DefaultIMEWnd%
  if (DetectSave <> A_DetectHiddenWindows)
      DetectHiddenWindows,%DetectSave%
  return ErrorLevel
}
ImmGetDefaultIMEWnd(hWnd) {
  return DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)
}

 

 

 

VS Code Vim에서 한글 세팅 제대로 하기

안녕하세요?

이번 시간에는 Vim 관련 블로그입니다.

VS Code에서 Vim을 사용할 때 한글 사용이 많이 불편한데요.

어떤 문제가 있냐면 바로 인써트(Insert) 모드에서 한글을 입력 후 ESC키를 눌러 명령(Command) 모드로 돌아갔을 때 아직도 키보드는 한글 모드라서 hjkl 같은 커서 키가 반영되지 않고 한글이 깨져 보이는데요.

사진으로 보여드리면 아래와 같은 문제가 발생합니다.

일단 위와 같이 한글로 글을 썼고 그다음 ESC키를 누른 다음 hjkl키를 이용해서 커서를 이동시켰을 때 아래 그림처럼 한글이 깨져서 나옵니다.

왜냐하면 ESC키를 눌러 명령(command) 모드로 돌아왔어도 아직도 컴퓨터의 언어 입력 선택은 한글로 선택되어 있기 때문입니다.

이게 사실 굉장히 불편한데요.

그래서 VSCodeVim/Vim Github 사이트에서 제공해주는 Input Method 관련 정보를 이용해서 이 문제를 해결해 보려고 합니다.

해당 주소로 이동해서 중간쯤에 보시면 아래와 같이 나올 겁니다.

텍스트 찾기로 "Input Method"라고 치시면 해당 위치가 나옵니다.

이 방법은 그냥 단순하게 ESC키를 눌러 명령(command) 모드로 들어가면 무조건 영문 키보드를 선택하는 방식입니다.

명령(command) 모드에서는 무조건 영문 키보드여야 하니까요!

그리고 인써트(insert) 모드에서 마지막으로 선택된 키보드 세팅을 기억했다가 그다음에 다시 인써트 모드로 들어갈 때 예전에 기억해둔 언어의 키보드 세팅으로 변경해 줍니다.

처음에는 불편할 수 있는데 써보면 금방 적응해질 겁니다.

자, 그럼 본격적으로 설치에 들어가 보겠습니다.


MacOS 사용자일 경우

일단 MacOS를 사용할 경우는 써드파티 프로그램을 먼저 설치해야 하는데요.

바로 im-select 프로그램입니다.

위 주소로 가면 아래와 같이 brew 프로그램을 통해 설치하라고 하는데요.

일단 설치하겠습니다.

brew tap daipeihust/tap && brew install im-select

which im-select

그리고 나서 설치된 im-select 프로그램이 어디에 위치해 있는지 which 명령어로 확인했습니다.

이제 VS Code에서 Vim을 설치합시다.

설치할 때는 위 그림에서 나오는 것과 똑같은 걸 고르면 됩니다.

일단 설치를 했으면 위 그림에서 오른쪽에 조그마하게 있는 톱니바퀴를 눌러 Vim의 세팅으로 들어갑시다.

톱니바퀴를 누르고 확장 관련을 선택하면 Vim 세팅 화면이 나오는데요.

우리가 찾아야 할 부분은 아래 그림과 같습니다.

첫 번째 Default IM 부분에 아래 코드를 붙입니다.

com.apple.keylayout.ABC

두 번째 Enable 부분은 밑에 있는 체크 박스에 체크만 하면 됩니다.

세 번째, 네 번째는 아까 우리가 설치했던 im-select 프로그램의 위치를 입력하는 건데요.

그림과 같이 입력하시면 됩니다.

이제 VS Code에서의 Vim 세팅을 끝났습니다.

간혹, 에러가 발생할 수 있는데요.

그 이유는 "com.apple.keylayout.ABC" 부분인데요.

위 그림과 같이 여러 키보드를 넣어서 테스트해 보면 됩니다.

보통 US와 ABC 둘 중에 하나는 통하더라고요.


Windows 사용자일 경우

윈도 사용자일 경우 맥의 im-select 프로그램을 별도로 다운로드하여야 하는데요.

여기서 받으시면 됩니다.

위 그림에서 밑줄 친 부분을 다운하여 어디 적당한 곳에 저장하면 됩니다.

일단 C:\im-select 폴더를 만들고 그 안에 저장합시다.

그럼 최종적으로 윈도상의 im-select.exe 파일의 경로는 다음과 같습니다.

C:\\im-select\\im-select.exe

이제 다시 VS Code에서 Vim을 선택하고 Vim의 세팅으로 들어가서 아까 맥 사용자와 똑같은 곳으로 이동합시다.

그리고 아래 그림처럼 입력하면 됩니다.

원리는 맥 사용자일 경우와 똑같은데요.

한 가지 다른 점은 키보드 로케일이 윈도와 맥의 경우 그 방식이 조금 다릅니다.

1033은 US 키보드의 윈도상에서의 로케일 번호입니다.

그리고 KR 키보드의 윈도상에서의 로케일 번호는 1042 번호입니다.

그래서 혹시 에러가 나면 1042로 바꿔서 확인해 보시면 됩니다.

참고로 윈도에서의 키보드 로케일 정보는 아래 사이트에서 확인할 수 있습니다.

로케일 코드 사이트

이상으로 VS Code에서 Vim 사용 시 좀 더 한글을 편하게 사용하는 방법에 대해 알아봤는데요.

좋은 도움이 되셨으면 합니다.


MacOS 사용자 Tip

맥의 VS Code에서 Vim을 처음 설치해서 사용할 때 hjkl 키를 누르고 있으면 커서가 한 번만 움직이고 더 이상 움직이지 않는 경우가 있는데요.

이럴 경우 다음과 같이 하면 해결됩니다.

VS Code에서 Command + J 키를 눌러 터미널 창을 열고 아래와 같이 입력하여 실행하면 해결됩니다.

defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false

이제 다시 VSCode를 끄고 다시 실행해 보면 hjkl 키가 연속으로 눌러지는 걸 확인할 수 있을 겁니다.