己经没有人能使用我的键盘了

不得不说,我真是那种非常喜欢折腾的人,可能我有一点自虐倾向吧(?)。

Vim

我刚上大学的时候用了 vim, 折腾了半天,一反思好像写代码的时间还没有搞 vim 配置的 时间长。最后的结果是直接 clone 了一个 amix/vimrc, 然后除了安装新插件,基本上没怎 么动过 vim 的配置了。

我现在浏览器基本都会安排上一个绑定 vim 按键的插件,一开始用的是 vimium, vimium 基本能满足使用需求,但我看到别的人推荐,又下了 surfingkeys, 又用surfingkeys-conf 这个配置模版加了一些自己的配置,这样我一个浏览器里面的快捷键就己经有几百个(常用 的可能十几个)。

浏览器

现在接触了 emacs, 一个副作用就是看 youtube 上的 emacs 博主们的时候顺便看到了他们 推荐的 qutebrowser 和 nyxt. 这两个浏览器也都是一堆的配置与快捷键设置。

qutebrowser 我己经配置了很多了,我估计我花了得有 20 个小时在配置上面,但我最近还 是用回了 surfingkeys + surfingkeys 作者维护的 chrome 版本—— qutebrowser 不能看视 频,有些网站用不了还是有点影响体验。 nyxt 吸引我的点是它用 lisp 编写,我估计我迟 早有一天也会忍不住下下来体验一番,然后最后又用回 chrome.

输入法

除此之外,大一的时候看了一个介绍双拼的视频,就心血来潮学了小鹤双拼。花了两周时间 熟练,明明体验挺好的,看小鹤的用户基本都一直在讨论小鹤音形,于是又出于玩心切到了 小鹤音形。(在此之前我还试过注音键盘,想来和小鹤有些相似。)

小鹤音形确实比小鹤双拼用起来要舒服不少。学起来基本没有什么负担,而且因为用了一半 形码,重码率比小鹤双拼要低,因此打字速度要快上不少。并且,和小鹤双拼一样,小鹤音 形所有的输入一律四码,节奏感拉满,打字的时候特别爽,就好像在弹奏一样。这个切换我 觉得是值的。

但我又因为闲得慌切到了五笔,这就是一个大坑了,五笔学起来比小鹤要复杂多了,而且打 字速度比小鹤音形并没有长足进足,我怀疑我现在打五笔的速度可能也就和我几年前打小鹤 音形的时候差不多,甚至还要更慢——因为我最近切换词库了,从原本的默认词库切换到了现 在的单字词库,这样单个字的打字的编码更短,但要想恢复打字速度需要多练习,习惯新的 单字的简化编码。

我其实感觉到花这么多时间练五笔对我没有什么用,但又下不定决心回到小鹤音形。

键盘

英文键盘方面,因为我学了法语,其实有时候用的是 azerty 键盘,我有想过完全删除 qwerty 键盘,但因为我在 ubuntu 上用的是 rime, 而 rime 本身不控制键盘的排布,也就 是说如果我删除了英文键盘,那 rime 打字也会是用的法语键盘,这就很难受了。

我听说还有一些布局更合理的英文键盘,比如 dvorak, 但是没有实用过。我之前学俄语的 时候,还使用过俄语键盘,但最后俄语学不下去了,遂放弃。

键位 - keyd

我感觉 emacser 应该都有改键位的经验,毕竟如果不改键位的话, control 键的位置真的 会让人手部畸形发育。就是在为了 emacs 改键位的过程中,我又发现了新大陆。

我先是用 xmodmap 把 ctrl 映射成了现在己经不再存在的 hyper 键。多了一个修饰键以后, 就可以绑定类似于 hyper+a 这样原本不存在的键位,而且还可以和其他的按键组合,emacs 可以说再也不愁键位冲突的问题了。

但是我意外看到了有人推荐 rvaiya/keyd, 于是我又屁颠屁颠跑去试用了。

keyd 很有用,可以称得上是神器了。我写到这里兴之所至,有点想要详细介绍一下 keyd.

keyd 不仅可以对全局进行设置,而且其自带的程序 keyd-application-mapper 还可以对 **某个 app 的符合某个正则的页面**。

[main]

# Maps capslock to escape when pressed and control when held.
capslock = overload(leader, esc)
control = oneshot(hyper)
# control = hyper
# comma = overload(shift, comma)
#; = overload(capital, ;)

# Remaps the escape key to capslock
esc =  `

# oneshot 点击shift/meta,然后再按下小写字母
shift = overload(capital, C-\)
[ = overload(window, [)
j+k = esc

[leader:C]
[capital:S]
esc = ~
[hyper:C-M-S-A]
a = C-a
v = C-v
x = C-x
c = C-c
h = left
j = down
k = up
l = right
d = backspace
m = toggle(motion)
[window:M]
a = M-1
s = M-6

如以上代码块中所示,我建立了 [main] [capital] [hyper]与 [leader] 四个层,其中 [main] 层是默认的层,什么修饰键都不按激活的就是 [main] 层。 capital 层基于 shift, leader 层基于 control, hyper 基于 control-alt-shift-super. 也就是说, leader-c 就想当于 control-c, 但是可以自已在其下更改,比如我把 hyper-a 改成了等价 于 control-a.

其实默认是有叫作 shift, control 的层的,但是一方面这容易混淆,另一方面在 keyd-application-mapper (后面介绍) 中似乎没法用 shift, control 当作层名称, 因此我创建了新的层,命名为 capital 与 leader.

hyper 层是一个伪 hyper, 将其映射为 control-alt-shift-super 可以让使其变成一个修 饰键使用,但可惜的是这样不支持组合使用。不过还好,这样己经够用了。

除此之外,代码里面出现的 motion 和 window 是两个特殊层。

motion 这个层里面 w,s,a,d 被映射成上下左右, h,j,k,l 也是上下左右, p,n,f,b 还是 上下左右。在*只读模式下*,如在 zotero 读论文的时候,这个层使用起来很爽。

window 基本与 super 相同,按需要加了一些小修改,绑到了 [ 键上,方便使用。

函数

overload, oneshot 与 toggle 是三个有用的函数。

capslock = overload(leader, esc) 的意识是按住 capslock 相当于激活 leader, 松手回 到 main, 按一下 capslock 相当于按了 esc. *这是一个相当有用的设置*。我现在己经没 法离开这个设置了,在所有的其他电脑上我都会想念这个设置。

oneshot(hyper) 使得我可以按一下 control 触发 hyper 层,而后下一个按键就会 hyper 层下激发,再下一个按键就又会回到 main 层。如,我先按 control, 再按 1,就相当于 hyper-1. 再按 a, 其结果就与按了 a 等同。这个我使用频率不高。

toggle 的意思就是持续激活一个层,比如正常的 capslock 就相当于 toggle(shift).

还有 j+k = esc 的意思是说,连按 j,k 键,相当于 esc. 这个功能其实可以用于输出一些 特殊字符。但我没太尝试过。

keyd 还支持很多函数,比如宏(macro),可以一些输出多个按键,不过我用不太到。

还有一个函数 command 理论上可以执行终端命令,但我没有实验成功。

keyd-app-manager

keyd 支持对某一个 app 的某一个界面设置专门的快捷键。keyd-app-manager 开启verbose 模式以后会在 log 里面输出当前的界面的名称。在指定的界面下配置界面专属快捷键即可。

以下是我对 zotero 论文阅读界面做的快捷键映射。按下 1 以后就可以进入 motion 层, 从而快速移动。

我给 emacs 配置了一个专门的 emacs-motion layer, 绑定了一些快捷键,使用 hyper-m 激活。如果某些时候我不需要编缉的时候就可以打开这个 layer。我感觉如果只是想要加入 一个类似 vim 的 normal-state 的东西用于在 buffer 内只用单手操作光标快速移动,应 该使用这个功能就可以做到。

[zotero|*-*-zotero]
1 = toggle(motion)
meta.e = M-e
main.d = right
alt.s = A-s
capital.x = C-S-t

sxhkd 与 bspwm

前文提到 keyd 中运行终端命令不成功,这个问题在 Unable to use keyboard shortcuts · Issue #864 · rvaiya/keyd 中亦有记载。有人推荐了 sxhkd.

于是,我第一次知道了窗口管理器以及快捷键管理器的概念。

sxhkd 是一个快捷键管理器,专门用来管理使用快捷键调用命令的功能。 bspwm 则是一个 专门用来进行窗口管理的软件。我当时把 bspwm 下载下来以后,重启计算机只能看到一个 大黑屏,我当时还以为安装出错我的电脑坏了。

我上网搜了很久也没有文章提醒我这不是电脑坏了,单纯 bspwm 就是这样的(也可能是提 醒了,但我心里己经有了一个预设的答案就是我的电脑坏了。)

其实真正的原因是, bspwm 的功能真是太专一了,它能做的就只有窗口管理这一件事。需 要安装上 sxhkd 来管理快捷键,安装上 feh 来设置壁纸,安装 alacritty 来当终端模拟 器,安装 dunst 来接收通知,安装 picom 来管理透明度等窗口属性,安装 polybar 来得 到状态栏。大概率,安装了这一套的人还会顺路安装一个 rofidmenu 作为启动器。

这一套安装下来,又是不小的功夫。我那天晚上安装的时候还一不小心运行了 rm -rf ~ 指令,让我崩溃了很久。

sxhkd 我也做了一些配置,但基本上是抄的原代码,自己写了几个脚本,让 sxhkd 也可以 在不同的应用上执行不同的指令。

顺带一提, sxhkd 还有一个类似于 emacs 的链式快捷键。我把 hyper-p;p 绑定为了 mpc play; hyper-p;t 绑定为了 mpc toggle hyper-p;n 绑定为了 mpc next, 这样就可以 方便地听音乐而不用浪费过多的快捷键。(此处 hyper 是前面 keyd 设置的假 hyper, 实 际写在 sxhkd 里要展开成 control + super + alt + shift + p 这种格式。)

Emacs

Emacs 的快捷键配置我其实反而没有什么可以说的,其实基本上也都是在论坛上抄了,就不 好意思拿出来说了。

总结

经过这一番折腾,我的键盘操作逻辑己经是过度自定义化了,我现在如果在一台不熟悉的电脑上打字,甚至哪怕就是在我自己的 macbook 或者是 windows 上打字,都会有一种水土不服的感觉。

(By the way, 有人知道运行了 fill-paragraph 以后如何把段落恢复原状吗?这篇文章里面很多空格都是断行造成的。)

7 个赞

感谢分享,我用了很长时间的小鹤双拼,看了你的分享,我决定深入小鹤音形。 描述五笔那段,我发现你是一个真诚又可爱的人。未来是想打的天下,看打的历史应该是一去不复返了。我就是从五笔转过来的。

2 个赞

很高兴我的分享对你有帮助 :heart:

谢谢分享,很详细的帖子。

以前我也尝试过一些不一样的键位布局 (drovak),键盘布局,输入法(双拼),正如你说的一样,自己用着是挺爽的,但是一旦需要切换环境,用别人的电脑就会很卡手,或者换个键盘会因为习惯不一致容易敲错。

如今只保留了双拼(比全拼舒服太多了),键盘影响还不大,会倾向于回归到一些相对通用的东西上去。

1 个赞

小鹤双拼有没有什么练习的网站推荐呀

如果你说的不是音形的话,其实用来日常打字两天左右就基本没什么问题了,我个人的话,有一周是分不清zh ch sh放在哪里的,过后就好了。

1 个赞
1 个赞

{M-x describe-package RET unfill RET}

1 个赞

大佬,如果最终是要学小鹤音形,你觉得有必要先练双拼嘛,然后再转,还是直接练小鹤音形就好了。

我觉得可以一步步来。音形,可以自由降级为双拼(官网的说法,我自己只用双拼)。

我用双拼是因为,我希望能够多平台统一输入方法,在Windows、Macos、Linux、IOS等不同的平台上,可以使用一套输入方法,不需要在甄别一下手上的是哪个终端。减少一下心智负担。

我是从全拼转移到双拼上来的。主要是为了降低击键次数。手上不会太累。作为一个日常靠写东西谋生的我来说,这还是挺重要的。 :rofl:

1 个赞

啊,我不会音形…

双拼是用诺基亚6120c的时候学的9键双拼,电脑打字的话,五笔用了10年,直到进入win10 时代我习惯的那个五笔软件停更了,就基本不再用五笔了(那么多年的词库习惯改了的话很不爽)。

现在电脑打字是小鹤双拼,要我学音形我不如用回五笔咯。

双拼我觉得打日常词组短语比五笔方便,长期用双拼了。

看场景吧,如果只是日常的和同事交流,按我的经验,我觉得没必要花成本学音形,打比较冷门的单字的机会是比较少的,我也就偶尔打一下新同事的名字比较难找。

1 个赞

感谢!有用的

我是先学了双拼再学的小鹤音形。我觉得会打小鹤音形的应该都会打小鹤双拼吧,毕竟小鹤音形的前两个形码还是小鹤双拼。

拼音到双拼是很丝滑的,因为念出来是怎么样的,打出来就是怎么样的。

这一点比五笔好,五笔刚入门的时候必须要一心二用(因为我做不到看字就反映出它的结构,所以必须要在大脑里面新开一个线程算一个字怎么拆)。

我到现在也经常需要查一个字的五笔编码是什么,因为容易忘字。最典型的一个例子就是”身“这个字,我觉得大多数五笔用户一开始应该都会困惑这个字怎么拆。我是直接专门记住了身字的编码。一个很有意思的编码,特别好记。

而小鹤音形的好处就是没那么容易忘字。因为它是拆偏旁,左右结构,上下结构的字占了绝大多数,因此拆起字来比五笔要求的心智负担低(个人感觉),如果不好拆的字,小鹤音形就直接是横竖撇捺,就很”傻瓜“式。

总而言之,小鹤双拼转到小鹤音形需要的学习成本是比较低的,主要的难点在于适应。

但小鹤音形的缺点在于:

  1. 大多数平台默认没有,必须要自己去下载小鹤音形对应的词库支持,而五笔86 windows 默认就有。(window甚至默认不支持小鹤双拼,反而支持了一些我到现在也没用过的双拼方案)。
  2. 依然是形码,比小鹤双拼的学习成本高,而且有时候还是会忘字。
  3. 双拼理论上与拼音没有任何区别,在手机上应该可以智能自造词,搜狗的智能词库什么的应该都能用,但要追求小鹤音形,那就是在追求低重码率,那自然也就不可能使用智能词库了。

其他缺点一时想不起来了,好久没用了。

好纠结要不要用回去,但己经习惯了五笔86了,己经回不去了~

1 个赞

我更喜欢自然码的双拼布局,最近准备折腾一下辅助码,也就是自然码的音形。但是笔记本太老了,有点消耗内存

输入法会消耗内存吗?感觉再牛逼的输入法也没办法吃满内存吧 :joy: 不过听说现在有那种AI加成的输入法,那种可能确实可以吃很多内存,不过一个输入法而己,里面放个AI总觉得有点错配,像是在开坦克车给菜园子洒肥料。

各种词库加上,一两G还是有的,8G的老本抗不住

考虑到各种系统基本都自带而选了自然码,一直没入形码的坑(自然码的辅助码不太方便)

看完 op 的文感觉心痒痒的()

键盘方案可以用只对 emacs生效的 (但可以用emacs之外的工具来配置)。不要用系统级生效,这样无论你怎么过度自定义化,emacs之外的软件都不会受影响。我的emacs只有我能用,但电脑里的其它软件任何人都能用。

即使换了一台不熟悉的电脑也不会有水土不服的感觉。因为我们没法达成只用emacs,emcas之外的软件都不用的程度,也没办法所有软件都emacs化

我现在用 Colemak + 自然码,小鹤音形会比自然码双拼强很多吗,听op一说都在考虑是否要切换了

不会,自然码也有辅助吗。