⌨️

徹底解決輸入法切換:從「英數・かな」到多輸入法方案

date
Jan 27, 2026
slug
keyboard-input-source-switching
status
Published
type
Technical
tags
Typography
summary
任何鍵盤都能像 JIS 配列一樣一鍵直達輸入語境的切換。更進一步,我們可以把該功能擴展成「一鍵切換至任意指定的輸入法」(例如鼠鬚管、倉頡等)。
pin
photos
language
lang-zho

TL;DR

用 Karabiner 模擬「英數・かな」鍵,可以讓任何鍵盤都能像 JIS 配列一樣一鍵直達輸入語境的切換。更進一步,我們可以把該功能擴展成「一鍵切換至任意指定的 」(例如鼠鬚管、倉頡等)。

💬 談談輸入法的切換

「英數・かな」是 JIS 鍵盤 上在空格鍵兩側的一組快捷鍵。只要按一次按鍵,就能直接切到對應輸入法,不用記熱鍵、不用循環點擊、不用猜「下一次是什麼輸入法」。
圖片來自 Apple 日本官網售賣的 Magic Keyboard 鍵盤
圖片來自 Apple 日本官網售賣的 Magic Keyboard 鍵盤
這組按鍵能非常快速地、無干擾地完成
「英數・かな」的問題在於:
  • 只適用於 JIS 鍵盤(ANSI 配列沒有相應的物理按鍵)
  • 語境切換只能在日文和西文之間(不能切換至中文輸入法)
我們希望完成:在任何鍵盤上快速完成語境切換邏輯,並且擴展到任意輸入法。

🍬 簡單方案:模擬 JIS 之「英數・かな」功能

用「Fn + 左 ⌘」和「Fn + 右 ⌘」模擬 JIS 的兩箇專用鍵。
使用 Karabiner,我們可以透過組合映射模擬「英數・かな」按鍵。你可以一鍵導入這箇規則:
組合鍵在物理鍵盤的展示如下:
Magic Keyboard ANSI Layout
Magic Keyboard ANSI Layout
HHKB Layout
HHKB Layout

🍭 進階方案:切換到任何輸入法

用「Fn + 左 ⌘」切換西文,「Fn + 右 ⌘」切換至指定的輸入法。
如果你像我一樣,主要用中文輸入法(例如 鼠鬚管),那「かな」鍵其實並不實用。這時候可以把右側改成直接跳轉到指定輸入法
這裏說的指定輸入法可以是任何,包括但不限於:其他拉丁字母、西里爾字母、第三方輸入法等等。
Karabiner 提供了原生功能:select_input_source,可以直接切換到指定的輸入法,而不用依賴快捷鍵或第三方工具。

獲取輸入法 ID

notion image
  1. 切換到你想要的輸入法(例如鼠鬚管)
  1. 打開 Karabiner-Elements 的 EventViewer
  1. 點擊 Variables 標籤頁,找到 Input Source 一欄
  1. 複製對應的 ID(例如 im.rime.inputmethod.Squirrel.Hans

具體規則

中,把「Fn + 右 ⌘」改成切換到指定輸入法:
注意:此處的 input_source_id 是正則表達式匹配,所以點號要用 \\. 轉義。你使用的時候,需要改到你期望的指定輸入法 ID。

設計哲學

  • 左側組合:保持 japanese_eisuu,方便切回任何拉丁字母輸入法
  • 右側組合:改成「主要輸入法」(中文、日文、韓文等),實現一鍵直達
  • 循環切換:使用系統自帶的快捷鍵

🙋 Q&A

「沒有物理 Fn 鍵」或「物理 Fn 鍵不能軟件捕捉」

notion image
如果你的鍵盤沒有真正的 Fn 鍵能被系統識別,可以在韌體裡把物理 Fn 改成 F24,再用 Karabiner 的 映射回 Fn/Globe,就能無縫使用這套方案。具體如下:

在鍵盤固件裡改變映射(物理按鍵到固件)

VIA 中把物理 Fn 鍵改成 F24(或其他不常用的功能鍵)。

在 Karabiner 裡改變映射「Fn/Globe」(固件到軟件)

用  標籤頁添加:
  • From key: F24
  • To key: fn (或顯示為 Globe)
如果以上兩步都做了,這時候你就可以直接用前面的「Fn + Command」規則了。

爲什麼不用 「中/英」或「한/A」物理按鍵?

值得注意的是,日文以外的 CJK 輸入中,最常見的方法是使用物理鍵盤左側的大小寫切換(Caps Lock),通常會在對應的本地化鍵盤中印刷成「中/英」或「한/A」。 但作者認爲這並不是一箇優雅的解決方案,因爲很多情況下這箇位置都可以讓給 Control 或是其他更有用的功能按鍵。
相應地, japanese_eisuu 是系統級的「西文模式」鍵,它不關心你用的是「英語 - ABC」「英語 - British」還是「日本語 - ローマ字」,只要是拉丁字母輸入就能切過去。這比硬綁定某個輸入法 ID 更靈活。

為什麼不用「西文・循環切換」組合?

有些人會用 Cmd+Opt+Space 或第三方工具(例如 macism)來循環切換輸入法。但這種方式有個問題:狀態依賴。
例如,你現在用的是「英語 - ABC」,按一下切到「鼠鬚管」,再按一下切到「日本語」,再按一下又回到「英語」。如果你不記得當前在哪個輸入法,就很容易切錯。
而 select_input_source 是絕對定位:無論你現在在哪箇輸入法下,只要按一下就直接跳到目標。這才是 JIS 風格的靈魂——確定性。