您的位置:首页 > 职场人生

用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

代码:
(全选)

;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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: