어깨와 손목 통증을 완화하기 위한 노력의 일환으로 코딩할 때 손의 움직임을 최소화하기로 해본다.
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" 을 선택하면
이렇게 예제 룰을 가져올 수 있다.
마침 비슷한 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 할 수 있다.