在线精简cheatsheet备查表:intellij.linesh.tw
Github项目:intellij-mac-frequent-keymap

Intellij的快捷键多而繁杂,从官方推荐的keymap,到网络上很多的个人总结,资料可谓浩如烟海。相反,如何从众多的快捷键中快速找到使用频率最高、对工作效率提升最多的快捷键,则成为一个难题。这个cheatsheet速查表,正是为了解决Intellij快捷键学习过程可能遇到的这个问题。

这一年里我拉拉杂杂地阅读了许多Intellij快捷键与使用理念的资料,不管是官方的keymap还是个人的博客,结合平时的工作和个人项目经验,我尝试整理并总结其中最精华的部分,同时通过这个子集来总结、思考与提高效率相关的思维模式和理念。分享出来,希望能顺便给学海中的同学提供有益的帮助。

目标读者和人群

  • 想要快速上手Intellij快捷键的同学。多而没有重点的其他资料不用看了,优先学习最精华最常用的快捷键,才是节省时间,提高效率之道
  • 想要不断对比、精简你的快捷键集合的同学。毕竟快键辣么多,记得最有用的就好
  • 备查。这个是最主要的目的,存个书签或者记个网址,需要的时候只要有网络,随时跨平台可查
  • 尝试提高思维层级,从理念和思维模式的视角来看待编程和工具的同学

理念与思维模式

IDE与电脑作为工具,永远是高效完成特定工作的辅助。因此我们所谓的高效有了上下文:以完成工作为主,在这个过程工具的作用是辅助工作。那么,所谓高效也即是问,如何更专注于工作本身,更高效地完成工作呢?在一系列落地的快捷键背后,这个围绕快捷键所展开的工作系统,其实质性提高工作效率的理念和思维模式本身是什么呢?我的回答是:

  • 更高层次的抽象
  • 声明式使用

更高层次的抽象

更高层次的抽象,指的是从代码、从语言本身特性的层面思考编程,而非单纯的文本或者字符串。要把思维从“把这五行代码剪切并复制到一个新的方法里”等把代码当成无意义字符的低层面活动,转变到以作为语言核心的要素和特性为单位的思考,比如类、变量、方法、重命名、重构、if-else、循环、可循环元素等。

在这方面,IDE提供的 Live Template重构(Refactoring)、部分后向声明等,都是这种思想的产物,允许你从更高的层级(语言特性、与Java高相关的重构)来思考代码,并尽量多地向上屏蔽细节。

声明式使用

声明式使用,指的是直接使用你完成工作所需要的元素(类、字段、方法等),让IDE为你自动补全缺少的声明或定义。这种思想同样贯穿这本工具集的始终,以更语义化(更高阶)的操作来使用工具。

在这方面,IDE提供的 后向声明(Postfix Auto Completion)自动补全(Auto Completion) 等,都是这种思想的产物。你不需要关注操作所在的上下文,IDE会为你补全,你需要关注的是工作和操作本身。

本cheatsheet如何通用?

像这种cheatsheet的记录,有可能会随时间或版本变迁而不再通用,过多的定制也可能使得追踪和维护成本增加。为了尽可能多地减少维护成本,尽可能长地保持这份cheatsheet的有效性,下列快捷键的选取遵循以下几个原则:

  • 仅列出Mac版的快捷键
  • 统一使用Mac OSX 10.5+版本的keymap作为基准
  • 原则上对作为基准的keymap只删不改,即可能删除不需要的快捷键,但非特殊原因则不会更改已默认启用的快捷键
  • 少部分确实需要更改的快捷键,我会采用*星号标明,并标明原因

快捷键精简子集

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

生产力(Productivity)

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

模板补全(Live Template)

敲完以下模板补全的keyword之后可以直接通过tab或回车触发模板补全,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

成吨提高开发效率:Intellij Shortcuts精简子集与思维模式的更多相关文章

  1. 提高开发效率的 Eclipse 实用操作

    工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个“器”.本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍.Eclipse快捷键用熟后,不用鼠标,便可进行编程开发,避免鼠标分 ...

  2. 合理使用webpack提高开发效率

    虽然公司有提供现成的脚手架工具,但是作为开发人员懂得必要的相关知识还是很重要的.这样有利于提高我们的开发效率,优化我们的代码. 关于npm scripts 什么是npm scripts npm 允许在 ...

  3. IDEA提高开发效率的7个插件

    IDEA提高开发效率的7个插件 1. 多行编辑 先来体验一下从xml文件拷贝字段新建实体对象 一般我们为了新建多表连接后映射的 ResultMap ,耗费不少时间,那么我们就来试一试这个多行编辑 表字 ...

  4. 如何利用 Visual Studio 自带工具提高开发效率

    Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢? 显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位. 如何显示 1. 工具 ...

  5. 善用VS中的Code Snippet来提高开发效率

    http://www.cnblogs.com/anderslly/archive/2009/02/16/vs2008-code-snippets.html http://www.cnblogs.com ...

  6. 实用手册:130+ 提高开发效率的 vim 常用命令

    Vim 是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器.这里收录了130+程 ...

  7. 10 款提高开发效率的 jQuery/CSS3 组件

    前端开发是一项十分繁琐而又耗体力的工作,如何更有效率的开发我们的应用,很多人会选择适当地使用一些jQuery插件.今天就要给大家分享10款可以提高开发效率的jQuery/CSS3组件.部分插件可以下载 ...

  8. 能够提高开发效率的Eclipse实用操作

    工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个“器”.本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍.Eclipse快捷键用熟后,不用鼠标,便可进行编程开发,避免鼠标分 ...

  9. tomcat免重启随意更改java代码 提高开发效率

    转载:http://developer.51cto.com/art/201012/241243.htm 做为了一个java开发人员,总是为因为要增加一个类,或是增加删除一个方法,甚至修改一个小处代码而 ...

随机推荐

  1. [开发笔记]GCC 分支预测优化

    #define likely(x) __builtin_expect(!!(x),1)#define unlikely(x) __builtin_expect(!!(x),0) 用于优化在做分支判断的 ...

  2. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  3. Javascript中的valueOf与toString

    基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下. t ...

  4. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): da.huying.usermanag ...

  5. 领域驱动设计实战—基于DDDLite的权限管理OpenAuth.net

    在园子里面,搜索一下“权限管理”至少能得到上千条的有效记录.记得刚开始工作的时候,写个通用的权限系统一直是自己的一个梦想.中间因为工作忙(其实就是懒!)等原因,被无限期搁置了.最近想想,自己写东西时, ...

  6. Leetcode 笔记 117 - Populating Next Right Pointers in Each Node II

    题目链接:Populating Next Right Pointers in Each Node II | LeetCode OJ Follow up for problem "Popula ...

  7. 从零到有——我的OA如何成长

    早前发文说要分享,马上进入了财务系统的开发,拖到现在,见笑了. 我在月初离职了,所以到处跑,找工作,想想南京.苏州.无锡(去玩的).杭州(路过).上海.珠海.深圳.广州.觉得找工作也差不多尾声了,就留 ...

  8. 「标准」的 JS风格

    首先,这份 JS风格指南已经在我司的前端团队实行半年多了: 其次,在程序员的世界里,从入行到资深都需要面对几个世界级的难题,如: 世界上最好的编辑器是什么? 是用空格还是 TAB?用空格还特么衍生出 ...

  9. Swift -- 对AFN框架的封装

    Swift -- 对AFN框架的封装 一.封装AFN的目的 简单的说: 解耦 日常工作中,我们一般都不会去直接使用AFNetWorking来直接发送网络请求,因为耦合性太强,假设有多个控制器都使用AF ...

  10. 解析大型.NET ERP系统 单据编码功能实现

    单据编码是ERP系统中必备的功能,用于生成各种单据的流水号,常常借助于日期时间等字符来生成一个唯一的单据号码.从软件的角度来说,就是为生成数据表的主键值(参考编号),从用户的角度来说,就是给业务单据制 ...