在 insert 模式输入中文后退出,回到 normal 模式,但这时输入法状态还是中文,跳转位置的时候会错乱,麻烦问下,一般这种情况应该怎么处理,让退回 normal 模式时自动切换成英文。先谢谢了。
1
ZZZZone 2 天前
我没用 Obsidian , 但是有相似场景。
我的解法是用 Karabiner 改键: 我把大写键改成 Esc + 切换英文 左 Shift 切英文, 右 Shift 切中文。 这样就做到了按大写键 进入 normal 模式同时自动切英文输入法。 |
2
frankyzf OP 谢谢你的建议,让 AI 写了个 AutoHotKey 2.0 的脚本
``` autohotkey $Esc:: { IME_Set(0) ; 0 代表英文/关闭 IME ,1 代表中文/打开 IME Send "{Esc}" } $^[:: { IME_Set(0) Send "{Blind}^{[}" } ; ------------------------------------------------------------------------- ; 下面是通用的 IME 控制函数(无需修改,放在脚本末尾即可) ; 原理:通过 Windows API 向当前窗口发送指令,直接设置输入法状态 ; ------------------------------------------------------------------------- IME_Set(state) { try { hwnd := DllCall("GetForegroundWindow", "Ptr") if !hwnd return ; 获取默认 IME 窗口句柄 hIME := DllCall("Imm32\ImmGetDefaultIMEWnd", "Ptr", hwnd, "Ptr") if !hIME return ; WM_IME_CONTROL = 0x0283 ; IMC_SETOPENSTATUS = 0x006 DllCall("SendMessage", "Ptr", hIME, "UInt", 0x0283, "Ptr", 0x006, "Ptr", state) } } ``` |