Skip to main content

Command Palette

Search for a command to run...

Beyond Caps lock

Published
1 min read

應該不只一次跟別人提起:「如果這幾年用 mac 有學到些什麼的話,最重要的一件事肯定是把 Caps lock 改成 Ctrl」。是的,Caps lock 這麼重要的位置,居然放了這麼無用的鍵。把它換成 Ctrl 會讓你的生活品質大大提升。

但是最近跟其它人推廣這個小技巧時,有時會得到這樣的反應:「但是我都用 Caps lock 來切換輸入法」。顯然 macOS 有想要改進這個無用的鍵,讓它多發揮一些功能。macOS 目前的設計是,如果你快速的按下 Caps lock 放開,那麼就會觸發切換輸入法的行為。如果你按久一點,那就是原先的 Caps lock。

讓我們來從行為模式來思考一下幾個情況:

  1. Ctrl 是個綴詞鍵(或稱裝飾鍵),當我們按下 Ctrl 時,必然是配合另一個鍵才會觸發我們想要的行為。
  2. 切換輸入法則是一個鍵就可以觸發的行為。

所以如果我們可以做到這樣的事就完美了:

  1. 當快速按下 Caps lock 並放開,觸發切換輸入法
  2. 如果按著 Caps lock,並按下另一顆鍵,則視為 Ctrl + key

是的,這是辦得到的。但需要 Karabiner 這個免費軟體,並稍加修改。


  1. 首先到 https://pqrs.org/osx/karabiner/index.html 下載並依指示安裝,執行後會看到底下的畫面(記得要到系統偏好設定 > 安全性與隱私權打開相應的權限):

  2. 接著切換到 [Complex Modifications],並按下左下角的 [Add rule]

  3. 按下上方的 [import more rules from the Internet]

  4. 這時瀏覽器會開啟,列入可以匯入的各種規則,找到 Modify Keys 區塊下的 Change caps_lock key,按下右邊的 [Import]

  5. 回到 Karabiner 視窗,就可以看到多出一些可用的規則。找到 Change caps_lock to control if pressed with other keys, to escape if pressed alone.,按下右邊的 [Enable]。這個設定會在單獨按下時觸發 [ESC],而跟其它鍵一起按的時候變成 [Ctrl + key]

  6. 雖然上面的設定也很不錯,但是我還是想要切換輸入法。這就要動用到編輯器了,用你喜歡的編輯器打開 "~/.config/karabiner/karabiner.json",找到我們匯入的規則區塊,也就是寫著 "description": "Change caps_lock to control..." 的那個 JSON object (花括號)。

  7. 將底下的 "to_if_alone" 裡的 key_code 從 "esc" 改成 "caps_lock",為了避免誤解,也順便將上方說明改成 "...to caps_lock if press alone."

  8. 要切換輸入法,記得要在 macOS 的系統偏好設定 > 鍵盤 > 輸入方式 ,將使用大寫鎖定鍵來切換... 核取方塊打勾

Note: 這個方式在切換到 macOS 內建的輸入法,如注音或是雙拼等都運作的很好。而我個人慣用的嘸蝦米,則是第一次要用 [Ctrl + Space] 切換到嘸蝦米之後,按下 [Ctrl] 可以輸入英文,再按一次回到嘸蝦米。不過右上角的輸入法則始終都會顯示嘸蝦米。

Note2: 我的系統有裝 Better touch tool,本來想用它來改,但目前似乎不提供這種功能。但 BTT 跟 Karabiner 一起運用目前都蠻正常的。

Happy hacking!

More from this blog

聊聊 Elixir 中的 type

最近有幾位朋友分別來問 Elixir 的 type 的問題,想說中文世界好像沒有比較完整的東西,就把知道的東西整理出來。 (目前) Elixir 的 type 能做什麼? tl;dr: 最主要是文件,然後在某種程度下防止錯誤。 我覺得這應該是在研究 Elixir 的 type 時最需要知道的事情了。不像 Haskell 及 F# 這種以型別著稱的 ML 系語言,Elixir / Erlang 本質上是個動態語言,所有與型別有關的標註都會被編譯器忽略。而 Erlang 內建的型別檢查工具 dia...

Oct 18, 20222 min read

Steam 上的程式教學類遊戲

農曆年期間比較有空,玩了一些之前買的遊戲。這次特別試了幾個標榜讓不會寫程式的人學寫程式的遊戲。分享一下試玩的心得。 1. 7 Billion Humans 考慮到劇情的話我最喜歡的是 7 Billion Humans。它用拖拉語法的方式下指令,一開始還蠻好上手的,但是因為只有 goto 那樣的結構,而操作的時候又是一次對所有的 worker 下指令,所以常常要想一下執行後每個人運作的順序。但是介面有正體中文,以「想要體驗一下寫程式大概是怎麼一回事」來說還蠻適合的。 2. while Tru...

Feb 24, 20201 min read

Let's (re)start from here.

最近的時間大半都花在這上面了。 算算應該是第五次弄部落格系統。算一下扣除上古時期用現成的之外,每個系統平均各寫六篇文章,也都撐不過兩年。前幾個分別用了 Refinery CMS -> jekyll -> middleman -> jekyll。想來架系統的總時數應該超過寫文章的時間 XD 而這次用上了 Gatsby + tailwindcss,除了恢復一下 GraphQL 的手感之外,這次還挑戰了不套別人做的版型,自己把類似上一個部落格的 style 刻出來。想說來分享一下這些技術的感想: G...

Jan 11, 20201 min read

Mostly Functional

31 posts

/.(ex|jsx?|rb|hs|rs|py)/, A father, a bookworm, a pluviophile. Co-organizer of http://Elixir.tw. Learning Satir, coaching & mediation.