用AutoHotKey设置程序员喜欢的键位

2023-11-20 23:40

本文主要是介绍用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
    如,[Image: 15gqs7k.jpg]
  • 场景:
    • 减少右手在主键区编辑键区来回切换的消耗;
    • 减少切换至新键区时的对齐|定位操作。
  • 使用模式
    • 临时映射:按住修饰键,映射保持,直至释放修饰键。
    • 锁定映射:无需按住修饰键,映射保持,直至关闭映射。
  • 使用方法
    • 修饰键取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

这篇关于用AutoHotKey设置程序员喜欢的键位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/398284

相关文章

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作