注:本文首发于少数派,您可以 前往此处 阅读修订后版本。
Karabiner 全称 Karabiner-Elements[^下文简称为 Karabiner],是 macOS 上的一款功能强劲的改键工具,可以将键盘上的按键映射成其他一个或多个按键组合。然而,Karabiner 使用JSON 作为配置文件,非常繁琐且不易理解,给上手带来了很高的门槛。
上图展示了 Karabiner 中与 Goku 中,实现相同效果所需要的写法差异。
于是,有人专门为其制作了一个工具「Goku」,借助 Goku 可以方便地为 Karabiner 进行配置。
准备工作:
- Karabiner-Elements 可以从官网进行下载
- Goku 使用 Homebrew 进行安装:
brew install yqrashawn/goku/goku
- 在 Karabiner 中确保配置文件 Profiles 选择默认的 Default
- 前往
~/.config/
目录,创建名为karabiner.edn
的 Goku 配置文件 - 参考下文进行配置文件的编辑,每次编辑完后在终端中执行
goku
使修改生效
将 Caps Lock 变为键盘功能的中枢
通常,我们将⌃Control + ⌥Option + ⇧Shift + ⌘Command
同时按下的组合称为 Hyper 键,因为程序内置的快捷键不会预设这么复杂的组合,因此使用 Hyper 键设定快捷键,能最大程度上避免与预设发生冲突。
大写锁定键 Caps Lock
位于键盘左侧中间,用起来很顺手,但我只用它切换输入法,输入大写字母靠 ⇧shift
,因此这里先对它下手,你也可以选择其他顺手且不常用的按键。
以下的 Goku 配置文件 karabiner.edn
写法,可以将大写锁定键修改为 Hyper 键,这时只需要按下这一个键,就可以发挥 ⌃Control + ⌥Option + ⇧Shift + ⌘Command
同时按下的效果。
{
:main [
{:des "caps_lock -> hyper"
:rules [
[:##caps_lock :!CTOleft_shift]
]}
]
}
然而,如果只是将 Caps Lock
转化为 Hyper 键,它会失去本身切换输入法的效果。幸好 Karabiner 支持在按键单独按下与组合按下时,为触发不同的效果。
以下写法可以让 Caps Lock
与其他键一同按下时变为 hyper 键,单独按下时触发 Control+Space
切换输入法。
{
:main [
{:des "caps_lock -> Ctrl+space(alone) and caps_lock -> hyper"
:rules [
[:##caps_lock :!CTOleft_shift nil {:alone :!Tspacebar}]
]}
]
}
以下是一些常用按键在 Goku 中的简化写法:
;; ! | means mandatory - modifier(s) alone when pressend change behavior
;; # | means optional - modifiers are optional (but at least one necessary)
;; :!Ca is keycode :a and prefix a with !C
;; C | left_command
;; T | left_control
;; O | left_option
;; S | left_shift
;; F | fn
;; Q | right_command
;; W | right_control
;; E | right_option
;; R | right_shift
;; ## | optional any
;; !! | command + control + optional + shift (hyper)
而要知道键盘上每个按键各叫什么名字,可以使用 Karabiner 配套的 Karabiner-EventViewer 进行查看。
结合 Keyboard Maestro 实现快速搜索
单靠 Karabiner 只能发挥其一半的功力,要想发挥其全部实力,还是要与 Keyboard Maestro(下称 KM)或是 Alfred 这些支持自动化的工具搭配,才能达到强强联合的效果。这里以 KM 为例,实现快速搜索选中的内容。
在 KM 中创建如下图的 Macro,为其指定 Hyper + S
的组合键,这样只需要选中想搜索的内容,按下快捷键即可使用 Google 进行搜索。
同时,借助 KM 独特的冲突调色盘功能,当你为多个 Macro 设定了相同快捷键,按下快捷键后会触发选择界面,借此只需记忆一个快捷键,便可触发多种不同的搜索功能。
Hyper + 字母实现程序快速切换
日常使用时,常常需要在不同的应用间来回切换。cmd + tab 虽然可行,但每次的应用顺序不固定,还要找到想切换到的程序,甚至因此诞生了一些专门为切换应用而生的工具。利用 Karabiner 搭配 Keyboard Maestro,即可实现 Hyper + 字母
一键切换应用。
在 Keyboard Maestro 中添加 Macro, 选择 Activate a Specific Application
即可,配置成如下图即可在激活此 Macro 时切换到 Chrome。
这时,如果在 KM 中将 New Trigger 设置为按键的 Hyper + c
,即可在按下此组合键时快速切换到 Chrome。
但这毕竟是一篇介绍 Karabiner 的文章,因此我演示一下如何在 Karabiner 的配置文件中,直接激活特定的 Macro。
以下配置文件可以实现 Hyper + C
切换到 Chrome 的效果。
{
:templates {:km "osascript -e 'tell application \"Keyboard Maestro Engine\" to do script \"%s\"'"
}
:main [
{:des "caps_lock -> Ctrl+space(alone) and caps_lock -> hyper"
:rules [
[:##caps_lock :!CTOleft_shift nil {:alone :!Tspacebar}]
[:!!c [:km "open: chrome"] ] ;;caps+c open Chrome
]}
]
}
我在前面模板的基础上增加了两部分:
- 开头利用
:templates
创建了一个名为:km
的脚本,可以快速激活 KM 中的Macro; - 在
:rules
中新增加了一行规则,:!!c
表示Hyper + C
的组合键[^这里 !! 是 hyper 键的缩写写法],:km "open: chrome"
则表示调用前面创建的km
脚本,并执行"open: chrome"
这个 Macro。
进阶,让每个键都能成为修饰键
Hyper
键只有一颗,用久了总有因为键位冲突感到不够的那天,比如我既想用 S
键触发 Search,又想用它激活 Sorted 3。这部分我将介绍如何利用层(layer)的概念,让键盘上的每个键都能成为独一无二的修饰键。
所谓层,可以理解为按下某个键后,键盘上其他键的功能随之发生变化,例如下图就是按下 option
键后键盘的变化,我们可以称之为 option 层。
如下规则定义了一个称为「semicolon-mode」的层,在这里我将使用频率较低的分号;
定义为触发按键:
:semicolon ["semicolon-mode" 1]
指按下分号「semicolon」后,将变量semicolon-mode
设置为 1,即进入「semicolon-mode」层;:afterup ["semicolon-mode" 0]
指松开分号后,将变量semicolon-mode
设置为 0,即退出「semicolon-mode」层;- 单独按下依然为分号本身
:alone :semicolon
。
在 [:hyphen [:km "insert: underline"] ["semicolon-mode" 1]]
这里,我定义了按下减号-
,触发 KM 中名为 "insert: underline"
的 Macro,输出一个下划线,这个规则只在["semicolon-mode" 1]
时(即按住分号时)才有效。
{
:templates {:km "osascript -e 'tell application \"Keyboard Maestro Engine\" to do script \"%s\"'"
}
:main [
{:des "This is the semicolon-mode"
:rules [[:semicolon ["semicolon-mode" 1] nil {:afterup ["semicolon-mode" 0]
:alone :semicolon}]
[:hyphen [:km "insert: underline"] ["semicolon-mode" 1]] ;; semicolon - to insert _(underline)
]}
]
}
结语
「花一些时间,折腾一点小东西,收获一个没多大用的成果,感到巨大的快乐」,这是我对摸鱼的定义。摸鱼摸得久了,总能折腾出些有意思的东西。目前,我每天都用这些快捷键输入一些常用短语,切换程序或是快速搜索,省下的时间可能并没有多少,但是有种莫名的快乐,我觉得这就足够了。
相关文章
macOS 改键利器:Karabiner-Elements 使用详解 - 少数派
使用 Karabiner 改善 Poker 键盘体验 - 少数派
让键盘变成你想要的样子:改键利器 Karabiner-Elements - 少数派