让 CapsLock 键更实用,键盘映射改造

缘起

12年,我当时还在做销售工作,虽然从事那行已好几年,但总感觉自己的销售知识体系不够系统,于是向一个销售老大哥请教——如何提升自我的销售能力。他教了我一个很简单的办法——把自己跟客户的销售对话录下,然后用录音分析软件把每句话形成文字,其实就是给自己的话配上字幕。

办法虽笨,却极其有效,若你有很多口头禅想改却一直改不了,不妨也试试。很多时候自己说过什么话是意识不到的,而写作清晰与否,一看便知。

之后,老大哥给我一份长达两小时的「咨询录音」,让我敲出来,😓,他是语速超快的那种。于是,我便开始了「打字」受虐之旅。

我当时用的是:狼蛛牌,会发光哦!


现在想想,当时的品味实在不咋地.

敲了 4 个白天,2 万多字,字敲完了,8 个手指也不行了,吃饭碗都拿不住,可以想象那个渣渣键盘有多难用。从那之后我很长一段话时间都不敢一次性写长文。

键盘

14 年初,我想学编程。考虑到要敲大量代码,且有了之前的惨痛教训,我得先把硬件换了。Google 上查看了大量的机械键盘知识后,锁定了 Cherry - 3000(红轴).放在家里用,于是家里很爽,公司很痛苦。

经过几天的煎熬后,没办法,继续购了 Filco - 104(侧刻红轴),从此以后,我便过上了与机械键盘在一起的幸福生活。

办公室和家里都用机械之后,码字、敲代码的确很爽,但还有个问题一直困扰着我——Escape、方向键程太远,这导致我用 vimium 浏览网页,以及改文章都很痛苦,我可不想老离开中心键位。

软件

直到有一天,看到这几篇文章:让 Caps lock 键更加实用A useful Caps Lock keyA Modern Space Cadet ,Steve 的文章里提到,键盘上面的按键分为三种:

  • 一种是按下去之后会改变其它按键的状态,但是只按下它们自己通常不会起任何作用,比如 Shift、Control。
  • 第二种按键是你按下之后释放,它自己就会形成一定功能,但是你通常不会按住它来重复它的功能,比如 Esc。
  • 第三种按键是你有时候只会按一下,有时候需要重复按(或按住),比如按住空格键会输出一连串空格,按住 Delete 键就会就会删除一连串文字。

Steve 提到,第三种按键方式比较正常,而第一种和第二种则是截然不同的按键方式,很多键盘设计的 Capslock 键则是个天大的笑话——占据了最核心的键位却只能用来切换大小写。当然,也有些例外,比如日本的 HHKB pro2。于是,他把 Capslck 键改造成了一个超级键,并将其命名为 Hyper。

我借鉴了他们的思路,但也修改了一些东西。我的做法如下:

首先下载 SeilKarabiner.

然后到系统偏好设置里把 Capslock 键设置为「无操作」。


接着,打开 Seil,双击「Change the capslock key」的「key codeh」那行,把默认的 51 改为 80, 80 对应 F19 键,不会跟其他键造成冲突。

再打开 Karabiner 的「Misc & uninstall」,

点击 「open private.xml」,会跳出一个文件,把下方代码贴进去替换。

<?xml version="1.0"?>
<root>
    <item>
        <name>F19 to F19</name>
        <appendix>(F19 to Hyper (ctrl+shift+cmd+opt) + F19 Only, send escape)</appendix>
        <identifier>private.f192f19_escape</identifier>
        <autogen>
            --KeyOverlaidModifier--
            KeyCode::F19,
            KeyCode::COMMAND_L,
            ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L,
            KeyCode::ESCAPE
        </autogen>
    </item>
    <item>
        <name>Hyper J to Down</name>
        <appendix>(Hyper-J to Down arrow)</appendix>
        <identifier>private.hyper-j-down</identifier>
        <autogen>
            --KeyToKey--
            KeyCode::J,
            ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L,
            KeyCode::CURSOR_DOWN
        </autogen>
    </item>
    <item>
        <name>Hyper K to Up</name>
        <appendix>(Hyper-K to Up arrow)</appendix>
        <identifier>private.hyper-K-up</identifier>
        <autogen>
            --KeyToKey--
            KeyCode::K,
            ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L,
            KeyCode::CURSOR_UP
        </autogen>
    </item>
    <item>
        <name>Hyper H to Left</name>
        <appendix>(Hyper-H to Left arrow)</appendix>
        <identifier>private.hyper-h-left</identifier>
        <autogen>
            --KeyToKey--
            KeyCode::H,
            ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L,
            KeyCode::CURSOR_LEFT
        </autogen>
    </item>
    <item>
        <name>Hyper L to Right</name>
        <appendix>(Hyper-L to Right arrow)</appendix>
        <identifier>private.hyper-l-right</identifier>
        <autogen>
            --KeyToKey--
            KeyCode::L,
            ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L,
            KeyCode::CURSOR_RIGHT
        </autogen>
    </item>
    <item>
        <name>Hyper N to Beginning of Line</name>
        <appendix>(Hyper-N to Beginning of Line)</appendix>
        <identifier>private.hyper-n-beginning-of-line</identifier>
        <autogen>
            --KeyToKey--
            KeyCode::N,
            ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L,
            KeyCode::CURSOR_LEFT,
            ModifierFlag::COMMAND_L
        </autogen>
    </item>
    <item>
        <name>Hyper ; to End of Line</name>
        <appendix>(Hyper-; to End of Line)</appendix>
        <identifier>private.hyper-;-end-of-line</identifier>
        <autogen>
            --KeyToKey--
            KeyCode::SEMICOLON,
            ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L,
            KeyCode::CURSOR_RIGHT,
            ModifierFlag::COMMAND_L
        </autogen>
    </item>
    <item>
        <name>Hyper I to Top</name>
        <appendix>(Hyper-I to Top)</appendix>
        <identifier>private.hyper-i-top</identifier>
        <autogen>
            --KeyToKey--
            KeyCode::I,
            ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L,
            KeyCode::CURSOR_UP,
            ModifierFlag::COMMAND_L
        </autogen>
    </item>
    <item>
        <name>Hyper M to Bottom</name>
        <appendix>(Hyper-M to Bottom)</appendix>
        <identifier>private.hyper-m-bottom</identifier>
        <autogen>
            --KeyToKey--
            KeyCode::M,
            ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L,
            KeyCode::CURSOR_DOWN,
            ModifierFlag::COMMAND_L
        </autogen>
    </item>
    <item>
        <name>Hyper + Space To Capslock</name>
        <appendix>Hyper(cmd+ctrl+shift+opt)+space, send Capslock</appendix>
        <identifier>private.hyperspace2enter</identifier>
        <autogen>
            --KeyToKey--
            KeyCode::SPACE, ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L | ModifierFlag::COMMAND_L,
            KeyCode::CAPSLOCK
        </autogen>
    </item>
    <item>
        <name>Change Escape to Mission Control</name>
        <identifier>private.escape_to_mission_control</identifier>
        <autogen>
            --KeyToKey--
            KeyCode::ESCAPE,
            KeyCode::CURSOR_UP, ModifierFlag::CONTROL_L
        </autogen>
    </item>
</root>

回到「Change key」界面,点击「Reload XML」刷新,然后左边勾选即大功告成。


我对 文刀漢三 的代码做了一些修改:

  • Hyper + H/J/K/L 为左、下、上、右,仿 Vim 模式。
  • Hyper + N/; 分别是跳到行首、行尾。
  • Hyper + I/M 分别是调到最上方、最下方。
  • Hyper 单独按下时为 Escape,+ Space 则保留之前的切换大小写功能。

把键盘映射如上改完之后,我觉得至少有以下几个好处:

  • 两手几乎不用离开中心键位,无论是码字、敲代码还是其他效率都会提升很多。
  • 浏览网页,借助 Vimium 插件点击会更快,更爽。
  • 设置 Hyper 键位,不会更传统的很多快键键造成冲突,可以凭空多出20个以上的自定义「键程短」的快捷键。比如我把欧路词典的「滑词翻译」设为 Hyper + E.

展望

Keyboard maestro

OX 系统有个效率软件为 Keyboard maestro, 因为有了 Hyper 键,所以也可以多设置一些不冲突的 Hotkey.例如,Astrill 没有快捷控制 ON & OFF, 于是我把 Hyper + A 设为开关。


当然,Keyboard maestro 还有很多好玩的地方,希望大家多挖掘,多分享。

Windows

Mac 有 karabiner,可 windows 上没有啊,公司还得用 win,虽然很痛苦,但是没办法。「改变我们能改变的,适应我们不能改变的」。于是 Google 了下 Karabiner 的替代产品,了解到了 AutoHotkey 这个脚本工具。到官网熟悉了下他的语法,参考其他人的类似脚本,写了下面这个脚本,跟 Mac 上的 karabiner 自定义差不多。

; Autohotkey Capslock Remapping Script 
; - Deactivates capslock for normal (accidental) use.
; - Hold Capslock and drag anywhere in a window to move it (not just the title bar).
; - Access the following functions when pressing Capslock: 
    ;Cursor keys        - J, K, L, I
    ;Home,End       - N, ;
    ;Esc            - CapsLock only
    ;CapsLock       - Space

#Persistent
SetCapsLockState, AlwaysOff

; Capslock + hjkl (left, down, up, right)

Capslock & h::Send {Blind}{Left DownTemp}
Capslock & h up::Send {Blind}{Left Up}

Capslock & j::Send {Blind}{Down DownTemp}
Capslock & j up::Send {Blind}{Down Up}

Capslock & k::Send {Blind}{Up DownTemp}
Capslock & k up::Send {Blind}{Up Up}

Capslock & l::Send {Blind}{Right DownTemp}
Capslock & l up::Send {Blind}{Right Up}

; Capslock + n (home, end)

Capslock & n::SendInput {Blind}{Home Down}
Capslock & n up::SendInput {Blind}{Home Up}

Capslock & `;::SendInput {Blind}{End Down}
Capslock & `; up::SendInput {Blind}{End Up}

Capslock & Space::
If GetKeyState("CapsLock", "T") = 1
    SetCapsLockState, AlwaysOff
Else 
    SetCapsLockState, AlwaysOn
Return

; Capslock only, Send Escape
CapsLock::Send, {ESC}

; Capslck + s, open the gitbash
CapsLock & s::Send +{F10},Send s

; Capslck + w,  open Worktile
CapsLock & w::
Run https://worktile.com
return 

如果你在 win 上也想改映射,下载 AutoHotkey 把上方代码复制后,创建 .ank 后缀文件,右键以 AutoHotkey 运行即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容