资讯专栏INFORMATION COLUMN

[效率] HHKB键盘 + Autohotkey 配置秘籍

codergarden / 1795人阅读

摘要:由于已经厌倦了机械键盘,又实在无法抵挡的颜值,入手了一枚。我并不是党,想来想去还是把上下左右的快捷键设置成比较直观。原来是因为运行于管理员权限,而运行于普通用户权限。解决方法是禁用。

由于已经厌倦了机械键盘,又实在无法抵挡 HHKB 的颜值,入手了一枚 hhkb pro2。

入手之后立刻傻眼,方向键不仅需要按 Fn 键才能触发,那憋屈的键位让我这用方向键与 Ctrl+C 一样多的程序猿情何以堪!好在我是程序猿,天生不怕折腾,在经过设置 DIP 开关、使用 Autohotkey 改键、设置 Win10 系统权限等一系列的折腾之后,终于可以舒服的使用这款 HHKB 写代码了,效率更超之前的机械键盘。

设置 DIP 开关

SW1 on、SW2 off = Lite ext 模式,既 ◇ 键为 Win 键。
SW3 on = Delete 键改为退格键。
SW4 on = 左侧 ◇ 键为 Fn 键。
SW5 off = 不交换 ◇ 与 Alt 键。
SW6 on = 启用唤醒功能。

使用 Autohotkey 改键

首先要解决方向键问题。我并不是 Emacs/Vim 党,想来想去还是把“上下左右”的快捷键设置成 Ctrl + I、K、J、L 比较直观。另外,编代码时跳到行首、行尾的操作也很多,所以可以再加上 Ctrl + H 跳到行首,Ctrl + " 跳到行尾的快捷键。脚本也很简单:

^j::Send,{Left}
^l::Send,{Right}
^i::Send,{Up}
^k::Send,{Down}
^h::Send,{Home}
^"::Send,{End}

但是,仅仅这样并没有比原来方便,既然进入了双手不离开主键盘区的领域,就要尽可能减少使用鼠标才能提高效率,毕竟现在要实现按方向键已经必须使用两只手了。编代码选中变量名的操作很多,我们已经实现了 Ctrl + I、K、J、L 上下左右移动光标,如果能实现 Ctrl + ◇ + I、K、J、L 上下左右选中文本就非常方便而且直观了!观察一下 HHKB 的键盘,正好 ◇ + I、K、J、L 等价于 PrintScreen、Home、小键盘的除号、PageUp 键,所以就再增加如下脚本代码:

^PrintScreen up::Send,{RShift down}{Up}{RShift up}
^Home up::Send,{RShift down}{Down}{RShift up}
^NumpadDiv up::Send,+{Left}
^PgUp up::Send,{RShift down}{Right}{RShift up}

注意在每个快捷键后面都加上了 “up”。这是因为在测试时发现,如果 Ctrl + ◇ + J 按住的话,也就是希望光标以最快速度往左侧选中文本的时候,每选中5、6个字母,选中的字母就会被一个 “/” 字母替换掉!也就是本来应该连续输出 Shift + Left,却偶尔直接输出了 “/”。而快捷键后面加上 “up” 的意思是不允许按住,只允许一下一下按快捷键。这样虽然不会出错了,但是这一下一下按效率实在太低了。经过反复尝试,我找到一个秘技:先使用 “NumpadDiv::CtrlBreak” 和 “PgUp::CtrlBreak” 把要输出的快捷键改为不会实际输出字符的“CtrlBreak”键,就不怕键冲突了。实际脚本这个样子:

NumpadDiv::CtrlBreak
PgUp::CtrlBreak

^NumpadMult up::Send,{RShift down}{Home}{RShift up}
^NumpadDiv::Send,+{Left}
^Home up::Send,{RShift down}{Down}{RShift up}
^PgUp::Send,{RShift down}{Right}{RShift up}
^PrintScreen up::Send,{RShift down}{Up}{RShift up}
^Right up::Send,{RShift down}{End}{RShift up}
^NumpadSub up::Send,{RControl down}{Left}{RControl up}{RControl down}{RShift down}{Right}{RControl up}{RShift up} ;select whole word left to right
^End up::Send,{RControl down}{RShift down}{Left}{RControl up}{RShift up} ;select whole word left
^PgDn up::Send,{RControl down}{RShift down}{Right}{RControl up}{RShift up} ;select whole word right
^NumpadAdd up::Send,{Home}+{End}

上面的脚本还同时实现了 Ctrl + M 选中单词,Ctrl + N 选中行,Ctrl + < 向左按单词扩选,Ctrl + > 向右按单词扩选。最棒的还是可以允许按住 Ctrl + ◇ + J 和 Ctrl + ◇ + L 来快速扩选了,代价是牺牲了小键盘除号和PageUp键,不过可以接受。

另外像把变量首字母由大写改为小写这样的功能,虽然不是很常用,但也能有效提升效率,我把快捷键设置为 Ctrl + 反引号,实现起来稍稍有点复杂但也不难。使用一段时间,做了些优化和微调,最终的Autohotkey脚本:

NumpadDiv::CtrlBreak
PgUp::CtrlBreak

^j::Send,{Left}
^l::Send,{Right}
^i::Send,{Up}
^k::Send,{Down}
^h::Send,{Home}
^"::Send,{End}

^NumpadMult up::Send,{RShift down}{Home}{RShift up}
^NumpadDiv::Send,+{Left}
^Home up::Send,{RShift down}{Down}{RShift up}
^PgUp::Send,{RShift down}{Right}{RShift up}
^PrintScreen up::Send,{RShift down}{Up}{RShift up}
^Right up::Send,{RShift down}{End}{RShift up}
^NumpadSub up::Send,{RControl down}{Left}{RControl up}{RControl down}{RShift down}{Right}{RControl up}{RShift up} ;select whole word left to right
^End up::Send,{RControl down}{RShift down}{Left}{RControl up}{RShift up} ;select whole word left
^PgDn up::Send,{RControl down}{RShift down}{Right}{RControl up}{RShift up} ;select whole word right
^NumpadAdd up::Send,{Home}+{End}

RWin & "::Send,{RWin down}{RControl down}{Right}{RWin up}{RControl up}
RWin & `;::Send,{RWin down}{RControl down}{Left}{RWin up}{RControl up}

+Esc::Send,{RAlt down}{Left}{RAlt up}
+Tab::Send,{RAlt down}{Right}{RAlt up}

; Ctrl + ` set firt char to lower
^`::
    clipBak := ClipboardAll ; bak clipboard
    Clipboard := "" ;clear clipboard
    Send,{RControl down}{Left}{RControl up}{RShift down}{Right}{RShift up}{RControl down}c{RControl up} ;copy first char to clipboard
    ClipWait, 1 ;wait clip complete
    ; convert firt char in clipboard to lower
    selText := Clipboard
    ;MsgBox % selText
    StringLower, selText, selText
    ; set lower char to clipboard and paste it to replace in place
    Clipboard := selText
    Send, ^v
    Sleep, 100 ;prevent restore clipBak too early
    Clipboard := clipBak ; restore clipboard
    Send, {RControl down}{Right}{RControl up}
return

;Ignore these shortkey
^1::return
^2::return
^3::return
^4::return
^5::return
^6::return
^7::return
^8::return
^9::return
^0::return
^-::return
^=::return
^::return
^Left::return
设置 Win10 权限

到目前为止似乎一切都很完美,但是打开 Visual Studio,突然发现在 VS 里面刚刚设置的所有快捷键全!失!效!!一开始还以为是 VS 把全局快捷键给屏蔽了,想找找能不能通过 VS 里面的设置不屏蔽全局快捷键,结果无功而返,感觉怕是解决不了了。后来还是在靠谱的 Stackoverflow 里面找到了答案。原来是因为 VS 运行于管理员权限,而 Autohotkey 运行于普通用户权限。解决方法就是在 AutoHotkeyU64.exe(如果是64位操作系统的话)右击,选“属性”,在“兼容性”选项卡里,勾选“以管理员身份运行此程序”。

终于解决了 VS 快捷键失效的问题,但是马上又发现以管理员身份运行 Autohotkey 会造成它不能开机自动启动。解决方法是禁用 UAC。禁用 UAC 的方法是:Win+R,输入gpedit.msc,运行打开“本地组策略编辑器”,计算机配置->Windows设置->安全设置->本地策略->安全选项->以管理员批准模式运行所有管理员,改为"已禁用"即可。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94038.html

相关文章

  • 如何提高还在用window系统的编码硬效率

    摘要:买和,但作为一名收入还不是很稳定的前端,公司又不标配这些,又不想用自己的办公。工作难免会用系统,那就学点,效率贼。把键当键用但是如果是用编辑器。单行可省略比如当你的正常运行你编写的代码时。 myHotKey github 地址 我只想看看还有多少人用 window 系统办公,像我一样在太阳下低头。 工欲善其事,必先利其器。买 mac 和 HHKB,但作为一名收入还不是很稳定的前端,公司...

    sevi_stuo 评论0 收藏0
  • Windows上利用Python自动切换代理IP的终极方案!

    摘要:在中,格式是,所以需要把格式统一为注册表的标准。注册表的二进制值及关键信息如下开关长度地址是否跳过本地代理地址通过在中导入文件的方式执行并立即生效。本代码可以根据需要自动设置代理。 声明下:不同于网络上千百篇方法,下文是经过各种严格测试都通过的,同时也是一个实验的过程,排除了各种不靠谱的方法。有需要的可以评论来讨论,想要源码和相关参考文献或笔记的,也可以找我。 思路及启发 先说一下我这...

    jeyhan 评论0 收藏0
  • 【转】给年轻的前端程序员提升能力的几条建议

    摘要:如果你问一个年轻的前端开发人员,你在今后的年内如何提升自己的能力他可能会说我现在对前端比较熟悉,但我想深入了解,另外现在发展的很快我也想看一下。再举一个例子,我会留意身边的程序员所用的键盘。只有少部分的程序员会买高端的静电容键盘,比如。 如果你问一个年轻的前端开发人员,你在今后的 3 年内如何提升自己的能力?他可能会说我现在对 Web 前端比较熟悉,但我想深入了解 AngularJS,...

    Ryan_Li 评论0 收藏0

发表评论

0条评论

codergarden

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<