键盘映射设计求教:Vim模式下的快捷键映射
关于键盘映射设计的求教
笔者在这几个月接触vim后便一发不可收拾(懒人化严重,浑身上下只有手指可以动了/(ㄒoㄒ)/)。开始将esc和ctrl映射到alt,后来嫌弃方向键太远,就将方向键映射到了hjkl。最近更是开始嫌弃回车键和退格键位置的偏僻,就将其分别映射到了space+j和space+l。以下是我的设计的ahk快捷键:
- 方向键 → hjkl和RAlt点按为esc、按住为ctrl
Requires AutoHotkey v2.
SingleInstance Force
; Vim模式
; 将长按右Alt键映射为RCtrl,单点即为Esc
; Casplock + hjkl, 即为方向键
; 将RCtrl + Capslock映射为退格键, 即Backspace
SetCapsLockState "AlwaysOff"
CapsLock & h:: SendInput('{Blind}{Left}')
CapsLock & j:: SendInput('{Blind}{Down}')
CapsLock & k:: SendInput('{Blind}{Up}')
CapsLock & l:: SendInput('{Blind}{Right}')
vimMode_g_RAltPressedTime := 0
vimMode_g_AbortSendEsc := false
vimMode_g_CtrlRepeatDetected := false
RAlt:: {
global
if (vimMode_g_CtrlRepeatDetected) {
return
}
Send('{RCtrl down}')
vimMode_g_RAltPressedTime := A_TickCount
vimMode_g_AbortSendEsc := false
vimMode_g_CtrlRepeatDetected := true
}
RAlt Up:: {
global
Send('{RCtrl up}')
vimMode_g_CtrlRepeatDetected := false
if (vimMode_g_AbortSendEsc) {
return
}
current_time := A_TickCount
time_elapsed := current_time - vimMode_g_RAltPressedTime
if (time_elapsed <= 190) {
SendInput('{Esc}')
}
}
~*^a::
~*^b::
~*^c::
~*^d::
~*^e::
~*^f::
~*^g::
~*^h::
~*^i::
~*^j::
~*^k::
~*^l
~*^m
~*^n
~*^o
~*^p
~*^q
~*^r
~*^s
~*^t
~*^u
~*^v
~*^w
~*^x
~*^y
~*^z
~*^1
~*^2
~*^3
~*^4
~*^5
~*^6
~*^7
~*^8
~*^9
~*^0
~*^Space
~*^Backspace
~*^Delete
~*^Insert
~*^Home
~*^End
~*^PgUp
~*^PgDn
~*^Enter
~*^,.
~*^.
~*^/
~*^;.
~*^'.
~*^[.
~*^].
~*^
~*^-
~*^=.
~*^`
~*^F1
~*^F2
~*^F3
~*^F4
~*^F5
~*^F6
~*^F7
~*^F8
~*^F9
~*^F10
~*^F11
~*^F12: {
global
vimMode_g_AbortSendEsc := true
}
- 绑在空格上的快捷键
Requires AutoHotkey v2
#SingleInstance Force
; 判断在按住 Space 期间是否按过其他键
global SpaceMapping_SpaceUsedAsModifier := false
#HotIf GetKeyState("Space", "P")
*j:: {
; Space + j 映射为退格
global SpaceMapping_SpaceUsedAsModifier := true
SendInput("{BackSpace}")
}
*l:: {
; Space + l 映射为回车
global SpaceMapping_SpaceUsedAsModifier := true
SendInput("{Enter}")
}
#HotIf
$Space:: {
global SpaceMapping_SpaceUsedAsModifier := false<br>
; 长按模式的延迟时间<br> SpaceMapping_SpaceLongPressDelay := 0.2<br> if (KeyWait("Space", "T" . SpaceMapping_SpaceLongPressDelay)) {
if (!SpaceMapping_SpaceUsedAsModifier) {
SendInput("{Space}")<br> }
} else {
if (!SpaceMapping_SpaceUsedAsModifier) {
while GetKeyState("Space", "P") {
if (SpaceMapping_SpaceUsedAsModifier)<br> break<br> SendInput("{Space}")<br> Sleep(50)<br> }
}
}}
先说下我的键盘格局。我的键盘是拯救者系列的布局,这个布局我用的非常舒服,alt靠中意味着可以让最有力的大拇指分担更多辅助键的任务。图如下
可以看到,用的比较频繁的退格和回车居然分布在里手指自然摆放位置这么远的地方,简直无法忍受。不是我喜欢的键位,直接修改。就绑到了space+j或+l上,但是由于AHK的问题,导致space的输入相对于键按下事件会有一定程度的滞后。在中文输入中,空格输入频率较低,这不会造成什么麻烦。但是在英文文本输入就截然相反,越高的wpm(我自己在monkeytype上测试是50wpm以上 :tieba_006:)就越容易造成输入序列的错位。
Above All,在这里想向大伙请教下这个键盘快捷键映射设计的问题,欢迎各位佬友分享自己的想法和自己经验的键盘模式。同时也欢迎广大佬试用我的AHK程序,并提出您宝贵的意见 :tieba_095:。
评论已关闭