[Mac] macOS 中英文輸入切換 & 設定成跟 Windows 一樣用 Shift 切換教學

Last Updated on 2023-12-06 by OneJar

不同 OS 平台間本來就很多操作習慣不一樣。像好幾年來我都是在 macOS 環境進行開發,在 macOS 上切換中英文輸入,快捷鍵我習慣用 Caps Lock 鍵 (或稱「中/英」鍵) ;有時切換到 Windows 上打字想切換大小寫時,也容易習慣性按成 Caps Lock 鍵。

之前因為在 Windows 只做少量簡單文書工作,不會頻繁在 macOS 和 Windows 間切換,影響不大,一時按錯就重按就好,幾分鐘後就會適應該 OS 的習慣。

但最近由於一些軟體工具的限制,有些開發只能在 Windows 進行,我變得比較頻繁在 macOS 和 Windows 間切換做不同開發,太常按錯中英切換快捷鍵這件事開始讓我感到困擾,影響到效率。

於是開始研究怎麼讓 macOS 的中英切換快捷鍵能和 Windows 一致,也就是用 Shift 鍵切換,盡量讓我可以在兩邊平台維持同樣的打字習慣。

先說結論:要想 macOS 能用 Shift 單一顆鍵就切換中英文,純內建無法,需要裝別的軟體輔助,不過動作並不難。

macOS 和 Widnows 切換中英的原理不一樣

先簡單介紹一下 macOS 和 Widnows 的輸入法管理方式其實不一樣。

Windows 是「同一個輸入法底下,還有分中英文模式」,例如下圖分別是中文和英文模式,通常透過按 Shift 鍵切換,但輸入法其實都是微軟注音,這也就是大部分人在 Windows 上所謂的中英切換。


而 macOS 上沒有分什麼中文模式、英文模式,切換中英實際上就是切換「ABC」和「注音」這兩種不同的輸入法。

以下整理 macOS 上切換輸入法常見的做法。

切換方法 1: macOS 內建的組合快捷鍵

  • control + 空白鍵:切回上一次用的輸入法,在 ABC 和注音兩種輸入法間無限循環,效果就類似中英切換。
  • option + command + 空白鍵:按順序切換下一個輸入法。

舉例來說,我的 mac 有安裝三種輸入法:ABC、注音、嘸蝦米。

  • 連續按 control + 空白鍵,效果是:ABC -> 注音 -> ABC -> 注音
  • 連續按 option + command + 空白鍵,效果是:ABC -> 注音 -> 嘸蝦米 -> ABC

如果不喜歡內建的組合鍵,也可以自行修改:

切換方法 2: 內建「中/英」鍵或 Caps Lock 鍵一鍵切換

類似 Windows 的 Shift,只是 macOS 是用 Caps Lock,優點是不用按多個組合鍵,只要一個鍵更方便。

要當前輸入法是 ABC 或注音才有效。

這是 macOS 內建功能,需要開啟設定。

macOS 12.x Monterey 以前的設定方式:「系統偏好設定」 -> 點「鍵盤」 -> 選「輸入方式」tab -> 勾選「使用『中/英』鍵來切換『美國』及目前輸入方式」

新的 macOS 13.x Ventura 介面風格改很大,設定的路徑如下圖:

切換方法 3: 透過選單列上的語言圖示來切換

最單純的方法。

如果你的選單沒有出現圖示,可以透過以下設定開啟:「系統偏好設定」 -> 點「鍵盤」 -> 選「輸入方式」tab -> 勾選「在選單列中顯示輸入法選單」

切換方法 4: 安裝 Karabiner-Elements 軟體設定 Shift 一鍵切換

由於 Shift 鍵在 macOS 有特別地位,是用來跟其他鍵搭配作熱鍵組合,無法單獨設定為熱鍵,因此需要靠第三方軟體達到目的。

Karabiner-Elements 是一個強大的 macOS 上鍵盤客製化軟體,網路上搜尋 macOS 按鍵客製化,應該有 8 成文章都會提到Karabiner-Elements。

Karabiner-Elements 支援最新的 macOS 13.x Ventura。

注意!這個方法需要你的 macOS 組合快捷鍵沒有改,仍是內建的「control + 空白鍵」,修改快捷鍵的地方可以參考上面方法 1

下面教學怎麼安裝設定:

step 1: 安裝

依照個人習慣,可以選擇以下方式安裝:

  1. Karabiner-Elements 官網 下載 dmg 檔安裝
  2. 用 homebrew 安裝
$ brew install cask karabiner-elements

安裝完後會看到多了兩個圖示:

  • Karabiner-Elements: 主要工具,客製化鍵盤設定。
  • Karabiner-EventViewer: 有趣的附帶工具,可以觀察按壓按鍵的電腦反應。

step 2: 啟動 Karabiner-Elements & 允許權限

第一次啟動時,應該會跳出下列各種視窗要求權限:

Karabiner-Elements 也會跳出一個畫面,指示去打開權限:

這裡需要去兩個地方允許權限:

  1. 系統偏好設定 -> 安全性與隱私權 -> 一般 tab

底下會看到 Karabiner 的權限要求,點右邊的允許按鈕:

  1. 系統偏好設定 -> 安全性與隱私權 -> 隱私權 tab

左邊清單找到「輸入監控」,右邊將 Karabiner 相關的三個項目進行勾選:

step 3: 設定 Shift 一鍵切換的規則

這裡我們會增加一個 Karabiner 自訂規則,方法是到對應的資料夾底下新增一個 json 文字檔。

以下示範的是 terminal 方式操作,會使用到指令 vi 作為編輯器。

如果你不習慣用 terminal 操作,可以用任何你習慣的文字編輯器編輯,參考這個教學影片:How to create your own CUSTOM complex modifications in Karabiner-elements – YouTube

或是參考本文最底下的附錄,示範不用 terminal,用內建 Finder 和 TextEdit 操作新增 JSON 檔的方法

透過 terminal 輸入指令移動到指定資料夾,新增一個 json 檔案,檔名任意取,例如這裡取「remapRShift.json」:

$ cd ~/.config/karabiner/assets/complex_modifications
$ vi remapRShift.json

指令簡易說明:

  • cd: change directory ,也就是移動到指定資料夾位置。
  • vi: 一種指令式的文字編輯器,進入到 vi 編輯畫面後,輸入 i 表示進入編輯模式;編輯完按 esc 結束編輯模式;儲存檔案輸入 : + wq + enter

直接複製以下內容,貼到這個 json 檔裡:

{
  "title": "R_Shift to Ctrl+Space",
  "rules": [
    {
      "description": "Change R_Shift to control + space to switch EN/ZH",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "right_shift",
            "modifiers": {
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "right_shift",
              "lazy": true
            }
          ],
          "to_if_alone": [
            {
              "key_code": "spacebar",
              "modifiers": [
                "left_control"
              ]
            }
          ]
        }
      ]
    }
  ]
}

新增完 json 檔後,回到 Karabiner-Elements 介面,左邊選單選「Complex Modifications」,點「Add rule」按鈕:

會看到多了一個「R_Shift to Ctrl+Space」規則,就是我們剛剛設定的,點「Enable」按鈕:

到這裡就大功告成,在 macOS 上單點 Shift 鍵就能切換輸入法。

背後原理,其實是 Karabiner-Elements 幫你把 Shift 鍵 mapping 到 control + 空白這個組合鍵,達到觸發中英切換效果。

補充一提,這個 rule 是改編自官網現成有個「Right Shift to Cmd+Space if alone (to redefine language switch to right shift)」rule,這個 mapping rule 的切換流暢度我覺得很好,只差在我需要的是 control + space 而非 command + space,所以稍做改版。

(不建議) 舊做法:匯入既有的 Shift 一鍵切換 rule 設定

2023.04.15 updated: 這是舊的作法,匯入一個官網上既有的 「Change shift key (rev 2)」rule 範本,但用一陣子後,個人覺得有以下缺點:

  1. 切換速度不夠快,會頓一下
  2. 很容易誤觸發長按 caps lock 的效果,變成維持大寫而非切換輸入法,打字節奏非常不順

建議使用新作法

左邊選單選「Complex Modifications」,點「Add rule」按鈕:

一開始只有預設的範例,沒有其他規則。點下面的「import more rules」按鈕:

會自動幫你打開瀏覽器前往一個網頁 Karabiner-Elements complex_modifications rules,裡面有各式各樣客製化按鍵的設定規則可以下載。搜尋找到「Change shift key (rev 2)」這一個規則,點右邊的 import 進行下載:

網頁會將你導回 Karabiner-Elements 程式:

回到 Karabiner-Elements 程式,確認匯入剛剛的規則:

回到剛剛的畫面,會看到多了剛剛匯入的「Change shift key (rev 2)」。對前兩個規則點 Enable 按鈕:

到這裡就大功告成,在 macOS 上單點 Shift 鍵就能切換輸入法,效果和 Caps Lock 鍵一樣。

背後原理,其實是 Karabiner-Elements 幫你把 Shift 鍵 mapping 到 Caps Lock 鍵,去觸發原本 Caps Lock 鍵的中英切換效果。

由於中間多了一層轉換,仔細觀察其實可以發現,按 Shift 鍵的切換速度會頓一下,不像直接按 Caps Lock 鍵那樣瞬間切換,密集連續按的時候會更明顯。

結論

透過 Karabiner-Elements 設定讓中英文切換的熱鍵在 macOS 和 Windows 能一致,新的 rule 設定我使用了一個多月,打字節奏很順,remap 切換速度流暢,沒什麼副作用,推薦給有同樣需求的人。

附錄(2023.12.06 added):示範用內建 Finder 和 TextEdit 新增 JSON 檔的方法 (不用 terminal,純 GUI)

由於我非常習慣使用 terminal,有些操作對我來說已經跟直覺一樣自然,不會特別說明,例如 cd 或 vi 指令。

直到看到留言區多位朋友的詢問,才意識到,對 terminal 不熟的人會在某些我意想不到的地方卡關。特別感謝 lazzymark 網友熱心分享自己卡關的情形和解決經驗,描述很具體,也讓我理解到一些我以為很直覺的操作,對非開發者的一般人來說可能是障礙。

從留言情況觀察,有設定 shift 切換需求的人裡,非開發者也佔了不少比例,如果因為 terminal 操作卡關而無法設定成功會很可惜,因此決定增加本節,示範新增 json 檔的別種方法,不需 terminal 或任何外掛,只用內建 Finder 和 TextEdit。

step 1: 使用 Finder 找到資料夾位置

資料夾路徑是~/.config/karabiner/assets/complex_modifications~ 指的是登入者的 home 資料夾,就是在 Finder 的左邊捷徑列有小房子 icon 的那個資料夾。如果捷徑列沒看到你的 home 資料夾,可以參考網路有很多教學示範怎麼加上去,例如 How to find your Mac’s Home folder (and add it to Finder)

.config 這個資料夾是所謂的「隱藏檔案」,如果你打開 Finder 看不到,可以在 Finder 按「Command + Shift + .」3 顆組合鍵,就會出現一堆 icon 半透明的檔案。

step 2: 使用 TextEdit 新增檔案

打開 mac 內建的 TextEdit 文字編輯器。

如果你看到的是這個畫面,這是豐富文字編輯模式 (Rich Text):

按「Command + Shift + T」組合鍵,切換成純文字編輯模式 (Plain Text):

接著複製貼上 JSON 內容,按儲存:

輸入檔名,修改要儲存的檔案位置,也就是 step 1 的資料夾:

回到 Finder,就能看到檔案新增成功:

References

在〈[Mac] macOS 中英文輸入切換 & 設定成跟 Windows 一樣用 Shift 切換教學〉中有 12 則留言

  1. 我是用mac mini M1(macOS14.1.2)
    我不會下指令編輯
    所以我一直卡在貼上語法後關閉視窗
    我的檔案名稱只會是.remapRShift.json.swap
    上網查了資料才知道
    貼上語法後要結束編輯
    最後要輸入:x+enter鍵
    才會正確的關閉視窗並儲存檔案
    檔案名稱才會顯示成remapRShift.json
    提供我的經驗給其他像我一樣的小白參考
    也感謝您的分享

    回覆
    • Hi 非常謝謝你的熱心經驗分享,而且描述很具體!
      讓我理解到指令小白照原本的教學操作,其實容易卡關。

      因此,我增加了附錄,示範不用 terminal,純用內建 Finder 和 TextEdit 新增 JSON 檔的作法,希望能幫到指令小白。

      回覆
  2. 您好
    請問要如何到以下的資料夾?
    是複製哪一段的路徑名稱呢?

    $ cd ~/.config/karabiner/assets/complex_modifications

    Thank you~

    回覆
    • 你好~
      推測你應該是不習慣 terminal 指令的使用者,可能也不熟悉 cd 和 vi 操作,你可以嘗試用 Finder 找到資料夾位置,再用你習慣的方式去新增檔案。

      資料夾是「~/.config/karabiner/assets/complex_modifications」,「~」指的是登入者的 home 資料夾,就是在 Finder 的左邊捷徑列有小房子 icon 的那個資料夾。

      但上面這個資料夾是所謂的「隱藏檔案」,如果你打開 Finder 看不到,可以在 Finder 按「Command + Shift + .」3 顆組合鍵,就會出現一堆 icon 半透明的檔案。

      回覆
  3. 你好~非常感謝您的分享
    想請較一下 我新增完json檔案後按enter 關閉terminal後回到karabiner試圖add rule
    但卻沒有出現剛剛新增的檔案(依然只顯示了example的三個rules)
    請問這個應該如何解決呢?是不是我有什麼步驟操作錯誤了呢?

    感謝指點!!

    回覆
    • 你好~
      因為無法實際確認你的電腦配置,只能試著推測可能的因素提供你參考。

      初步排除 macOS 版本相容性問題,因為我在 macOS 12.x(Monterey) 和 13.x(Ventura) 都設定過能正常運作。

      最有可能是 json 檔沒有新增到正確位置,或是 json 內容跑掉。
      檢驗方法:
      打開 terminal,複製以下指令輸入:
      $ cat ~/.config/karabiner/assets/complex_modifications/remapRShift.json

      操作正確的話,terminal 上會印出「json 檔的內容」,且和文章示範的 json 內容會一字不差。
      如果沒有正確印出,則表示 json 檔的新增操作沒有成功,可照教學步驟再試著設定一次。

      回覆

發表留言