纯键盘开发实战(Mouseless Programming)-阿里云开发者社区

开发者社区> zjunothing> 正文

纯键盘开发实战(Mouseless Programming)

简介: 作为一个践行Mouseless Programming的开发者,来谈谈自己在日常工作中是如何做到「几乎」不用鼠标的。 在说具体的「技巧」之前,先聊一聊纯键盘开发的几个原则: 1. **动机**, 动机要单纯,纯键盘开发不是为了耍酷, 你的动机应该是提高「效率」:) 2. **键盘只是工具,思想才是关键**, 代码和问题先想清楚再下手,想清楚远比写的快重要! 3. **键盘不要经
+关注继续查看

作为一个践行Mouseless Programming的开发者,来谈谈自己在日常工作中是如何做到「几乎」不用鼠标的。

在说具体的「技巧」之前,先聊一聊纯键盘开发的几个原则:

  1. 动机, 动机要单纯,纯键盘开发不是为了耍酷, 你的动机应该是提高「效率」:)
  2. 键盘只是工具,思想才是关键, 代码和问题先想清楚再下手,想清楚远比写的快重要!
  3. 键盘不要经常换, 选择一款适合自己的,然后用熟它就好!什么黑轴、茶轴,filco、cheryy等等的都是浮云啊,折腾这些是在浪费生命啊。
  4. 使用统一的一套快捷键, 快捷键一致,可以无缝切换,减少不同软件不同快捷键的记忆成本。比如vi的一套快捷键,各种IDE和文本编辑器都会有vi模式或插件,chrome也有插件支持vi快捷键浏览网页。
  5. 快捷键不要刻意去记, 经常用到的功能,才去查它的快捷键,在使用过程中去记,记住常用的即可。

下面就来聊聊具体的(奇)技(淫)巧吧:

键盘设置

  1. 原则:双手不要离开主键区。也就是双手几乎一直在asdf,jkl;键区。 比如你去按方向键,这样就是双手离开了主键区。
  2. 重新映射方向键: 上一条提到不要去按键盘上的方向键(太远了),所以需要重新映射一下方向键,使用hammerspoon工具,可以全局重新映射方向键,我倾向使用 【ctrl-hjkl】来作为方向键,相信大部分vim党都会这么映射吧,用熟之后还是很舒服的。
  3. ctrl键和Cap键的键位互换:Cap键占据了一个很好的位子(左手小拇指一划就能碰到),然而却没什么卵用(大写用Shift+字母啊)。而Ctrl键使用的频率太高了,却藏的太远,所以强烈强烈建议互换ctrl和Cap按键的位置,换完之后熟悉一天你就不会再想换回来的,相信我。mac上提供了很便捷的方式修改这两个按键,入口在 【系统设置】-> 【键盘】:kdd-1.gif

    • 说下题外话,其实早期的一些键盘的ctrl键就是在现在的Caps键的位置的,特别是Unix/Linux系统的键盘,因为重度使用Ctrl键,如Ctrl-c:终止命令,Ctrl-d:EOF等,所以ctrl键必须要在一个很方便按到的位置。
      2.jpg
    • 如果你使用的是这款键盘---HHKB,那么恭喜,你就不用设置了,它压根儿就没有Caps键。另外安利一下这款键盘,它非常小巧,携带方便,而且可以直接架在笔记本的键盘区替换笔记本键盘。 唯一的缺点就是: 贵
      123.png
  4. 可以设置多个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来打开文件了。重度用户可能会编写一些工作流,比如直接搜stackoverflow,搜maven中央仓库等等。
  • 窗口管理:Spectacle。经常需要用鼠标移动窗口,调整窗口大小? 有了Spectacal之后几乎不会在手动鼠标调整窗口。看一下快捷键就一目了然了。
    4.jpg
  • Ternimal管理:tmux(当然iterm,zsh等是标配啦)。tmux的一个好处是可以管理多个会话,保存会话以便后续再重连,以及方便的复制模式,在复制模式下可以用vi快捷键移动指标选中频幕内容,然后复制选中的内容。
    5.jpg
  • 浏览网页:Cvim 或 Vimium。 上手非常简单:https://youtu.be/t67Sn0RGK54
  • 钉钉聊天:抱歉,这个目前无能为力。。。。钉钉快捷键设置只提供了最基本的几个功能。。
    456.png

Vim

这是个很大的话题,就不展开讲了,总之学vim贵在坚持。稍微提几点:

  1. 要整体性地了解vim中的一些概念:编辑模式、移动命令、文件管理、文件间跳转、缓冲区列表、寄存器、宏、查找替换等等。
  2. 学会使用帮助。 在vim中输入 :h help, 好好看一下vim中的help应该如何使用。
  3. 一些插件

    • vimwiki, 个人首推,可以搭建自己的一个wiki知识库, 纯vim环境书写文档,语法类似markdown。并且创建文档,文档之间的跳转都非常非常方便。而且文档可以渲染成html,可以自己写一些CSS样式定制渲染。
    • ctrl-p: 快速查找文件
    • nerdTree: 目录
    • 插件推荐、排名: https://vimawesome.com/
  4. 强烈推荐书籍:《Practical Vim》 https://book.douban.com/subject/10599776/ ,书写的很好,看中文版的即可,因为是实操性的东西,很好理解。每天看5个Item,一个月即可看完。

IntelliJ

Jetbrain系列的IDE的快捷键还是设计的非常好的,而且他们家不同类型的IDE使用的快捷键是同一套,不管你用IntelliJ 写Java,Pycharm写Python 还是Goland 写Go或者其他的系列,他们的很多快捷键都是相通的。下面重点说说IntelliJ中的常用操作如何做到无鼠标。

  1. 首先装上IdeaVim插件,这样大部分的文件内编辑就可以纯键盘了。
  2. Navigation:

    • ⌘+o, ⌘+⇧+o: 定位文件
    • ⌘+E, ⌘+⇧+E:最近浏览编辑过的文件
    • ⌘-1,2,3,4...: 不同panel间切换
    • ⌘+⇧+F12: 编辑页全频展示
    • ⌘+⇧+a: 查找action
    • ⌘+⌥+b: 从接口向下跳到实现
    • ⌘+u: 从实现向上跳回接口
  3. 编辑

    • ⌥+⏎:修改提示,还可以自动声明变量
    • ⌘+n: 在 project-panel 中,新建文件
    • ⌘+shift+n: 临时测试可以使用 scratch-file, 不会放入到项目,会自动删除
    • ⌘+n:在文件内,可以生成 setter、getter、toString 等
    • ⌘+⏎+L: 格式化code
    • ⌘+-: 收起当前方法实现
    • ⌘+⇧+-:收起期所有方法实现
    • ⌘+y: quick definition, 不离开编辑页
  4. 代码提交

    • ⌘+K: commit代码
    • ⌘+⇧+K:push代码。
      另外需要说明的一点是,提交代码会出现多个button让你选择,这时候可以使用Tab来切换选中的button,用空格来确认选择,这样整个提交代码的过程就都能纯键盘操作了。

当然IntelliJ的快捷键还有很多很多,我的建议是不用刻意去记,使用过程中经常用到的功能,可以去查询一下对应的快捷键,如果没有的话,也可以自己去定义相应的快捷键,比如我自己设置的两个常用的快捷键,一个是定位当前编辑文件所在的目录:
7.jpg
这样我就能在Project这个panel中使用⌘+⌃+S 快速定位到我目前在编辑的文件

另外一个很常用的快捷键是重新导入jar包:8.jpg
这样每次我编辑完pom之后,只要按一下⌘+I,就可以重新导入依赖了(不开auto import是因为自动import它不知道我何时编辑完了,就一直再重新导入,严重拖慢速度)

对于哪些是自己经常使用的功能,可以查看IntelliJ中的 【Help】 -> 【Productivity Guide】, 会列出你最近常用的功能,以及使用次数,这样就能根据自己使用情况去 KeyMap里搜一搜对应的快捷键啦
9.jpg

总结

最后还是要强调一下,纯键盘开发的目的是效率,不要为了纯键盘而纯键盘,就像很多人投入太多精力研究Vim或者Emacs一样,其实说到底它只是一个编辑器,没必要花费太多的精力在上面,玩的再溜又如何,能帮你升职加薪吗,能解决实际业务问题吗? 磨刀不误砍柴工,使用好自己的工具,产出有价值的结果,不要陷入到研究工具的误区里去。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
kafka-Java-SpringBoot-product API开发
前面讨论过如何安装kafka集群群及优化配置的问题,现在需要使用kafka集群,由于我们项目使用的是SpingBoot,故做一个inject到IOC容器的kafka-Java-SpringBoot-API,废话补多少,直接上代码:第一步,制定初始化类属性内容,最好赋初值,这样在使用的时候就不需要进行判空类:ProducerConfiguration import org.
1772 0
《阿里巴巴Java Spring Boot 2.0开发实战课程》课程视频和例子代码下载
《阿里巴巴Java Spring Boot 2.0开发实战课程》系列免费课程 视频 ,例子代码
3338 0
+关注
2
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载