惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
GbyAI
GbyAI
L
LangChain Blog
Vercel News
Vercel News
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
T
Threat Research - Cisco Blogs
T
Threatpost
Scott Helme
Scott Helme
T
Tailwind CSS Blog
Latest news
Latest news
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
The Register - Security
The Register - Security
罗磊的独立博客
P
Proofpoint News Feed
腾讯CDC
S
Schneier on Security
雷峰网
雷峰网
A
About on SuperTechFans
T
Tenable Blog
F
Full Disclosure
Cyberwarzone
Cyberwarzone
博客园_首页
有赞技术团队
有赞技术团队
K
Kaspersky official blog

Yorksite

Plog004:好吃好吃 · Plog Plog003:Until Then · Plog Plog002:春天花会开 · Plog Plog001:让人疲惫的AI与在战锤世界中仰泳,赞美欧姆尼赛亚? · Plog rhaeTree:一个基于 Rust 的进化树可视化编辑工具 · Articles 我的键盘快捷键们 · Articles 迟到的2025年度数码产品总结 · Articles 关于我和这个博客 · Info 买了一只十多年前的老 Pebble · Articles 盘点一下今年让我上头的那些游戏 · Articles 【吃了啥】新利查西菜馆 · Articles 根据Zotero数据库追踪新发表文献 · Articles 解决远程服务器上Singularity联网问题 · Articles 又是一个Mac软件列表 · Articles Vita3K存档转移到PSV实机 · Articles SnapGene创建多外显子基因结构 · Articles Rstudio也能用GitHub Copilot了 · Articles 双十一买了啥 · Articles 文献一团乱麻?试试PARA管理方法 · Articles 点名的风还是吹到了Blog · Articles 从Raindrop迁移到了Anybox · Articles 数据可视化——基本图形元素及其应用 · Articles 单变量异常值检测方法 复现一张相关性图 · Articles 【读文献】单细胞分析最佳实践 · Articles Docker 打包 Shiny App · Articles 部署预印本追踪 TRxiv 到 Github Action Hello, again · Articles 1 dataset 100 visualizations 中有意思的可视化 · Articles 论文可视化配色简易指南 我的植物组学数据库合集 Ver.20220528 · Articles 利用 n8n 打造飞书 RSS 推送机器人 「#」的前世今生
Karabiner 助力,让你的键盘操作快人一步 · Articles
2022-06-16 · via Yorksite

Published Jun 16, 2022

6 minutes read

注:本文首发于少数派,您可以 前往此处 阅读修订后版本。

Karabiner 全称 Karabiner-Elements[^下文简称为 Karabiner],是 macOS 上的一款功能强劲的改键工具,可以将键盘上的按键映射成其他一个或多个按键组合。然而,Karabiner 使用JSON 作为配置文件,非常繁琐且不易理解,给上手带来了很高的门槛。

上图展示了 Karabiner 中与 Goku 中,实现相同效果所需要的写法差异。

上图展示了 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 进行搜索。

karabiner

同时,借助 KM 独特的冲突调色盘功能,当你为多个 Macro 设定了相同快捷键,按下快捷键后会触发选择界面,借此只需记忆一个快捷键,便可触发多种不同的搜索功能。

karabiner

Hyper + 字母实现程序快速切换

日常使用时,常常需要在不同的应用间来回切换。cmd + tab 虽然可行,但每次的应用顺序不固定,还要找到想切换到的程序,甚至因此诞生了一些专门为切换应用而生的工具。利用 Karabiner 搭配 Keyboard Maestro,即可实现 Hyper + 字母 一键切换应用。

在 Keyboard Maestro 中添加 Macro, 选择 Activate a Specific Application 即可,配置成如下图即可在激活此 Macro 时切换到 Chrome。

karabiner

这时,如果在 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 层。

Kapture 2022-06-15 at 21.39.24.gif

如下规则定义了一个称为「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 - 少数派

参考资料

Karabiner God Mode

使用 Goku 配置 Karabiner

yqrashawn/GokuRakuJoudo