在 macOS 底下我們可以按 Caps Lock 鍵切換輸入法,但每次按的時候都會覺得有一點頓頓的,無法立即切換過去,這不是你的錯覺!

本文分享兩個重點:

  1. 讓 Caps Lock 切換輸入法「立刻生效、沒有延遲」
  2. 讓這個設定「開機自動套用」,不用每次重開機都重打指令

一、立即取消 Caps Lock 切換延遲

  1. 打開「終端機」(Terminal)

  2. 在終端機貼上以下指令並按 Enter:

    hidutil property --set '{"CapsLockDelayOverride":0}'
    
  3. 測試 Caps Lock 切換中英文,應該會變得非常即時、沒有慢半拍的感覺。

注意:這個設定在重開機後常常會失效,因此建議再做下面的「開機自動套用」設定。


二、讓 Caps Lock 零延遲在開機時自動套用(LaunchAgent)

這一段會建立一個 LaunchAgent,在你登入 macOS 時自動執行上面的 hidutil 指令。

步驟 1:建立自動啟動的 plist 設定檔

在終端機貼上以下整段指令(包含 EOF 那行),然後按 Enter:

cat > ~/Library/LaunchAgents/com.user.capslockdelay.plist << 'EOF'  
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
<plist version="1.0">  
<dict>  
  <key>Label</key>  
  <string>com.user.capslockdelay</string>  
  <key>ProgramArguments</key>  
  <array>  
    <string>/usr/bin/hidutil</string>  
    <string>property</string>  
    <string>--set</string>  
    <string>{"CapsLockDelayOverride":0}</string>  
  </array>  
  <key>RunAtLoad</key>  
  <true/>  
</dict>  
</plist>  
EOF

這會在 ~/Library/LaunchAgents/ 底下建立一個 com.user.capslockdelay.plist 設定檔。

步驟 2:載入設定讓它生效

接著在終端機執行:

launchctl load ~/Library/LaunchAgents/com.user.capslockdelay.plist

之後每次登入 macOS,系統就會自動執行 hidutil property --set {"CapsLockDelayOverride":0},讓 Caps Lock 零延遲自動生效。

檢查檔案是否建立成功

ls ~/Library/LaunchAgents/com.user.capslockdelay.plistl

如果看得到這個檔案路徑,代表設定檔已經建立。


三、如何移除/還原預設設定

如果之後想恢復系統預設(不再自動套用零延遲),可以在終端機執行:

launchctl unload ~/Library/LaunchAgents/com.user.capslockdelay.plist  
rm ~/Library/LaunchAgents/com.user.capslockdelay.plist  

完成後,重開機後就不會再自動修改 Caps Lock 延遲設定。