问题描述
今天发现一个重大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。
解决方案
一 转移单键压力,适应新的按键习惯 ✅
init.vim
和 .ideavimrc
配置文件中,设置 jk 映射 esc键,估算延迟 50 ms ,学会适应新的按键习惯。
inoremap jk <ESC>
vscode 的插件快捷键管理(vscode-neovim)比较特殊,应该这样写进 快捷键 JSON 文件(ctrl+p 搜索 shot)
// 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"},
二 脚本全局配置调参
❌ 查询开发文档,即使设置无延迟按键等选项,都不能降低延迟,只能增高。
三 削减按键功能
❌ Caps 增强功能太强大,还跨系统,砍掉是不值得的。