[插件分享] better-escape.vim:无痛跳出 Vim insert 模式。

2020-12-28 17:19:19 +08:00
 jdhao

经常使用 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 可以试用。

3299 次点击
所在节点    Vim
22 条回复
seyoatda
2020-12-28 18:16:46 +08:00
所以你的方案实现的思路是怎样的呢?可以简单说说吗?
jdhao
2020-12-28 18:21:15 +08:00
@seyoatda 按下 k 的时候,检测少一个字符是否是 j,并且判断两者按下时间之差,小于阈值就认为是 esc,大于阈值认为用户想输入 jk 。
jdhao
2020-12-28 18:21:41 +08:00
@jdhao 少一个 --> 前一个
Les1ie
2020-12-28 19:13:32 +08:00
如果我从系统剪切板粘贴一个字符串进去,比如 asdfghjkl 到 vim 中 这里的 jk 会被识别为想要退出么?
fps23dot9999
2020-12-28 19:17:15 +08:00
应该用脚踏板
jdhao
2020-12-28 20:15:37 +08:00
@Les1ie 不会触发退出,粘贴字符,和用户输入行为不一样。
jdhao
2020-12-28 20:16:06 +08:00
@fps23dot9999 脚踏板也不错,或者一个可以锤的按键作为 esc 也不错。
vision1900
2020-12-28 20:40:22 +08:00
The abbreviation JK stands for joshi kōsei (女子高生) and means "female high school student".
- 维基百科对 JK 的解释
wd
2020-12-28 20:45:17 +08:00
我直接用右 shift 退出
billlee
2020-12-28 21:38:16 +08:00
我直接把 caps lock 和 esc 对换了
jdhao
2020-12-28 21:44:04 +08:00
@billlee 也可以,但是需要第三方工具,不方便维护,我想要跨平台的通用方案,最好不要每个平台都配置一遍。
weifengzi2009
2020-12-28 22:38:05 +08:00
我都是直接用 Ctrl + [代替 Esc 。。不需任何设置
JJstyle
2020-12-28 22:55:11 +08:00
纯疑问,本来按一个 esc 键就能退出,为啥要按两个键 jk 呢?
IgniteWhite
2020-12-28 22:58:29 +08:00
@JJstyle 这样做的理由显然是手指不用离开默认行。
jdhao
2020-12-28 23:04:17 +08:00
@weifengzi2009 嗯,每个人习惯不同,对于我来说,ctrl-[ 不便敲击,我的手需要厉害基准键去敲击 ctrl-[,jk 正好就在手指下面,敲击更加方便迅速。
jdhao
2020-12-28 23:06:45 +08:00
@JJstyle 按 esc 左手要离开键盘,反而不方便
lancelock
2020-12-29 11:03:25 +08:00
一般用 ctrl o
jdhao
2020-12-29 11:14:05 +08:00
@lancelock 把 ctrl-o 映射为 esc? ctrl-o 本身在 insert 模式也是有作用的。
dragondove
2020-12-29 13:47:06 +08:00
@jdhao 跨平台确实艰难,win 下可以用 autohotkey 或者 powertoys 来替换 esc 和 cpas 。linux 下比较麻烦,一般都是在 X11 环境下 xmodmap 来改,我为了通用性直接改 scancode 到 keycode 的映射。更加好的方案是直接改键盘本身,但是我对硬件一窍不通,没法玩。
jdhao
2020-12-29 14:20:47 +08:00
@dragondove 机械键盘有的可以编程更改按键功能,macOS 下有 Karabiner 也可以更改按键功能,不需要太多硬件知识。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/739706

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX