Karabiner-Elements 設定

李松錡
7 min readNov 1, 2017

--

昨天晚上重灌了我的 macbook,終於從 10.11 升到 10.12 去了 (覺得 10.13 還不太穩,再等一陣子)。為什麼會在這時候升也是因為 Karabiner 終於推出了可供 10.12, 10.13 都支援的版本。

Karabiner

Karabiner 是軟體鍵位重新 remap,或自定義組合鍵位來重新構成新的鍵。在從 0 開始,手打一把專屬的藍牙雙模人體工學鍵盤 (0)裡面我就有提到這件事。雖然我已經有一把人體工學鍵盤,但總是會有沒把鍵盤帶出去的時候,所以有時候我還是只能夠使用 macbook 上面的鍵盤。為了讓我自己用起來更舒服,所以我根據我的習慣,在 karabiner 裡面做了一些設定。我的習慣是這樣子的:

  1. 不使用 capslock,而且我以前就習慣把 capslock 變成 ctrl
  2. 習慣用 vim,所以 h/j/k/l 對我來說是左下上右
  3. “;” (semicolon) 鍵在按下一顆 function key 以後會變成 delete

基於以上三個使用習慣,我在 Karabiner 裡面做了幾個設定:

  1. capslock 變成 right_ctrl (ctrl/option/command 是有左右之分的喔)
  2. right_ctrl + h/j/k/l 會變成左下上右
  3. right_ctrl + ; 會變成 delete

簡易設定

安裝完 karabiner-element 以後,要達成 capslock 變成 right_ctrl 這件事非常簡單,只要透過 GUI 介面設定即可

直接在 Simple Modifications 的頁面選取做設定即可

同時 karabiner 也會在

~/.config/karabiner/karabiner.json

裡面產生一個 json 的設定檔

設定 Complex Modifications

那要怎麼設定 right_ctrl + h/j/k/l 跟 right_ctrl + ; 會變成其他鍵呢? 一開始我點到 Complex Modifications 的頁面以後,找了老半天發現它並沒有提供 GUI 的介面讓你簡單的設定,所以這邊我們就要自己動手做一下啦~

在 Complex Modifications 的頁面有一個 Add rule 可以按,按下去後會跳出這個視窗

按下 Add rule 以後,我發現他有一個 import more rules from the internet (open a browser),按下去之後瀏覽器就會跳轉到 karabiner 提供一堆設定範例讓你直接下載下來使用

裡面有有很多寫好的 rule 可以讓你直接抓下來用,例如 vi style 等等

起初我隨便找了兩個範例下來用,分別是 Vi Style Arrows 跟 Exchange command + arrows keys with control + arrows keys,看來果然也有不少人是不喜歡為了按簡單的上下左有所以要把手指移動到方向鍵區。按下該個 rule 後面的 import 以後,瀏覽器會問你是否同意用 karabiner 打開這個檔案,同意以後 karabiner 就會自己把檔案打開並且放到

~/.config/karabiner/assets/complex_modifications

裡面。這些檔案也都是以 json 作為設定的,其中每一個設定檔的結構都長得像這樣:

{
"title": "設定檔標題名",
"rules": [
{
"description": "該條 rule 的敘述",
"manipulators": [
]
}
]
}

這個結構就是單個設定檔的結構,而一個設定檔裡面是可以有很多個 rule 的 (所以 rule 才會是一個 array),而每個 rule 都是一個 object。每個 rule object 裡面最一開始都會有一個 description,是一個字串,給使用者看說這個 rule 能幹嘛。我在這個資料夾裡面自己重新創建一個 my_vim.json 的檔案,內容如下:

{
"title": "My vim style like arrow key control",
"rules": [
{
"description": "Change Control+h/j/k/l to Arrows",
"manipulators": [
]
},
{
"description": "Change Control+; to delete",
"manipulators": [
]
}
]
}

則在 Add rule 的頁面會出現:

而每一個 manipulator 都是一個 object,裡面就可以寫入各種設定。這邊因為 karabiner 的文件不是很齊全,所以有些東西我也不太肯定他到底是幹嘛用的,然後還有什麼選項可以選,但大致上的結構如下:

{
"type": "basic",
"from": { // from 區塊定義了按下什麼以後會觸發 map 事件
"key_code": "KEY" // 一般非 modifier 的按鍵
"modifiers": { // 使用哪些 modifier 的按鍵
"mandatory": [ // 必要的 modifier 按鍵,有了才會觸發
],
"optional": [ // 非必要的 modifier,按了也認定可以觸發此 rule
]
}
},
"to": [// to 區塊定義了要 map 到什麼動作
{
"key_code": "target_key"
},
... // 更多的 key_code
]
}

因為 karabiner 的文件沒寫得很清楚,所以大致看了一下前面兩個 example 而得到的心得。上面的 modifiers 為什麼還會有 mandatory 和 optional,差異是在於如果沒寫 optional 的時候,會變成 from 要完全符合,如果多了某些 modifier 的話就會視同沒有 match 到這個 rule,而如果有設定 optional 的話,根據裡面的設定,會讓 match 這個 rule 的條件放寬。舉例來說,如果 modifiers 裡只有 mandatory,且裡面設定 right_ctrl,key_code 設定成 h,此時整個鍵盤上就只能夠按下 right_ctrl 和 h 才能夠觸發這個 rule,如果多按了 shift 之類的 modifier,則就會被認定成不 match 這個 rule,因此不觸發;如果加入 optional,裡面有 left_shift,則不論我們是否有按下 left_shift,按下 right_ctrl 和 h 都會觸發這個 rule,且 left_shift 會被視同是有作用的,並不會像 right_ctrl 和 h 會消失,變成 to 裡面 map 過去的按鍵。

最後就提供大家我自己寫的設定檔,只要把它放到

~/.config/karabiner/assets/complex_modifications

裡面,在 Add rule 就可以 enable 了

--

--