原始的项目地址在bluetooth_ergodone_doc, 因为github上的图片无法访问, 所以在这里放了一份.
下面是一系列文章, 讲怎么自己做一把蓝牙版的ergodone键盘.
为什么要做这样一把键盘呢?
因为我是程序员, 也是vim的使用者, 现在在用的是mac系统, 更喜欢用键盘来进行一些操作, 不喜欢把手移动到鼠标上进行一些操作, 再移到回键盘上. 除了可以用软件或者系统的快捷键, 现在很多环境下, 都有vim的插件, 比如chrome的浏览器有Vimium, zsh里有vi-mode, 文件管理可以用ranger, intellj里IdeaVim. Mac系统里有vimac, 使得用键盘操作电脑, 成为一种可能.
当然, 比如剪视频这种工作, 必须还是有鼠标来得方便, 但是程序员的日常生活里, 这类情况比较少, 也可以用mac自带的触控板解决.
虽然有各种vim软件插件的加持, 但是还是遇到了很难回避的问题. 单靠软件, 并不能达到我预期的效果. 所以想从硬件方面解决一些问题, 才有了自己做一把键盘的想法.
先介绍一下我使用的vim的一些操作习惯.
vim的学习成本很高, 学习曲线也很陡峭, 但是是一个功能非常强大的文本编辑器, 加上各种插件, 甚至可以是IDE, Markdown编辑器……
我除了写java会用intellij, 因为写java工程对代码补全要求非常高, 需要下载并且使用各种第三方依赖库. 写其他语言诸如python, javascript, html, C, C++等, 基本上都用vim.
下面展示一些各种vim的奇技淫巧.
使用插件fzf, 加上The Silver Searcher, 我可以方便地在项目里, 用正则表达式搜索文本, 比如我想找以KC_CAPSLOCK为结尾的某一行文本 (这也是我很想吐槽intellij的一点, 搜索字符串不太方便, 特别是在配置文件里的字符串) .
使用c.vim可以方便地编辑运行C语言, 如果能将vim的开发环境打包成docker, 上传到自己租的云服务器, 然后用ipad连接上这个云服务器, 你就可以在ipad上写点代码, 其他语言类似, 不过ipad上有一个很郁闷的地方, 一直按住backspace键, 能一直删除, 一直按住字母键, 比如j, 只会生效一次, 这就导致在ipad上不能一直按住j来不断让光标下移, 幸好有插件vim-easymotion可以缓解这种冲突.
使用插件打开超链接, 编辑当前的URL并在新标签页打开, 然后在各种标签页跳转
使用IdeaVim-EasyMotion快速在代码中跳转, 并且可以映射一些操作, 比如我这里使用;su来找到这个函数在哪里被调用了即ShowUsages.
使用vimac, 像浏览器里的vimium插件类似, 可以替代鼠标的一些操作.
比如我用键盘打开intellij的File选项卡.
可以用vim类似的命令, 在终端里进行文件的各种操作. 比如可以预览一些文本文件, 图片, 视频也可以预览不过我没有配置. 可以在各种位置打tag, 在tag之间进行跳转, 比如我通过tag跳转到项目文件夹, 复制了一个文件, 然后粘贴到桌面文件夹, 然后再删除. 还有一些方便的功能, 比如批量重命名文件.
可以用vim类似的命令去编辑shell命令
网页上可以用鼠标点击的地方, 有时候插件不能识别到. 比如DynamoDB控制台里的"项目". 这时候就得用鼠标移上去, 再点一下.
zsh可以输入一些命令的前缀, 按向上方向键, 可以搜索输入历史里, 这个前缀的命令. 这要求把手移动到方向键的位置. 当然, 可以用别的快捷键, 比如
让键盘可以去移动鼠标, 比如vim的命令里, hjkl这四个按键在普通模式下, 可以用来移动光标 (在输入模式下是正常输入字母) , 借鉴这样的思想, 我们可以新建自己的模式, 这个模式下hjkl是移动鼠指针. 在另一种模式下, hjkl变成上下左右方向键. 如果是在linux下, 可以通过修改系统配置 (参考X_keyboard_extension) , 自定义键盘布局. 如果是在mac下, 有一个神器Karabiner-Elements, 并且有别人写好的配置rules, 你可以轻松的让键盘变成你的样子. 比如我按下CAPSLOCK, hjkl就会移动鼠标指针, 按下CAPSLOCK+SHIFT, hjkl就会是上下左右的方向键.
但是最后的效果, 还是不让人满意, 因为我的输入法SHIFT会切换中英文, 而且不能设置左或者右SHIFT才触发这个操作, 所以用CAPSLOCK+SHIFT, 经常误触发中英文切换, 而且原来键盘上已经有很多快捷键, 想一个没有冲突的, 比较费事, 所以光靠软件, 也不能让人满意.
如果键盘上多了几个我可以自定义的按键, 那个上面的问题就可以解决, 同时, 我也想让自己的键盘符合一些人体工程学, 最后挑中了ergodone (是在ergodox的基础上改进而来, 为了节省成本) , 有两个小的键盘组成, 这样两只手可以比较自然地放下.
并且我希望能做到如下几个方面:
需要声明的是, 我本身是偏服务器方向的程序员. 我在做这个键盘之前, 完全没有任何硬件相关的知识, 所有跟硬件相关的知识, 包括跟硬件相关的软件知识 (即嵌入式编程) , 都是从网上学的, 或者问朋友的. 所以有哪里做得不对, 麻烦不吝赐教.