【AutoHotkey】一种适合敲代码&&可以用左手完成大部分功能的组合键设计

发布时间 2023-03-29 18:41:21作者: lzjgggg

故事一

使用键盘,需要两只手;
使用鼠标,还需要一只手;
总共三只手。

而你,只有两只手
所以,你需要第三只手(bushi)

所以,通常是左手使用键盘,而右手控制鼠标。
但Enter、BackSpace等一些常见按键经常迫使你使用右手去按。

故事二

敲代码时,你经常需要向前/向后移动文本
偶尔还要选定它们
这迫使你使用右手
移动大老远去按上下左右方向键移动文本

那你能怎么办呢?

使用AutoHotkey

脚本说明

原先的大写键,变为了快速按两下才能打开/关闭
相应的,大写+某个按键的组合可以起到不同的效果
如果要输入大写字母,建议更多的使用 Shift+字母 输入

常用的几个按键(这么写只是利于理解,并不完全正确,请细看代码):
大写+F 回车
大写+C Backspace

大写+I Backspace
大写+U/O 向左/向右选择一个词语
大写+H/J/K/L 向左/下/上/右移动(这样是为了和Vim相对应)
大写+P/分号 HOME/END
以上三个,如果带上左Alt,即 大写+左Alt+按键 还可以选定文本

这是我目前使用的ahk脚本

先干正事,上代码

;双击大写Caps Lock(切换大小写)
*capslock::
if Pressescount > 0
{
Pressescount += 1
return
}
Pressescount = 1
SetTimer,caps, 200
return
caps:
SetTimer,caps, off
if Pressescount = 2
{
SetCapslockState,% GetKeyState("Capslock", "T") ? "off" : "on"
}
Pressescount = 0
return

;大写 + 键盘HJKL移动上下左右(加Alt可以选定)
CapsLock & h::
if GetKeyState("LAlt", "P")
SendInput, +{Left}
else
SendInput, {Left}
Return
CapsLock & l::
if GetKeyState("LAlt", "P")
SendInput, +{right}
else
SendInput, {right}
Return
CapsLock & k::
if GetKeyState("LAlt", "P")
SendInput, +{up}
else
SendInput, {up}
Return
CapsLock & j::
if GetKeyState("LAlt", "P")
SendInput, +{down}
else
SendInput, {down}
Return

;大写 + 键盘UO移动单词(加Alt可以选定)
CapsLock & u::
if GetKeyState("LAlt", "P")
SendInput, +^{Left}
else
SendInput, ^{Left}
Return
CapsLock & o::
if GetKeyState("LAlt", "P")
SendInput, +^{Right}
else
SendInput, ^{Right}
Return

;大写+p;回到头尾
CapsLock & p::SendInput, {Home}
CapsLock & `;::SendInput, {End}

;Alt+p;选定头尾
LAlt & p::SendInput,+{Home}
LAlt & `;::SendInput,+{End}

;大写 + 键盘I退格
CapsLock & i::SendInput, {Backspace}

;[对于按键不足的分体键盘的额外按键补充]
;大写 + N(}) / M({) / ,([) / .(])
CapsLock & n::SendInput, {}}
CapsLock & m::SendInput, {{}
CapsLock & ,::SendInput, [
CapsLock & .::SendInput, ]

;[对于按键不足的分体键盘的额外按键补充]
;大写 + /(符号~) / "(符号`)
CapsLock & /::SendInput, ~
CapsLock & '::SendInput, ``


;大写 + WASD控制鼠标移动[+左Alt(键盘上下左右)]
CapsLock & a::
if GetKeyState("LAlt", "P")
SendInput, {left}
else
MouseMove, -21,0,0,R
Return
CapsLock & d::
if GetKeyState("LAlt", "P")
SendInput, {right}
else
MouseMove, 21,0,0,R
Return
CapsLock & s::
if GetKeyState("LAlt", "P")
SendInput, {down}
else
MouseMove, 0,21,0,R
Return
CapsLock & w::
if GetKeyState("LAlt", "P")
SendInput, {up}
else
MouseMove, 0,-21,0,R
Return

;大写 + 鼠标左(e)、右键(q)
CapsLock & e::LButton
CapsLock & q::RButton

;左Alt+ 2关闭当前窗口(alt+F4)
LAlt & 2::SendInput, !{F4}

;大写 + 空格 打开GOOGLE(如果你不能访问,可以把它换成Bing或者别的什么)
CapsLock & space::Run https://www.google.com/

;大写 + f 回车Enter
CapsLock & f::SendInput, {Enter}

;大写 + 标签顺序(g)逆序(r)切换(常用于浏览器标签页,或者是QQ的聊天会话切换)
CapsLock & g::^Tab
CapsLock & r::^+Tab

;大写 + Z(idea中下移代码) / X(idea中上移代码)
;这里的idea是一种JAVA的IDE
CapsLock & z::SendInput, ^+{down}
CapsLock & x::SendInput, ^+{up}

;大写 + C(Backspace)
CapsLock & c::SendInput,{Backspace}

;大写 + B(idea中去before的跳转点) / V(idea中去after的跳转点)
CapsLock & v::SendInput,^!{left}
CapsLock & b::SendInput,^!{right}


;F12(大写+t)和F11(大写+alt+t)(浏览器调试代码时,很常用)
CapsLock & t::
if GetKeyState("LAlt", "P")
SendInput, {F11}
else
SendInput, {F12}
Return

;F1(大写+1)(对特殊键盘使用,如果你不是特殊键盘,可以把注释换成它)
CapsLock & 1::SendInput, {F1}

;快速注释(大写+4)
CapsLock & 4::SendInput, ^/

;快速选择 y(大写+2) / n(大写+3)(YN字母经常使用,但都要用右手去按,移到左手会方便很多)
CapsLock & 2::y
CapsLock & 3::n

这套组合键我调整了也有两三年了,应该不需要太多调整了
注:
如果你不习惯Vim的上下左右
可以使用IKJL作为上下左右,H作为删除