问题描述

今天发现一个重大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 增强功能太强大,还跨系统,砍掉是不值得的。

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

  1. Linux工作站开机后鼠标很卡,(已解决)开机后鼠标延迟卡顿1分钟后就没事了是什么情况...

    本帖最后由 mushizhizhi 于 2020-1-2 15:03 编辑 华硕B360M-K i5 8400 uhd630string>                            ...

  2. 【已解决】Java “错误:编码GBK 的不可映射字符”

    [已解决]Java "错误:编码GBK 的不可映射字符" 正文 import java.awt.*; import java.awt.datatransfer.Clipboard; ...

  3. 解决vim中ESC按键延迟问题

    解决vim中ESC按键延迟问题 ESC按键存在延迟有多种可能: vim按键映射使用了<ESC>组合按键,按下<ESC>后,vim在等待后续按键按下.一般情况下 我们没有必要映射 ...

  4. Oracle 12c 自带的SQL Developer新建连接出现的问题:Got minus one from a read call,connect lapse 60018 ms,....(已解决)

    Oracle 12c 自带的SQL Developer新建连接出现的问题:Got minus one from a read call,connect lapse 60018 ms,-(已解决) 以上 ...

  5. Druid monitor中SQL监控显示不出数据(已解决)

    Druid monitor中SQL监控显示不出数据(已解决) 检查方法一: 查看Druid monitor中的数据源是否可访问 如下图则数据源可访问: 这时检查application.yaml中的配置 ...

  6. 【网络教程】群晖中如何安装甜糖,手把手教您Docker安装甜糖,如何解决甜糖安装使用中遇到的问题(已解决)

    文章目录 群晖安装Docker 启用open switch Docker创建桥接网卡 创建Arm环境 创建甜糖 常见问题 甜糖提示离线,或者无网络等问题 手机搜索不到,如何生成二维码 群晖重启后,甜糖 ...

  7. CC送人气票显示服务器错误,[已解决]用户尝试创建新帐户时出现“服务器错误” - Magento 1.7...

    当用户尝试创建一个新的帐户,他们填写自己的信息上/客户/帐号/创建页面就好了,然后当他们点击提交,他们得到这500错误: The website encountered an error while ...

  8. 已解决微软Office2016 Excel卡顿\缓慢、打开第二个文件加载很慢问题(亲测有效)

    已解决微软Office2016 Excel卡顿\缓慢.打开第二个文件加载很慢问题(亲测有效) 文章目录 问题描述 问题分析 解决方法1 解决方法2 解决方法3 1) 修改基本设置 2)修改配置文件 千 ...

  9. Ubuntu开机【OK】 Started LSBautomatic crash report generation卡死--已解决

    Ubuntu开机[OK] Started LSB:automatic crash report generation卡死–已解决 [OK] Started Disk Manager [OK]Start ...

最新文章

  1. 华为+长安研发芯片?长安蔚来更名“阿维塔科技”
  2. 万物生长,万物互联的时代来了
  3. SpringBatch批处理框架入门(一)
  4. C++ 常用查找算法
  5. 进阶攻略|前端最全的框架总结
  6. Python 03 基础作业
  7. A - Super Jumping! Jumping! Jumping!
  8. 区块链只能算半个“信任机器”,隐私计算才是真正的信任机器?
  9. UVA10168 Summation of Four Primes【筛选法】
  10. jsp页面输出excel文件乱码解决方案
  11. Auto Layout详解
  12. 基于朴素贝叶斯的鸢尾花数据集分类
  13. 微信游戏小程序源码-合成大西瓜小游戏(合成版)源码 附带流量主功能
  14. w7系统里没有iis信息服务器,win7系统控制面板的管理选项没有“internet信息服务(IIS)管理器”的解决方法...
  15. matlab如何进行图像读取,matlab如何读取图像
  16. Kaggle首战拿金牌总结!
  17. HTTP POST GET
  18. asp.net新闻采集(wyz)
  19. 高级Magento模型 EAV
  20. 小程序更换云服务器和域名完全攻略

热门文章

  1. 【HTML】有序列表和无序列表
  2. 百度百科词条编辑为什么通过不了,如何修改百度百科词条才能成功
  3. 【转】熟练掌握 MyBatis-Plus,这一篇就够了!
  4. c语言gets长度溢出,gets和fgets 注意溢出的情况
  5. C/C++项目:程序员的浪漫——流星雨表白程序教程
  6. 固定资产租赁的会计处理
  7. 打印机核心部件——热打印头(TPH)分析
  8. ubuntu20.04安装XMind提示缺少libwebkitgtk-1.0-0
  9. c#实现动态加载Dll
  10. 共轭复数 傅里叶变换共轭对称