在Webstrom和Vscode中实现vim 在normal模式时自动切换英文输入法

310 阅读1分钟

背景介绍

在编辑器中使用Vim时,经常需要在 Normal 模式和 Insert 模式之间切换。对于使用中文输入的用户来说,在退出 Insert 模式时常常忘记切换回英文输入法,导致 Normal 模式下的命令无法正确执行。本文将介绍如何使用 AutoHotkey 脚本来自动解决这个问题。

功能特性

  • 支持 VSCode 和 WebStorm 编辑器
  • 按下 ESC 键时自动切换为英文输入法
  • 适用于 Windows 系统

实现原理

通过 AutoHotkey 监听 ESC 按键事件,调用 Windows IME API 来切换输入法状态。脚本会检测当前激活的窗口是否为支持的编辑器,从而实现针对性的输入法切换。 支持WebstormVscode,用AutoHotKeys实现。

脚本代码(由AI实现)

;=====================================================================o
;                   VSCode Vim Normal模式自动切换英文输入法               ;|
;-----------------------------------o---------------------------------o

; IME状态获取/设置函数
IME_SET(SetSts, WinTitle="") {
    ifEqual WinTitle,, SetEnv,WinTitle,A
    WinGet,hWnd,ID,%WinTitle%
    DefaultIMEWnd := DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)
    DetectSave := A_DetectHiddenWindows
    DetectHiddenWindows,ON
    SendMessage 0x283, 0x006,SetSts,, ahk_id %DefaultIMEWnd%
    DetectHiddenWindows,%DetectSave%
    Return ErrorLevel
}

#IfWinActive ahk_exe Code.exe
~Esc::
    IME_SET(0)  ; 设置输入法状态为英文(0)
return
#IfWinActive
;---------------------------------------------------------------------o


;=====================================================================o
;                   WebStorm Vim Normal模式自动切换英文输入法               ;|
;-----------------------------------o---------------------------------o
#IfWinActive ahk_exe webstorm64.exe
~Esc::
    IME_SET(0)  ; 设置输入法状态为英文(0)
return
#IfWinActive
;---------------------------------------------------------------------o

使用方法

方式1、复制上面的代码自行通过AutoHotKeys创建脚本文件。

方式2、直接下载编译好的应用程序:密码:8r93