V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
frankyzf
V2EX  ›  软件

Obsidian Vim 模式的输入法状态

  •  
  •   frankyzf · 2 天前 · 344 次点击

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

    2 条回复    2026-01-20 22:43:23 +08:00
    ZZZZone
        1
    ZZZZone  
       2 天前
    我没用 Obsidian , 但是有相似场景。
    我的解法是用 Karabiner 改键:
    我把大写键改成 Esc + 切换英文
    左 Shift 切英文, 右 Shift 切中文。
    这样就做到了按大写键 进入 normal 模式同时自动切英文输入法。
    frankyzf
        2
    frankyzf  
    OP
       2 天前
    谢谢你的建议,让 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)
    }
    }
    ```
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5305 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 01:32 · PVG 09:32 · LAX 17:32 · JFK 20:32
    ♥ Do have faith in what you're doing.