作为一个践行Mouseless Programming的开发者,来谈谈自己在日常工作中是如何做到「几乎」不用鼠标的。
在说具体的「技巧」之前,先聊一聊纯键盘开发的几个原则:
- 动机, 动机要单纯,纯键盘开发不是为了耍酷, 你的动机应该是提高「效率」:)
- 键盘只是工具,思想才是关键, 代码和问题先想清楚再下手,想清楚远比写的快重要!
- 键盘不要经常换, 选择一款适合自己的,然后用熟它就好!什么黑轴、茶轴,filco、cheryy等等的都是浮云啊,折腾这些是在浪费生命啊。
- 使用统一的一套快捷键, 快捷键一致,可以无缝切换,减少不同软件不同快捷键的记忆成本。比如vi的一套快捷键,各种IDE和文本编辑器都会有vi模式或插件,chrome也有插件支持vi快捷键浏览网页。
- 快捷键不要刻意去记, 经常用到的功能,才去查它的快捷键,在使用过程中去记,记住常用的即可。
下面就来聊聊具体的(奇)技(淫)巧吧:
键盘设置
- 原则:双手不要离开主键区。也就是双手几乎一直在asdf,jkl;键区。 比如你去按方向键,这样就是双手离开了主键区。
-
重新映射方向键: 上一条提到不要去按键盘上的方向键(太远了),所以需要重新映射一下方向键,使用
hammerspoon
工具,可以全局重新映射方向键,我倾向使用 【ctrl-hjkl】来作为方向键,相信大部分vim党都会这么映射吧,用熟之后还是很舒服的。 -
ctrl键和Cap键的键位互换:Cap键占据了一个很好的位子(左手小拇指一划就能碰到),然而却没什么卵用(大写用Shift+字母啊)。而Ctrl键使用的频率太高了,却藏的太远,所以强烈强烈建议互换ctrl和Cap按键的位置,换完之后熟悉一天你就不会再想换回来的,相信我。mac上提供了很便捷的方式修改这两个按键,入口在 【系统设置】-> 【键盘】:
- 说下题外话,其实早期的一些键盘的ctrl键就是在现在的Caps键的位置的,特别是Unix/Linux系统的键盘,因为重度使用Ctrl键,如Ctrl-c:终止命令,Ctrl-d:EOF等,所以ctrl键必须要在一个很方便按到的位置。
- 如果你使用的是这款键盘---HHKB,那么恭喜,你就不用设置了,它压根儿就没有Caps键。另外安利一下这款键盘,它非常小巧,携带方便,而且可以直接架在笔记本的键盘区替换笔记本键盘。 唯一的缺点就是: 贵
- 说下题外话,其实早期的一些键盘的ctrl键就是在现在的Caps键的位置的,特别是Unix/Linux系统的键盘,因为重度使用Ctrl键,如Ctrl-c:终止命令,Ctrl-d:EOF等,所以ctrl键必须要在一个很方便按到的位置。
-
可以设置多个keyboard-profile。不同的profile下,按键的意义不同。举个例子,hhkb没有F1-F12按键,需要用Fn+1-12 才能表示F1-F12,程序员调试,经常用F6--F12 的,所以用组合键非常麻烦。此时就可以建另外一个debug-keyboard-profile,让1-12表示F1-F12的含义,这样就不用每次调试都按组合键了。可以借助
Karabiner
工具来实现多个profile的定义
常用操作
下面介绍 Mac上的常用操作怎么使用键盘来做到。
- 打开应用、打开文件、查找文件等: Alfred。普通的打开应用、打开文件,基本上都能满足,再也不用鼠标点击底下的Dock来打开应用,也几乎不用点击Finder来打开文件了。重度用户可能会编写一些工作流,比如直接搜*,搜maven*仓库等等。
- 窗口管理:Spectacle。经常需要用鼠标移动窗口,调整窗口大小? 有了Spectacal之后几乎不会在手动鼠标调整窗口。看一下快捷键就一目了然了。
- Ternimal管理:tmux(当然iterm,zsh等是标配啦)。tmux的一个好处是可以管理多个会话,保存会话以便后续再重连,以及方便的复制模式,在复制模式下可以用vi快捷键移动指标选中频幕内容,然后复制选中的内容。
- 浏览网页:Cvim 或 Vimium。 上手非常简单:https://youtu.be/t67Sn0RGK54
- 钉钉聊天:抱歉,这个目前无能为力。。。。钉钉快捷键设置只提供了最基本的几个功能。。
Vim
这是个很大的话题,就不展开讲了,总之学vim贵在坚持。稍微提几点:
- 要整体性地了解vim中的一些概念:编辑模式、移动命令、文件管理、文件间跳转、缓冲区列表、寄存器、宏、查找替换等等。
- 学会使用帮助。 在vim中输入 :h help, 好好看一下vim中的help应该如何使用。
-
一些插件
- vimwiki, 个人首推,可以搭建自己的一个wiki知识库, 纯vim环境书写文档,语法类似markdown。并且创建文档,文档之间的跳转都非常非常方便。而且文档可以渲染成html,可以自己写一些CSS样式定制渲染。
- ctrl-p: 快速查找文件
- nerdTree: 目录
- 插件推荐、排名: https://vimawesome.com/
- 强烈推荐书籍:《Practical Vim》 https://book.douban.com/subject/10599776/ ,书写的很好,看中文版的即可,因为是实操性的东西,很好理解。每天看5个Item,一个月即可看完。
IntelliJ
Jetbrain系列的IDE的快捷键还是设计的非常好的,而且他们家不同类型的IDE使用的快捷键是同一套,不管你用IntelliJ 写Java,Pycharm写Python 还是Goland 写Go或者其他的系列,他们的很多快捷键都是相通的。下面重点说说IntelliJ中的常用操作如何做到无鼠标。
- 首先装上IdeaVim插件,这样大部分的文件内编辑就可以纯键盘了。
-
Navigation:
- ⌘+o, ⌘+⇧+o: 定位文件
- ⌘+E, ⌘+⇧+E:最近浏览编辑过的文件
- ⌘-1,2,3,4...: 不同panel间切换
- ⌘+⇧+F12: 编辑页全频展示
- ⌘+⇧+a: 查找action
- ⌘+⌥+b: 从接口向下跳到实现
- ⌘+u: 从实现向上跳回接口
-
编辑
- ⌥+⏎:修改提示,还可以自动声明变量
- ⌘+n: 在 project-panel 中,新建文件
- ⌘+shift+n: 临时测试可以使用 scratch-file, 不会放入到项目,会自动删除
- ⌘+n:在文件内,可以生成 setter、getter、toString 等
- ⌘+⏎+L: 格式化code
- ⌘+-: 收起当前方法实现
- ⌘+⇧+-:收起期所有方法实现
- ⌘+y: quick definition, 不离开编辑页
-
代码提交
- ⌘+K: commit代码
- ⌘+⇧+K:push代码。
另外需要说明的一点是,提交代码会出现多个button让你选择,这时候可以使用Tab来切换选中的button,用空格来确认选择,这样整个提交代码的过程就都能纯键盘操作了。
当然IntelliJ的快捷键还有很多很多,我的建议是不用刻意去记,使用过程中经常用到的功能,可以去查询一下对应的快捷键,如果没有的话,也可以自己去定义相应的快捷键,比如我自己设置的两个常用的快捷键,一个是定位当前编辑文件所在的目录:
这样我就能在Project这个panel中使用⌘+⌃+S 快速定位到我目前在编辑的文件
另外一个很常用的快捷键是重新导入jar包:
这样每次我编辑完pom之后,只要按一下⌘+I,就可以重新导入依赖了(不开auto import是因为自动import它不知道我何时编辑完了,就一直再重新导入,严重拖慢速度)
对于哪些是自己经常使用的功能,可以查看IntelliJ中的 【Help】 -> 【Productivity Guide】, 会列出你最近常用的功能,以及使用次数,这样就能根据自己使用情况去 KeyMap里搜一搜对应的快捷键啦
总结
最后还是要强调一下,纯键盘开发的目的是效率,不要为了纯键盘而纯键盘,就像很多人投入太多精力研究Vim或者Emacs一样,其实说到底它只是一个编辑器,没必要花费太多的精力在上面,玩的再溜又如何,能帮你升职加薪吗,能解决实际业务问题吗? 磨刀不误砍柴工,使用好自己的工具,产出有价值的结果,不要陷入到研究工具的误区里去。