本文主要是介绍用AutoHotKey设置程序员喜欢的键位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
昨天看AutoHotKey的资料,自己写了一个脚本,但今天发现一个更好的,大家可以试试。
最下面的脚本是自己在这个脚本基础上修改的,加入了以下功能:
- 复制:Caps+c
- 粘贴:Caps+v
- 保存:Caps+s (实际上就是把 Ctrl+s 映射成了 Caps+s)
- 删除:Caps+d (实际上就是把 Ctrl+d 映射成了 Caps+d,这个删除功能主要是用在Eclipse里的)
--------------------------------------------- 以下是原文 --------------------------------------------
http://ahk8.com/thread-5792.html
- 功能:自定义嵌入脚本的配置文件配置映射,使用触发键临时打开映射或锁定打开映射。其他修饰键可同时使用(如,Ctrl、Shift)。
键区映射 特性(较CapsLock & j) - 此演示实现:编辑键区部分按键映射至主键区。编辑键区的上/下/左/右/Home/End/PgUp/PgDw,映射为主键区i/k/j/l/u/o/y/h。
如, - 场景:
- 减少右手在主键区与编辑键区来回切换的消耗;
- 减少切换至新键区时的对齐|定位操作。
- 使用模式:
- 临时映射:按住修饰键,映射保持,直至释放修饰键。
- 锁定映射:无需按住修饰键,映射保持,直至关闭映射。
- 使用方法:
- 修饰键取CapsLock。由左手操作,左右手同步配合,更高效。
- 临时映射:按住修饰键,点击映射按钮。如,普通组合键CapsLock+j
- 锁定映射:
- 开启方式:在临时映射中,先于按下的映射按钮释放修饰键。如,j & CapsLock up。
- 关闭映射:映射按钮未被按下时,单击修饰键。
- 代码:
额外包含:- m/,/.至BS/Delete/Enter的映射。
- 6~9: ^{Left}~+^{Right}(便于单词跳转/选择)
- 自定义函数做响应(参见25#@gcy001 建议)
- 详见脚本中的配置。
代码: (全选)
;RobertL
;http://ahk8.com/thread-5792.html
;键区映射 V2.4
;=============用户配置部分=============
Map:={Modifier:"CapsLock" ;指定修饰键
,TimeOut:0.4 ;当修饰键为普通按键时有效,单位s
;指定映射键:
,i:"up" ,k:"down" ,j:"left" ,l:"right"
,u:"Home" ,o:"End"
,y:"PgUp" ,h:"PgDn"
,M:"BS", ",":"Del" ,".":"Enter"
,6:" ^{Left}",7:" ^{Right}",8:" +^{Left}",9:" +^{Right}"
,a:func("yourFunction")}
yourFunction(){
Msgbox your Function
}
;=============自动执行段=============;{
Hotkey,If
modifier:=ObjDelete(Map,"Modifier")
timeOut:=ObjDelete(Map,"TimeOut")
;~ if(nomarlKeyAsModifier:=(1=StrLen(modifier)))
;~ Hotkey,$%modifier%, ModifierKeyDown, On
Hotkey,~*$%modifier% Up, ModifierKeyUp, On
Hotkey,If, IsMapOn()
for sourceKey in Map{
Hotkey,*%sourceKey%, SourceKeyDown
Hotkey,*%sourceKey% Up, SourceKeyUp
}
Hotkey,If
;===================================;}
IsMapOn(){
global IsMapOn,modifier,IsMapped
IsMapOn:=IsMapped:=(IsMapOn | (GetKeyState(modifier,"P") && (IsMapOn:=true)))
return IsMapOn
}
SourceKeyDown(){
global Map,waiting
targetKey:=Map[source:=SubStr(A_ThisHotkey,2)]
if isfunc(targetKey){
%targetKey%()
}if(" "!=SubStr(targetKey,1,1)){
if waiting
Send % source
SendLevel 1
SetKeyDelay -1
Send {Blind}{%targetKey% DownTemp}
}else {
Send % SubStr(targetKey,2)
}
return
}
SourceKeyUp(){
global Map
targetKey:=Map[SubStr(A_ThisHotkey,2,-3)]
if(" "!=SubStr(targetKey,1,1)){
SendLevel 1
SetKeyDelay -1
Send {Blind}{%targetKey% Up}
}
return
}
ModifierKeyUp(){
global Map,modifier,IsMapOn,nomarlKeyAsModifier
if(IsMapOn && modifier="CapsLock")
SetCapsLockState,% GetKeyState(modifier,"T")?"Off":"On"
for sourceKey in Map
if GetKeyState(sourceKey,"P")
return
IsMapOn:=false
if(nomarlKeyAsModifier)
Hotkey,$%modifier%, ModifierKeyDown, On
}
ModifierKeyDown(){
global Map,IsMapOn,modifier,timeOut,IsMapped,waiting
if(IsMapOn)
return
waiting:=true
Input, _input, L1 T%timeOut%
waiting:=false
if(ErrorLevel="MAX"){
if(_input=modifier){
Hotkey,$%modifier%, ModifierKeyDown, Off
Send {Blind}{%modifier% DownTemp}
}else if(Map[_input]){
KeyWait, %modifier%
IsMapped:=false
}else
Send {Blind}{%modifier%}{%_input%}
}else if(ErrorLevel="Timeout"){
Hotkey,$%modifier%, ModifierKeyDown, Off
Send {Blind}{%modifier% DownTemp}
}else
throw Exception("ModifierKeyDown:Un-used ErrorLevel=" ErrorLevel,-1)
}
#If IsMapOn()
#If折叠块: V2.3
- 参见:热键 & 重映射按键
- 自用功能,摘取出来,记录,分享。
----------------------------------------------------------- 以下是在原来基础上,加入自己的方法 ---------------------------------------------------------------------------
;RobertL
;http://ahk8.com/thread-5792.html
;键区映射 V2.4
;=============用户配置部分=============
Map:={Modifier:"CapsLock" ;指定修饰键
,TimeOut:0.4 ;当修饰键为普通按键时有效,单位s
;指定映射键:
,i:"up" ,k:"down" ,j:"left" ,l:"right"
,u:"Home" ,o:"End"
,y:"PgUp" ,h:"PgDn"
,M:"BS", ",":"Del" ,".":"Enter"
,6:" ^{Left}",7:" ^{Right}",8:" +^{Left}",9:" +^{Right}"
,c:func("ctrl_c")
,v:func("ctrl_v")
,s:func("ctrl_s")
,d:func("ctrl_d")
,f:func("ctrl_f")
,"`/":func("ctrl_slash")}
ctrl_c(){
;Msgbox your Function
Send, ^c
Send, {Down} ;为了弥补程序Bug:执行定义Function后,总会向上移动光标
}
ctrl_v(){
Send, ^v
Send, {Down} ;为了弥补程序Bug:执行定义Function后,总会向上移动光标
}
ctrl_s(){
Send, ^s
Send, {Down} ;为了弥补程序Bug:执行定义Function后,总会向上移动光标
}
ctrl_d(){
Send, ^d
Send, {Down} ;为了弥补程序Bug:执行定义Function后,总会向上移动光标
}
ctrl_f(){
Send, ^f ;因为弹出了一个对话框,所以不需要再把光标移动回原来的位置了。
}
ctrl_slash(){
Send, ^`/
Send, {Down} ;为了弥补程序Bug:执行定义Function后,总会向上移动光标
}
;=============自动执行段=============;{
Hotkey,If
modifier:=ObjDelete(Map,"Modifier")
timeOut:=ObjDelete(Map,"TimeOut")
;~ if(nomarlKeyAsModifier:=(1=StrLen(modifier)))
;~ Hotkey,$%modifier%, ModifierKeyDown, On
Hotkey,~*$%modifier% Up, ModifierKeyUp, On
Hotkey,If, IsMapOn()
for sourceKey in Map{
Hotkey,*%sourceKey%, SourceKeyDown
Hotkey,*%sourceKey% Up, SourceKeyUp
}
Hotkey,If
;===================================;}
IsMapOn(){
global IsMapOn,modifier,IsMapped
IsMapOn:=IsMapped:=(IsMapOn | (GetKeyState(modifier,"P") && (IsMapOn:=true)))
return IsMapOn
}
SourceKeyDown(){
global Map,waiting
targetKey:=Map[source:=SubStr(A_ThisHotkey,2)]
if isfunc(targetKey){
%targetKey%()
}if(" "!=SubStr(targetKey,1,1)){
if waiting
Send % source
SendLevel 1
SetKeyDelay -1
Send {Blind}{%targetKey% DownTemp}
}else {
Send % SubStr(targetKey,2)
}
return
}
SourceKeyUp(){
global Map
targetKey:=Map[SubStr(A_ThisHotkey,2,-3)]
if(" "!=SubStr(targetKey,1,1)){
SendLevel 1
SetKeyDelay -1
Send {Blind}{%targetKey% Up}
}
return
}
ModifierKeyUp(){
global Map,modifier,IsMapOn,nomarlKeyAsModifier
if(IsMapOn && modifier="CapsLock")
SetCapsLockState,% GetKeyState(modifier,"T")?"Off":"On"
for sourceKey in Map
if GetKeyState(sourceKey,"P")
return
IsMapOn:=false
if(nomarlKeyAsModifier)
Hotkey,$%modifier%, ModifierKeyDown, On
}
ModifierKeyDown(){
global Map,IsMapOn,modifier,timeOut,IsMapped,waiting
if(IsMapOn)
return
waiting:=true
Input, _input, L1 T%timeOut%
waiting:=false
if(ErrorLevel="MAX"){
if(_input=modifier){
Hotkey,$%modifier%, ModifierKeyDown, Off
Send {Blind}{%modifier% DownTemp}
}else if(Map[_input]){
KeyWait, %modifier%
IsMapped:=false
}else
Send {Blind}{%modifier%}{%_input%}
}else if(ErrorLevel="Timeout"){
Hotkey,$%modifier%, ModifierKeyDown, Off
Send {Blind}{%modifier% DownTemp}
}else
throw Exception("ModifierKeyDown:Un-used ErrorLevel=" ErrorLevel,-1)
}
#If IsMapOn()
#If
这篇关于用AutoHotKey设置程序员喜欢的键位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!