<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>AutoHotKey on Linkzz&#39;s Blog</title>
    <link>https://linkzz.org/tags/autohotkey/</link>
    <description>Recent content in AutoHotKey on Linkzz&#39;s Blog</description>
    <image>
      <title>Linkzz&#39;s Blog</title>
      <url>https://linkzz.org/logo.png</url>
      <link>https://linkzz.org/logo.png</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Tue, 05 Sep 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://linkzz.org/tags/autohotkey/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>基于AutoHotKey的windows平台Vim输入法切换方案</title>
      <link>https://linkzz.org/posts/autohotkey-im-switch/</link>
      <pubDate>Tue, 05 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://linkzz.org/posts/autohotkey-im-switch/</guid>
      <description>&lt;p&gt;众所周知，在中文环境下使用 vim 一直会有中英文输入法切换的烦恼，社区也有一些方案解决，如 AutoHotKey 脚本 &lt;code&gt;im-select&lt;/code&gt; 插件等，今天提供一种基于屏幕颜色的方案来实现按下 &lt;code&gt;ESC&lt;/code&gt; 键切换输 入法的方案，下面是效果展示：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.linkzz.eu.org/main/images/2023/09/6521c2a2ace052053b9608ebea643f6f.gif&#34; alt=&#34;output.gif&#34;  /&gt;
&lt;/p&gt;
&lt;h2 id=&#34;window-spy&#34;&gt;Window Spy&lt;/h2&gt;
&lt;p&gt;我目前安装的是&lt;a href=&#34;https://www.autohotkey.com/docs/v2/&#34;&gt;AutoHotKey v2.0.2&lt;/a&gt;版本，使用其提供的 Window Spy 功能，我们可以方便的查看各个窗口的信息，鼠标的信息等，今天我们要实现的版本思路就是基于判断屏幕指定坐标处的十六进制颜色来判断当前是处于什么输入法环境下。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.linkzz.eu.org/main/images/2023/09/48d21a2cade00018cbcec330defb00da.png&#34; alt=&#34;image.png&#34;  /&gt;
&lt;/p&gt;
&lt;p&gt;如上图，因为截图无法截取鼠标位置，我的鼠标置于图中“中”字的下部分，切换到英文的时候为大写字母&amp;quot;A&amp;quot;，屏幕相同的位置是没有“中”字下部分的颜色的，而 Windows 系统输入法状态指示的图标相对来说是比较固定的，故以此来判断当前输入法的环境是可行的，看官自己设置的时候使用 window spy 来获取这个坐标即可。&lt;/p&gt;
&lt;h2 id=&#34;autohotkey-脚本&#34;&gt;AutoHotKey 脚本&lt;/h2&gt;
&lt;p&gt;既然有了方案就可以着手实现了，我们使用 V2 版本的语法来完成，并将键盘上不常用的 &lt;code&gt;CapsLock&lt;/code&gt; 键映射为 &lt;code&gt;ESC&lt;/code&gt; 键，下面是完整的脚本：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-autohotkey&#34; data-lang=&#34;autohotkey&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;#Requires&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AutoHotkey&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;; 获取坐标的模式，相对于屏幕&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;CoordMode&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Pixel&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Screen&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;CoordMode&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Mouse&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Screen&amp;#34;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;; 应用vim模式的窗口组&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;GroupAdd&lt;/span&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;VimMode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;ahk_exe WindowsTerminal.exe&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;GroupAdd&lt;/span&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;VimMode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;ahk_exe Code.exe&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;GroupAdd&lt;/span&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;VimMode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;ahk_exe Obsidian.exe&amp;#34;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;; 退出vim模式&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VimEsc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;nb&#34;&gt;Send&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;{Esc}&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PixelGetColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1985&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1422&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;0x464646&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;Send&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;{Shift}&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;#HotIf&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;WinActive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;ahk_group VimMode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;ESC::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VimEsc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;CapsLock::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VimEsc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;#HotIf&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上代码中将需要生效的应用添加到 &lt;code&gt;VimMode&lt;/code&gt; 组，如果有更多需要应用 Vim 模式的应用，通过 window spy 获取其 ahk_exe，通过&lt;code&gt;GroupAdd &amp;quot;VimMode&amp;quot;, &amp;quot;ahk_exe {name}&amp;quot;&lt;/code&gt; 将其加入组中即可，十六进制颜色和坐标也根据需要修改为你自己的，Send 后面的内容也要修改你输入法的中英文切换的快捷键，在这里我的是 &lt;code&gt;Shift&lt;/code&gt; 键，之后运行脚本即可实现“按下 &lt;code&gt;Esc&lt;/code&gt; 或者&lt;code&gt;CapsLock&lt;/code&gt; 自动切换为英文输入法” 的功能。&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>

