问题描述
在 Windows 系统下,如果使用 (Neo)Vim
编辑器,比如 WSL、VS Code 或者其它 IDE 的 VIM 功能,如果使用中文输入法,在由 Insert
模式进入 Normal
时,难免需要不停切换中英文输入法,有时则会忘记切换,导致在 Normal 模式下输入中文。
常见的一些解决方案包括:im-select 或者 fitcx。而这篇文章只需使用 Windows 平台下的一款自动化工具,借助 Windows 平台进行自动切换。
解决办法
1. 下载英文输入法
打开 系统设置,进入 时间和语言 –> 语言和区域,然后点击 添加语言 按钮。
找到 English(United States)
,点击 下一页 进行安装即可。
如果有其它语种的需求,安装对应语言即可。
安装完成后,进入 时间和语言 –> 输入 –> 高级键盘设置,勾选 允许我为每个窗口应用不同的输入法 即可。
2. 下载AutoHotKey
打开 AutoHotKey 官网下载相应软件,点击 Download Current Version
即可。
下载完成后,进行安装。安装包很小,仅仅 3MB。选择默认安装,或者自定义安装都可以。
自定义安装仅仅更改安装路径即可,其它使用默认即可。
3. 获取语言代码
新建一个 txt
文本文件,输入如下内容:
#z::
SetFormat, Integer, H
WinID:=WinActive("A")
ThreadID:=DllCall("GetWindowThreadProcessId", "UInt", WinID, "UInt", 0)
InputLocaleID:=DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt")
Clipboard:=InputLocaleID
MsgBox, %InputLocaleID%
return
完后后保存,将其后缀改为 .ahk
,然后双击运行,会自动进入系统托盘,如图所示:
如果要暂停脚本热键,只需右键点击相对应的脚本,然后选择 Suspend HotKey
即可。
脚本启动后,按下 Win + z
组合键,即可出现当前语言输入法的相对应代码。记录下来,然后切换到另一种语言的输入法,再次按下上述按键,查看其对应代码即可。
如图,为 中文(简体,中国) 输入法的对应代码:
如图,为 英语(美国) 输入法的对应代码:
其它的语言输入同样按照上述方法进行操作。
完成后,右键退出该脚本即可。
4. 编写脚本
同样新建一个 txt 文件,然后输入如下内容:
#IfWinActive ahk_exe WindowsTerminal.exe
:*:o::
{
sendinput,{o}
PostMessage, 0x50, 0, 0x8040804, , A
}
return
#If
#IfWinActive ahk_exe WindowsTerminal.exe
:*:a::
{
sendinput,{a}
PostMessage, 0x50, 0, 0x8040804, , A
}
return
#If
#IfWinActive ahk_exe WindowsTerminal.exe
:*:i::
{
sendinput,{i}
PostMessage, 0x50, 0, 0x8040804, , A
}
return
#If
#IfWinActive ahk_exe WindowsTerminal.exe
ESC::
{
sendinput,{Esc}
PostMessage, 0x50, 0, 0x4090409, , A
}
return
#If
其中,如果按下 o、i、a 就进入 vim 的 Insert 模式,切换为中文输入法。如果按下 Esc,就进入了 vim 的 Normal 模式,切换为英文输入法。
其中的 0x8040804
和 0x4090409
为之前所查看的输入法代码。
sendinput
表示将按下的键再输出出去,以响应 vim 操作。
#IfWinActive
表示检测特定的可执行文件进行触发。由于作者使用的是 WSL2,因此我设置的响应程序为 Windows Terminal
。如果读者使用的是 VS Code,那么可以将 WindowsTerminal.exe
替换为 Code.exe
。如果要响应其它软件,将其更换为相对应的可执行文件名称即可。
其它热键也可以自行设置。常用的特殊按键如下:
- !: Alt
- ^: Ctrl
- +: Shift
- &: 用于连接两个按键(含鼠标按键)合并成为一个自定义热键
- space: 空格键
- enter: 回车键
- Esc: Esc键
完成之后,将脚本后缀改为 .ahk
,启动即可。配置完成!
原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/270699.html