[已解决] AHK 映射 ESC 延迟 500 ms 的严重问题

文章描述了一个用户发现CapsLock键通过AHK脚本映射为Esc键后,在vim环境中存在显著延迟的问题。通过实验分析,确定延迟是由AHK脚本中的扩展功能,特别是输入法管家功能引起。提出了两种解决方案:简化脚本或改变VIM键映射设置,以减少延迟并提高效率。
摘要由CSDN通过智能技术生成

问题描述

今天发现一个重大bug,我竟然用了一年多都不知道!

CapsLock::Esc 

我的 ahk 脚本将 capslock 映射为 esc,但这在vim环境中,估算响应 500ms。

也就说按下 caps 键,还要等一会,才进入normal模式

如果直接按 esc 键,延迟50ms,这两者对比,差异感觉很明显。

测试方法

实验一 测试环境因素影响。分别在 Idea、vscode、终端 nvim 测试以下步骤,做对照实验。

  • 快速循环按 a + Caps 结果都偶尔出现意外插入字母a
  • 快速循环按 a + Esc 结果都不会出现意外插入字母a。

推测原因 :caps 按键经过 AHK 脚本处理时,可能加载了其他功能,最后映射到 Esc ,这个过程估算 500ms 。

实验二 测试拓展功能影响。准备两个脚本,一个只有一行映射命令(如上),另一个拓展了很多功能的 CapslockMagic。重复实验一的步骤。

结论 :结果单行命令脚本,延迟在 50 ms 内。这说明, CapslockMagic 脚本中,大量的 Caps & * 以及 ^! Caps 相关按键拓展功能,增加加载时间,才导致明显的延迟 500 ms。 通过排查,找到了根本原因

; 输入法管家
static esc() {
    ; 如果正在打拼音,就不切换输入法 (这个方法扫描三次屏幕查找图片,注释后,延迟明显降低至50ms)
    if IME.isNotTypingPinYin() {
        IME.set("EN")
    }
    ; 如果先返回,图片消失了,就检测不到了,所以最后返回
    Send "{Esc}"
}

解决方案(任选其一)

A 削减压力,砍掉功能 ✅

; 输入法管家
static esc() {
    ; 如果先返回,砍掉耗时的图片功能
    Send "{Esc}"
    ; 异步调用,提升速度
    SetTimer () => IME.set("EN"), -500
}

B1 分摊压力,功能解耦 AHK

  • caps -> esc
  • ; + j -> esc + IME.set(“EN”) (免检测)
^J:: Send "{blind}{text};"    ; 中文分号,大人什么都要
+J:: Send "{blind}{text};"     ; 英文分号,常用
*J:: IDE.esc()			       ; 为了 VIM

B2 分摊压力,另辟蹊径 VIM

init.vim.ideavimrc 配置文件中,设置 jk 映射 esc键,估算延迟 50 ms ,学会适应新的按键习惯。

inoremap jk <ESC>

vscode 的插件快捷键管理(vscode-neovim)比较特殊,应该这样写进 快捷键 JSON 文件(ctrl+p 搜索 shot)。缺点是vscode 经常失灵, j 键按了有反应,但打不出字。

  // vscode 特殊写法类似 inoremap jk <ESC> ,以下风格二选一
  {
    "command": "vscode-neovim.compositeEscape1",
    "key": "j",
    "when": "editorTextFocus && neovim.ctrlKeysInsert && neovim.init && neovim.mode == 'insert'",
    "args": "j"
  },
  {
    "command": "vscode-neovim.escape",
    "key": "j k",
    "when": "editorTextFocus && neovim.ctrlKeysInsert && neovim.init && neovim.mode == 'insert'",
    "args": "jk"
  },

C 脚本全局配置调参

❌ 查询开发文档,即使设置无延迟按键等选项,都不能降低延迟,只能增高。

D 削减按键功能

❌ Caps 增强功能太强大,还跨系统,砍掉是不值得的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值