본문 바로가기

일::개발

맥에서 방향 키를 vim 키로 할당하기

어깨와 손목 통증을 완화하기 위한 노력의 일환으로 코딩할 때 손의 움직임을 최소화하기로 해본다.

VSCode에서 방향키를 vim 에서 사용하는 hjkl 에 할당해서 사용하면 참 편할 것 같았다.

최대한 트랙볼이나 키보드 방향키에 손이 가지 않게 하기 위해서 ctrl-cmd-h,j,k,l 에 방향키를 할당하고 싶었다.

 

BTT 를 이용하면 쉽게 된다는데, 선뜻 유료 결제에 손이 가지 않아서, 일단 할 수 있는 방법으로 해보기로 함.

 

잠깐 헤맸지만, Karabiner 를 이용해서 ctrl-cmd-hjkl 을 방향키로 사용할 수 있게 설정했다.

 

설정하는 방법은 아래와 같다.

 

간단한 키 매핑은 GUI로 가능하지만, 복잡한 키매핑은 Karabiner-Elements Settings 의 Complex Modifications 기능을 사용해야 한다.

Complex Modifications 룰은 https://genesy.github.io/karabiner-complex-rules-generator/ 와 같은 사이트를 이용해서 만들거나 Example Gallery 에서 Import 한 후에 수정할 수 있는데, 결과적으로 그 값은 ~/.config/karabiner/karabiner.json 에 저장된다.

 

Import 한 룰은 ~/.config/karabiner/assets/complex_modifications/ 하위에 json 형태로 저장되고, 여기에 저장된 룰들은 Settings 화면에서 enable 해주면 karabiner.json 에 추가되는 구조이다.

 

즉, Karabiner-Elements 의 Settings - Complex Modifications 메뉴에서 "Add rule" 을 선택하면 

 

Add rule 을 선택하면

 

Examples 에서 룰을 가져오거나 web browser에서 import할 수 있다.

 

이렇게 예제 룰을 가져올 수 있다.

마침 비슷한 right_command+hjkl to arrow keys 예제가 있으니 enable 해보자.

 

Enable 버튼을 클릭하면 Complex Modifications 메뉴에 "Change right_command+hjkl to arrow keys" 라는 룰이 추가되어 있는 것을 바로 확인할 수 있다.

하지만, 여기서 해당 룰의 정의를 확인하거나 수정할 수는 없다. 원하는 키 조합(left_control + left_command + hjkl)으로 변경하려면 karabiner.json 파일을 수정해줘야 한다.

 

예제를 enable 하면 추가되는 json 은 다음과 같다.

 

"rules": [
    {
        "description": "Change right_command+hjkl to arrow keys",
        "manipulators": [
            {
                "from": {
                    "key_code": "h",
                    "modifiers": {
                        "mandatory": [
                            "right_command"
                        ],
                        "optional": [
                            "any"
                        ]
                    }
                },
                "to": [
                    {
                        "key_code": "left_arrow"
                    }
                ],
                "type": "basic"
            },
            {
                "from": {
                    "key_code": "j",
                    "modifiers": {
                        "mandatory": [
                            "right_command"
                        ],
                        "optional": [
                            "any"
                        ]
                    }
                },
                "to": [
                    {
                        "key_code": "down_arrow"
                    }
                ],
                "type": "basic"
            },
            {
                "from": {
                    "key_code": "k",
                    "modifiers": {
                        "mandatory": [
                            "right_command"
                        ],
                        "optional": [
                            "any"
                        ]
                    }
                },
                "to": [
                    {
                        "key_code": "up_arrow"
                    }
                ],
                "type": "basic"
            },
            {
                "from": {
                    "key_code": "l",
                    "modifiers": {
                        "mandatory": [
                            "right_command"
                        ],
                        "optional": [
                            "any"
                        ]
                    }
                },
                "to": [
                    {
                        "key_code": "right_arrow"
                    }
                ],
                "type": "basic"
            }
        ]
    }
]

 

복잡해보이지만, 내용은 간단하다. right_command 와 hjkl 각각 입력되면 arrow 키로 매칭하라는 것이다.

내가 원하는 것은 left_command + left_control 이니 mandatory 부분을 변경해주면 되겠다.

 

 {
    "from": {
        "key_code": "j",
        "modifiers": {
            "mandatory": [
                "left_command",
                "left_control"
            ],
            "optional": [
                "any"
            ]
        }
    },
    "to": [
        {
            "key_code": "down_arrow"
        }
    ],
    "type": "basic"
},

각각 키의 mandatory 부분을 ["right_command"] 에서 ["left_command", "left_control"] 로 변경해주기만 하면 된다.

나는 편의를 위해 page up, page down, home, end 키까지 단축키를 할당해서 최대한 손을 움직이지 않을 수 있도록 설정했다.

 

아래에 첨부한 json 파일을 (필요하다면 수정해서) ~/.config/karabiner/assets/complex_modifications/ 디렉토리에 넣어주면 간단하게 Add rule 할 수 있다.

 

cmd_ctrl_hjkl.json
0.00MB