frankyzf
V2EX  ›  软件

Obsidian Vim 模式的输入法状态

  •  
  •   frankyzf · Jan 20 · 1260 views
    This topic created in 122 days ago, the information mentioned may be changed or developed.

    在 insert 模式输入中文后退出,回到 normal 模式,但这时输入法状态还是中文,跳转位置的时候会错乱,麻烦问下,一般这种情况应该怎么处理,让退回 normal 模式时自动切换成英文。先谢谢了。

    2 replies    2026-01-20 22:43:23 +08:00
    ZZZZone
        1
    ZZZZone  
       Jan 20
    我没用 Obsidian , 但是有相似场景。
    我的解法是用 Karabiner 改键:
    我把大写键改成 Esc + 切换英文
    左 Shift 切英文, 右 Shift 切中文。
    这样就做到了按大写键 进入 normal 模式同时自动切英文输入法。
    frankyzf
        2
    frankyzf  
    OP
       Jan 20   ❤️ 1
    谢谢你的建议,让 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)
    }
    }
    ```
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2804 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 12:08 · PVG 20:08 · LAX 05:08 · JFK 08:08
    ♥ Do have faith in what you're doing.