解决WSL、VS Code等Windows软件中Vim中文输入法的切换问题


问题描述

在 Windows 系统下,如果使用 (Neo)Vim 编辑器,比如 WSL、VS Code 或者其它 IDE 的 VIM 功能,如果使用中文输入法,在由 Insert 模式进入 Normal 时,难免需要不停切换中英文输入法,有时则会忘记切换,导致在 Normal 模式下输入中文。

常见的一些解决方案包括:im-select 或者 fitcx。而这篇文章只需使用 Windows 平台下的一款自动化工具,借助 Windows 平台进行自动切换。

解决办法

1. 下载英文输入法

打开 系统设置,进入 时间和语言 –> 语言和区域,然后点击 添加语言 按钮。

解决WSL、VS Code等Windows软件中Vim中文输入法的切换问题

找到 English(United States) ,点击 下一页 进行安装即可。

如果有其它语种的需求,安装对应语言即可。

解决WSL、VS Code等Windows软件中Vim中文输入法的切换问题

安装完成后,进入 时间和语言 –> 输入 –> 高级键盘设置,勾选 允许我为每个窗口应用不同的输入法 即可。

解决WSL、VS Code等Windows软件中Vim中文输入法的切换问题

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,然后双击运行,会自动进入系统托盘,如图所示:

image

如果要暂停脚本热键,只需右键点击相对应的脚本,然后选择 Suspend HotKey 即可。

脚本启动后,按下 Win + z 组合键,即可出现当前语言输入法的相对应代码。记录下来,然后切换到另一种语言的输入法,再次按下上述按键,查看其对应代码即可。

如图,为 中文(简体,中国) 输入法的对应代码:

image

如图,为 英语(美国) 输入法的对应代码:

image

其它的语言输入同样按照上述方法进行操作。

完成后,右键退出该脚本即可。

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 模式,切换为英文输入法。

其中的 0x80408040x4090409 为之前所查看的输入法代码。

sendinput 表示将按下的键再输出出去,以响应 vim 操作。

#IfWinActive 表示检测特定的可执行文件进行触发。由于作者使用的是 WSL2,因此我设置的响应程序为 Windows Terminal。如果读者使用的是 VS Code,那么可以将 WindowsTerminal.exe 替换为 Code.exe。如果要响应其它软件,将其更换为相对应的可执行文件名称即可。

其它热键也可以自行设置。常用的特殊按键如下:

  • !: Alt
  • ^: Ctrl
  • +: Shift
  • &: 用于连接两个按键(含鼠标按键)合并成为一个自定义热键
  • space: 空格键
  • enter: 回车键
  • Esc: Esc键

完成之后,将脚本后缀改为 .ahk,启动即可。配置完成!

原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/270698.html

(0)
上一篇 2022年6月29日
下一篇 2022年6月29日

相关推荐

发表回复

登录后才能评论