用AutoHotKey设置程序员喜欢的键位
2016-09-09 10:53
435 查看
昨天看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 建议)
详见脚本中的配置。
若不稳定请使用V2.3
代码:
(全选)
折叠块: 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
最下面的脚本是自己在这个脚本基础上修改的,加入了以下功能:
复制: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 建议)
详见脚本中的配置。
若不稳定请使用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}" ,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
相关文章推荐
- 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
- 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
- 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
- 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
- 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
- 【转载】为何程序员喜欢将INF设置为0x3f3f3f3f?
- Mac版程序员喜欢的键位 -- macos Sierra 版本
- 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
- (转)【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
- Mac版程序员喜欢的键位(使用 IDEA)--2017.5.3 更新
- 为何程序员喜欢将INF设置为0x3f3f3f3f?
- 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
- 如何做个让人喜欢的程序员
- 向程序员推荐AutoHotkey
- “程序员入门宝典”喜欢编程技术的朋友一定要看!
- 如何做个让人喜欢的程序员
- 认识和喜欢你的另一半的工作,程序员妻子也不例外
- 据说程序员喜欢跳楼?!我从11楼跳下去……才知道……
- 如何做个让人喜欢的程序员
- “程序员入门宝典”喜欢编程技术的朋友一定要看!