纯键盘开发实战(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一样,其实说到底它只是一个编辑器,没必要花费太多的精力在上面,玩的再溜又如何,能帮你升职加薪吗,能解决实际业务问题吗? 磨刀不误砍柴工,使用好自己的工具,产出有价值的结果,不要陷入到研究工具的误区里去。

目录
相关文章
|
16天前
|
IDE 开发工具 图形学
Visual Basic游戏开发:进入娱乐世界的编程
【4月更文挑战第27天】本文引导初学者使用Visual Basic进行游戏开发,强调其易学性、图形支持和Windows兼容性。通过搭建开发环境、学习基础语法,从“猜数字”到“贪吃蛇”游戏实例,逐步进阶。此外,探讨了性能优化、引入游戏引擎和多媒体音效等高级技巧,鼓励开发者用VB开启游戏编程之旅,创造自己的娱乐世界。
|
7月前
|
存储 消息中间件 API
游戏编程之五 DirectSound
游戏编程之五 DirectSound
42 0
|
Linux C++
Framework笔记 | 引子
Framework笔记 | 引子
|
IDE Java 开发工具
纯键盘开发实战(Mouseless Programming)
作为一个践行Mouseless Programming的开发者,来谈谈自己在日常工作中是如何做到「几乎」不用鼠标的。 在说具体的「技巧」之前,先聊一聊纯键盘开发的几个原则: 1. **动机**, 动机要单纯,纯键盘开发不是为了耍酷, 你的动机应该是提高「效率」:) 2. **键盘只是工具,思想才是关键**, 代码和问题先想清楚再下手,想清楚远比写的快重要! 3. **键盘不要经
2100 0
|
存储 Windows
《Visual Basic 2012入门经典》---- 2.7 快速而简单的编程入门指南
编程很复杂。所有东西都互相关联,因此很难将每个编程概念分开然后用线性方式加以说明。相反,在学习一个主题的过程中,通常在学到另一个主题前就需要接触它。正如第1章指出的,我尽量避免这种前向参考,但有些概念需要你首先熟悉一下。这些主题在对应的章节中都将介绍,但阅读本书之前你必须至少听说过。
1379 0
|
C#
《Programming WPF》翻译 第7章 6.视频和3-D
原文:《Programming WPF》翻译 第7章 6.视频和3-D 虽然详细地讨论视频和3-D超越了这本书的范围,但是获得这些特征的支持是值得的。 视频由MediaElement类型支持。这个元素可以被添加到UI树的任何地方。
894 0
|
C# 数据可视化
《Programming WPF》翻译 第9章 6.我们进行到哪里了?
原文:《Programming WPF》翻译 第9章 6.我们进行到哪里了? 只有当任何内嵌控件都没有提供你需要的底层行为时,你将要写一个自定义控件。当你写一个自定义控件,你将要使用到依赖属性系统,来提供支持数据绑定和动画的属性。
844 0