[福利] 成吨提高开发效率:Intellij Shortcuts 精简子集与思维模式

1,673 阅读8分钟

本仓库是一个经过精简的Intellij快捷键子集,并提供在线的cheatsheet快速备查表:

intellij.linesh.tw

Intellij的快捷键多而繁杂,处女座的我也由此阅读了大量的文档和资料,从官方推荐的keymap到市面能看到的大多数资料和总结。这个cheatsheet,是我结合平时的工作和个人项目经验,整理总结出的一套最常用、最精简的快捷键子集。适合以下场景/人群使用:

  • 想要快速上手Intellij快捷键的同学。毕竟大而无当,等于无用。优先学习最高效最常用的快捷键,节省时间,提高效率
  • 想要不断对比、精简你的快捷键集合的同学。只记住最有用的快捷键
  • 备查。这个是最主要的目的,存个书签或者记个网址,需要的时候只要有网络,随时可查
  • 尝试提高思维层级,从理念和思维模式的视角来看待编程和工具

Intellij快捷键精简子集

本章主要分七个部分展开总结:生产力大杀器、编辑、语言要素生成、导航、重构、搜索、运行时。版本控制的部分未录入,原因是我倾向于使用命令行提交,而非IDE内置VCS支持。见仁见智。最后一栏是该操作在IDEA中的操作名称,可以在keymap中检索对应的action/shortcut找到。

关于快捷本身的理念和思维模式,可以参考我在 Mac优雅的工具集——Intellij快捷键segmentfault 上展开的讨论。总结起来就两句话:更高的抽象层次声明式使用。同时这本书旨在探讨如何更高效地使用Mac进行编程工作,有兴趣的朋友可前往阅读反馈。

生产力(Productivity)

Operation Mac OSX 10.5+ Comments Description
模板补全 ⌘+J 插入一个符合某结构特征的模板,详解见下 Insert live template
命令查询 ⇧+⌘+S 以名称的形式查询某个操作或快捷键,是声明式编程思想的完美体现 Find actions
意图预测与智能帮助 ⌥+Enter 简单重构、移除死代码、结构调整、自动导包等 Show intention actions

模板补全(Live Template)

敲完以下模板补全的keyword之后可以直接通过tab或回车触发模板补全,$1/$2...是需要你填充的模板变量。

Operation Mac OSX 10.5+ Keyword Expands to Comments
判空 ifn if ($1 == null) {} 后向声明也有同样功能,读者可拣顺手的用
判非空 inn if ($1 != null) {}
创建索引循环 fori for (int $1 = 0; $1 < $2; $1++) {}
添加TODO todo // TODO: $1 非常声明式的用法
添加Fixme fixme // FIXME: 7/19/16 $1 同上
类型关系判定 inst if ($1 instanceof $2) {}
System.out sout System.out.println($1); 必须入手的黑技能,调试打log的时候非常有用

后向声明(Postfix Completion)

后向声明是JetBrains系IDE的一项新功能,旨在减少光标经常性的前后移动,提高开发效率,形成这样的编程思维:先使用元素,再考虑变量声明或结构补全。它的主要功能是根据当前元素的属性,提供可能的行为建议,例如使用if-else结构包围、判(非)空、格式化、进行类型转换等。因此,后向声明所能提供的选择视元素(主要是变量)的不同而不同。

所有元素都拥有的一些后向声明选择,仅选择我认为常用的:

Operation Postfix Completion Keyword Expands To Comments
变量声明 element.var Type $name = element; 必备技能,声明式使用的典范
转换为类字段 element.field private $Type element; 刚发现的
将当前变量打印到输出流 element.sout System.out.println(element);
返回当前值 element.return return element;
类型转换 element.cast (($Type) element)

然后,对于特定的元素类型,有的后向声明还有非常实用的选项,比如字符串的判空、布尔值的if-else、列表的循环等等:

ElementType Operation Postfix Completion Keyword Expands To Comments
字符串 判空 string.null if (string == null) {}
判非空 string.notnull if (string != null) {}
整数 分支 int.switch switch (int) {}
布尔值 如果为真 boolean.if if (boolean) {}
如果为假 boolean.else if (!boolean) {}
反义 boolean.not !boolean
列表 循环元素 lists.for for (Type element : lists) {} 非常常用
带索引循环 lists.fori for (int i = 0; i < lists.size(); i++) {}

编辑(Editing)

Operation Mac OSX 10.5+ Comments Description
基本代码补全 ^+Space 一般都用这个补全,变量命名时及方法补全时常用 Code/Completion/Basic
智能补全 ^+⇧+Space 是否有必要记得两个快捷键?可以统一设成一个 Code/Completion/SmartType
语句补全 ⇧+⌘+Enter 直接补全当前语句,在括号特别多时非常有用 Complete Current Statement
从上方开始一行 ⌥+⌘+Enter Start New Line Before Current
从下方开始一行 ⇧+Enter Start New Line
上移/下移一行 ⇧+⌥+↑/↓ 上下移一行。一般用于以单行出现的元素,否则会破坏元素间的关系 Move Line Up/Down
上移/下移一个块 ⇧+⌘+↑/↓ Move Statement Up/Down
选中一个代码块 ⌥+↑ 常用 Extend Selection
取消代码块选中 ⌥+↓ Shrink Selection
重复当前行 ⌘+D Duplicate Current Line or Block
复制并且不删除当前行 ⌘+C Edit/Copy
剪切当前行并复制到粘贴板 ⌘+X Edit/Cut
关闭当前标签 ⌘+W 跟通常编辑器快捷键一致 Edit Tabs/Close
注释当前行 ⌘+/ 随手一注释 Comment with Line Comment
优化import ^+⌥+O 没啥用 Optimize Imports
格式化代码 ⌥+⌘+L 没啥用 Reformat Code

语言要素生成(Language Elements/Features)

Operation Mac OSX 10.5+ Comments Description
测试、方法生成 ^+Enter/ ⌘+N 非常常用于创建测试方法、构造方法、覆写接口方法、覆写基类方法 Code/Generate
创建类、文件、目录 ⌘+N 常用 Code/Generate
创建override方法 ^+O 有用 Override Methods
创建接口方法实现 ^+I 有用 Implement Methods

导航(Navigation)

Operation Mac OSX 10.5+ Comments Description
转到方法/字段的声明 ⌘+B 调试跟代码都很常用 Navigation/Declaration
转到方法/字段的实现点 ⌥+⌘+B 同上,常用 Navigation/Implementation(s)
转到方法/字段类型的类定义处 ⇧+⌘+B/ ⇧+^+B 常由下两个快捷键取代 Navigation/Type Declaration
当前类与单元测试间跳转 ⇧+⌘+T 非常方便 Navigate/Test
跳转到当前类的基类 ⌘+U 配套食用,效果更佳 Super Method
类继承体系 ^+H Type Hierarchy
方法继承层次 ⇧+⌘+H Method Hierarchy
当前方法调用链 ^+⌥+H Call Hierarchy
本类及所有基类方法列表 ⌘+F12 File Structure
类/方法/字段定义的快速预览 ⌥+Space/ ⌘+Y 小览实现,一般可以看到方法/字段参数、返回值、前几行实现,快速的信息足够了 Quick Definition
方法文档快速预览 ^+J 看文档,我不常用 Quick Documentation
方法参数快速预览 ⌘+P 常用 Parameter Info
前一个标签 ⇧+⌘+[ 导航常用,不过是否能以其他方式取代,比如声明式使用类查找⌘+O等。仍在探索 Select Previous Tab
后一个标签 ⇧+⌘+] Select Next Tab
往上一级 ⌥+⌘+←/ ⌘+[ 调代码,跟方法体系时,非常有用,下同 Navigate/Back
往下一级 ⌥+⌘+→/ ⌘+] Navigate/Forward
转到下一个错误或警告 F2 代码见红时,常用此快捷键快速定位,并配合万能快捷键⌥+Enter快速修复 Next Highlighted Error
提示错误信息 ⌘+F1 不常用 Error Description
意图预测与智能帮助 ⌥+Enter 简单重构、移除死代码、结构调整、自动导包等 Show intention actions
project视图 ⌘+1 有时导航项目结构时常用,不知是否有替代方案 Other/Project
search/find视图 ⌘+3 除了这几个,其他视图都不常用 Other/Find
run视图 ⌘+4 有时开关测试视图 Other/Run
debug视图 ⌘+5 Other/Debug
VCS视图 ⌘+9 Other/VCS
terminal视图 * ⌘+0 自己改过,一是和各种视图快捷键保持一致,另外是原生的⌘+F12实在有点难按 Other/Terminal
隐藏所有工具视图 ⇧+⌘+F12 同时开了工程和终端视图时一键回编程页面 Hide All Tool Windows
跳转到第...行 ⌘+L 属于细节型的活,能少用就多思考替代方案 Navigate/Line...

重构(Refactor)

Operation Mac OSX 10.5+ Comments Description
复制类/目录等 F5 Refactor/Copy
移动类/目录等 F6 Refactor/Move
元素(类/方法/变量/…)重命名 ⇧+F6 最常用的重构快捷键之一了吧 Refactor/Rename
类/方法签名修改 ⌘+F6 Refactor/Change Signature
字段(类级别)抽取 ⌥+⌘+F Extract/Field
常量(类级别)抽取 ⌥+⌘+C Extract/Constant
变量(方法级别)抽取 ⌥+⌘+V Extract/Variable
参数(方法级别)抽取 ⌥+⌘+P Extract/Parameter
方法抽取 ⌥+⌘+M 最常用的重构快捷键之一 Extract/Method
方法内联 ⌥+⌘+N Refactor/Inline

搜索(Searching)

Operation Mac OSX 10.5+ Comments Description
搜索 ⌘+F 通常快捷键 Find/Find
替换 ⌘+R 正则发挥作用的地方 Find/Replace
查找引用点 ⌥+F7 重构或调试的时候经常用到,使用频率高 Find/Find usages
查找类 ⌘+O 声明式编程,使用频率很高的快捷键 Navigate/Class
查找文件 ⇧+⌘+O 同上,使用频率很高 Navigate/File
查找symbol ⌥+⌘+O 基本不用,不知道与上两者有什么区别 Navigate/Symbol
全项目文本搜索 ⇧+⌘+F 搜索引用点和文本出现、改bug时非常有用 Find/Find in path
查找下一个 ⌘+G Find/Find Next
查找上一个 ⇧+⌘+G Find/Find Previous

运行时(Runtime)

Operation Mac OSX 10.5+ Comments Description
编译 ⌘+F9 调bug时可能是忘了编译最新代码 Make Project
运行(最近一个测试) ^+R 非常有用,有时可能节省在测试代码和源文件之间的切换 Run/Run
调试 ^+D Run/Debug
打断点/取消断点 ⌘+F8 Toggle Breakpoints
查看所有断点 ⇧+⌘+F8 View Breakpoints
跳入 F7 Run/Step Into
跳出 ⇧+F8 Run/Step Out
智能跳入(当前行多个调用时) ⇧+F7
跳过(下一步) F8 Run/Step Over
求表达式值 ⌥+F8 Evaluate Expression
停止调试 ⌘+F2 Run/Stop

声明

  • 本子集的选择标准是主观的。可以通过其他工具实现的不录入,比如VCS;我觉得没用的功能不录入,比如书签等;对于生产率贡献感觉不是特别大的不录入,比如想不到。目前,我使用Intellij IDEA写Java代码最多
  • 本cheatsheet全部以Intellij Mac OSX 10.5+这套keymap为基准,除了一个快捷键以外,全部使用该模板默认快捷键,以保持最大限度通用性、减少维护成本

Thanks to...

  • 主页样式乃是 Ruoran Liu上班时抽出一点时间设计调整搞定的。毕竟我CSS还很菜~