经常使用 vim 的人,有可能使用下面的 mapping 回到 normal 模式:
inoremap jk <esc>
唯一不爽的是,每次按 j 的时候,vim 都会等待最多 timeoutlen 毫秒(默认是 1000 ms ),来判断用户是想输入 j 还是想输入 jk 跳出 insert 模式,所以输入 j 的时候,会有延迟感,有点讨厌。当然可以通过降低 timeoutlen 的值来减少这种延迟,但是 timeoutlen 是一个全局选项,如果减少 timeoutlen 会导致有的组合键来不及按下。
我写一个插件 better-escape.vim,专门针对跳出 insert mode 这种场景,不需要更改 timeoutlen 选项即可实现按下 j 无延迟感,快速按下 jk 即可跳出 insert 模式,同时也支持多个离开 insert mode 的快捷键,有这种需求的 Vimmer 可以试用。
1
seyoatda 2020-12-28 18:16:46 +08:00
所以你的方案实现的思路是怎样的呢?可以简单说说吗?
|
2
jdhao OP @seyoatda 按下 k 的时候,检测少一个字符是否是 j,并且判断两者按下时间之差,小于阈值就认为是 esc,大于阈值认为用户想输入 jk 。
|
4
Les1ie 2020-12-28 19:13:32 +08:00
如果我从系统剪切板粘贴一个字符串进去,比如 asdfghjkl 到 vim 中 这里的 jk 会被识别为想要退出么?
|
5
fps23dot9999 2020-12-28 19:17:15 +08:00
应该用脚踏板
|
7
jdhao OP @fps23dot9999 脚踏板也不错,或者一个可以锤的按键作为 esc 也不错。
|
8
vision1900 2020-12-28 20:40:22 +08:00
The abbreviation JK stands for joshi kōsei (女子高生) and means "female high school student".
- 维基百科对 JK 的解释 |
9
wd 2020-12-28 20:45:17 +08:00 via iPhone
我直接用右 shift 退出
|
10
billlee 2020-12-28 21:38:16 +08:00
我直接把 caps lock 和 esc 对换了
|
11
jdhao OP @billlee 也可以,但是需要第三方工具,不方便维护,我想要跨平台的通用方案,最好不要每个平台都配置一遍。
|
12
weifengzi2009 2020-12-28 22:38:05 +08:00
我都是直接用 Ctrl + [代替 Esc 。。不需任何设置
|
13
JJstyle 2020-12-28 22:55:11 +08:00 via iPhone
纯疑问,本来按一个 esc 键就能退出,为啥要按两个键 jk 呢?
|
14
IgniteWhite 2020-12-28 22:58:29 +08:00 via iPhone
@JJstyle 这样做的理由显然是手指不用离开默认行。
|
15
jdhao OP @weifengzi2009 嗯,每个人习惯不同,对于我来说,ctrl-[ 不便敲击,我的手需要厉害基准键去敲击 ctrl-[,jk 正好就在手指下面,敲击更加方便迅速。
|
17
lancelock 2020-12-29 11:03:25 +08:00 via iPhone
一般用 ctrl o
|
19
dragondove 2020-12-29 13:47:06 +08:00
@jdhao 跨平台确实艰难,win 下可以用 autohotkey 或者 powertoys 来替换 esc 和 cpas 。linux 下比较麻烦,一般都是在 X11 环境下 xmodmap 来改,我为了通用性直接改 scancode 到 keycode 的映射。更加好的方案是直接改键盘本身,但是我对硬件一窍不通,没法玩。
|
20
jdhao OP @dragondove 机械键盘有的可以编程更改按键功能,macOS 下有 Karabiner 也可以更改按键功能,不需要太多硬件知识。
|
21
weifengzi2009 2020-12-30 11:52:42 +08:00
@jdhao #15 嗯嗯,感觉用 jk 的人还挺多的。
|
22
atomduanvex 2021-02-26 14:55:16 +08:00
拍 ESC 是使用 vi 的灵魂所在
|