0. 背景
作为一个 Java 程序员,我相信,绝大多数同学日常都是用 idea 来写代码。
Idea 作为宇宙第一 Java IDE,提供了丰富、强大的功能,可以让你写 Java 代码快得飞起来。
遗憾的是,很多人都不知道怎么开启 idea 隐藏的强大功能。下面博主将带你一起,探究 idea 背后那些强大到逆天的功能。
特别说明:
本文所有实操基于 Mac OSX 系统,其他操作系统(如 Windows,Linux 等)没有实践过,不做讲解。
非特别说明:
虽然文章标题有点『标题党』的嫌疑,但是内容绝对不是标题党文章,干货满满,请耐心往下看,看完没收获直接来北京打我!
1. ToC(目录)
本文将从以下几个方面,展开讲解:
- keymap
- 常用插件
- 高效配置
- 超好用的快捷键
- 神器:Postfix
- 终极神器:Live Template
2. keymap
keymap,就是 idea 的快捷键配置方案,本身没有太多的内容,之所以放到最前面,是因为后续的讲解,很大程度上都依赖于 keymap。
建议将 keymap 设置为默认的,比如 Mac 下默认的 keymap 就是 Mac OS X 10.5 +。
这样当你想使用某个快捷键而 Google 时,多数时候,找到的答案都使用的是默认的快捷键方案,不然的话,别人的快捷键你不一定适用。
3. 常用插件
接下来为大家推荐一些常用的插件,有了这些插件的加持,会让你的工作事半功倍。
为了方便大家索引,先把推荐的插件列到下面:
- Lombok
- Key Promoter X
- Alibaba Java Coding Guide
- CamelCase
- GenerateAllSetter
- Codota AI Autocomplete
- GsonFormat
- Grep Console
- MavenHelper
- RestfulToolKit
- RainbowBrackets
- Mybatis Plugin
下面将逐一介绍这些常用的插件。
3.1 Lombok
插件官网:https://plugins.jetbrains.com/plugin/6317-lombok
这个插件,相信不用多做解释,写过 Java 的同学都知道,JavaBean 代码里有一堆的 set/get,tostring 等方法,非常臃肿。有了 Lombok 之后,再也不用写这些臃肿的代码了。
3.2 Key Promoter X
插件官网:https://plugins.jetbrains.com/plugin/9792-key-promoter-x
这个插件的作用是告诉你,你做的某个操作,有哪些快捷键可以代替。
有些时候,我们想要做某件事情,比如我想打开 idea 自带的 terminal,但是我并不知道有快捷键可以用,于是我只能傻乎乎的用鼠标去点开 terminal。
有了这个插件后,当你用鼠标去点 terminal 时,右下角会有个弹窗提示,告诉你,其实你没必要用鼠标去点,直接使用快捷键 Alt + F12
就可以了,如下图:
怎么样,是不是很贴心!
3.3 Alibaba Java Coding Guide
插件官网:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines
这个插件,也不做过多解释。阿里巴巴官方推出了 Java 开发手册,这个插件就是检查你的代码是否符合手册规范的,直接安装吧,相信阿里巴巴!
举个简单的例子,当我要获取当前时间戳的时候,我这么写:long time1 = new Date().getTime()
,这个时候,它就会有报错提示,告诉你直接使用 long time2 = System.currentTimeMillis()
:
怎么样,是不是很智能,又学到了一招吧!
3.4 CamelCase
插件官网:https://plugins.jetbrains.com/plugin/7160-camelcase
这个插件的作用是对字符串做格式上的转化: kebab-case, SNAKE_CASE, PascalCase, camelCase, snake_case or space case 等。
典型的应用场景是,比如我们数据库里面的字段,用的是下划线的格式,但是 Java 里面的字段,用的是驼峰的格式。
我们怎么保证不会因为手残导致数据库字段和 Java 字段对不上呢?比如数据库字段是 your_name,一不小心 Java 里写成了 youName。
当你遇到问题的时候,估计查到哭都查不出来,Java 里面的字段少了个 'r'。
这种情况下,CamelCase 插件就派上用场了。使用快捷键 Alt + Shift + u,就可以在各种格式之间切换了,很容易就可以把 your_name 变成 yourName。
如下所示:
file
当然,鉴于多数情况下,Java 不存在 kebab-case/space case 即 中划线/空格 连接方式,你还可以在配置中设置,格式切换时去掉他们,这样切换时,按 Alt + Shift + u 的次数就可以少些,配置方法如下:
file
3.5 GenerateAllSetter
插件官网:https://plugins.jetbrains.com/plugin/9360-generateallsetter
这绝对是一个特别值得推荐的插件,能够 save your life !
在我们写代码的时候,经常会有各种 dto 之间的转化,比如从数据库的 User 转化为前端的 UserVO。
如果是你自己写,先不说写一堆 get/set 累不累,最关键的是,我怕写漏了某个字段!比如 User 有 10 个字段,最后到 UserVO 只有 9 个了,哭都没地方哭!
总不能一个个数吧?这时候 GenerateAllSetter 就出来拯救你了!他可以自动的帮你生成 UserVO 所有的 set 方法,更智能的是,如果 UserVO 和 User 字段名一样,它还会自动帮你生成 get!如下图所示:
file
当我需要将 User 转化为 UserVO 时,在我写好方法声明后,按下 Alt + Enter,选中 Generate setter getter converter,他就自动帮我写好转化的代码了!
怎么样,是不是 6 得飞起,妈妈再也不用担心我写漏字段了!
题外话:
可能有些人会有疑问,不就是个 DTO 转化吗?我用 BeanUtils 等工具不香吗?还真是不香,这玩意有很多坑,性能是一方面,关键是当字段名不一样时,很难察觉到
3.6 Codota AI Autocomplete
插件官网:https://plugins.jetbrains.com/plugin/7638-codota-ai-autocomplete-for-java-and-javascript
关于 AI 插件,目前我就推荐这一个,确实比较强大(好多 AI 插件,名曰人工智能,其实人工智障,还卡得要死)。贴一个 gif 大家感受下:
file
当你想初始化一个 List<String> 的时候,再你敲完 List<String> 后,你就可以发现,后面的 users = new ArrayList<>(); 就有智能提示了,都不用敲了。
当然上面举的例子只是 Codota 很小的一个智能提示,其他更多留给大家探索。
总之,很多时候,它的智能提示很强大,能省去你不少时间,省得你一个个敲代码了!
3.7 GsonFormat
插件官网:https://plugins.jetbrains.com/plugin/7654-gsonformat
这个插件的作用,就是根据 json 字符串,自动生成 Java bean。先放个官网的 gif 吧:
file
这里使用的快捷键是:Alt + s。
这里需要注意的一点是,gsonformat 插件支持自定义 json 反序列化库,比如 jackson,gson 等,可以在 setting 里面设置,如下图:
file
3.8 Grep Console
插件官网:https://plugins.jetbrains.com/plugin/7125-grep-console
这个插件的作用是对 idea 默认的 Console(控制台)做增强,比如默认的控制台输出的日志,不管日志级别是什么,都是没有颜色区分的。
有了这个插件后,ERROR、WARN 等不同级别的日志,会展示成不同的颜色,方便我们一眼就看出来有没有错误日志等。
默认的配色方案如下:
file
具体的颜色配置以及更多的功能,可以参考插件官网。
3.9 Maven Helper
插件官网:https://plugins.jetbrains.com/plugin/7179-maven-helper
平时我们的 maven 项目,会遇到一些依赖冲突的问题,比较难以排查和定位。有了这个插件后,能够方便的显示出来有哪些依赖冲突,而且还可以自动加上 exclude,操作界面如下图:
file
3.10 RestfulToolKit
插件官网:https://plugins.jetbrains.com/plugin/10292-restfultoolkit
这个插件的作用是,帮助我们快速导航到指定 url 请求路径的 controller 方法。平时我们的项目会写大量的 controller 以及方法,来处理不同的 url 请求。
但是当代码多了以后,很难找到某个 url 是哪个方法处理的,有了这个插件,就可以快速根据 url 导航到具体的方法。
快捷键是 cmd + \。
3.11 Rainbow Brackets
插件官网:https://plugins.jetbrains.com/plugin/10080-rainbow-brackets
这是一款提升 idea 颜值的插件。我们写的代码,经常会有很多嵌套的括号,比如 get1(get2(get3())),这么多的括号嵌套,而且颜色都还一样,会看得人眼花缭乱。有了这个插件,会给每一对括号都显示上不同的颜色,增加颜值的同时,也较方便的看出哪些括号是一对:
file
好了,到这里,推荐的常用插件就介绍完了。大家可以根据需要,自由安装哪些插件。记住:插件虽好,可不要贪杯哦!
如果你也有好用的插件推荐,欢迎联系我,一起探讨学习!
4. 高效配置
Idea 确实是一款非常非常优秀的 Java IDE。所谓好马还得好鞍配,下面介绍的一些高校配置,可以让你使用 idea 的时候,更舒适、更高效!
4.1 import 自动导入包和删除无用的 import
设置路径:Editor -> General -> Auto Import。
勾选其中的 add on the fly 和 optimize on the fly,如下图:
file
4.2 避免 import *
默认情况下,当 import 同一个包的 class 超过 5 个后,idea 会替换成 import *。但是通常我们不建议这样写,遵循的原则就是使用哪些就明确写引用哪些!
设置路径:Editor -> Code Style -> Java -> Imports。
将 Class count to use import with 、Names count to use static import with * 都设置为 999(默认都是 5),如下图:
file
4.3 保存文件时自动去掉末尾空格
设置路径:Editor -> General -> Other。
Strip trailing space on Save 选 All,如下图:
file
4.4 智能提示不区分大小写
设置路径:Editor -> General -> code completion。
取消勾选 match case,如下图:
file
5. 超好用的快捷键
这一章节,将推荐一些超好用的快捷键。有了这些快捷键的加持,不仅能够节省你大量的时间,还能让你写出更优秀的代码!
5.1 万能提示神器:Alt + Enter
如果你只想记住一个快捷键的话,我推荐这个!Alt + Enter 是一个万能提示器,可以用说是好用到爆炸💥!
只要 idea 有标红、标黄或标灰的地方,你按下 Alt + Enter,基本上都能够自动修复。
举个简单的例子,我的这个方法有多余的参数s2,idea 有置灰提示:
file
它告诉我s2 没有用到,那么我怎么安全删除这个s2 呢(直接删除的话,调用的地方会报错)?这时候,你只需选中s2,然后按下 Alt + Enter,就会发现有提示:
Safe delete s2
,然后就可以安全的删除 s2了,包括调用的地方。下面是动图:
结合前面的 GenerateAllSetter 插件,当我们 new 一个对象后,如果想生成这个对象所有的 setter 方法,也可以用 Alt + Enter:
选中变量名,按下 Alt + Enter,选择 Generate all setter 即可,如下图:
上面演示的只是 Alt + Enter 强大功能的冰山一角,更多特性留给大家探索,建议大家有事没事多按按 Alt + Enter ,说不定会有意外收获。
5.2 Tab 自动补全
这个功能就是用 idea 提示的候选项,替换你当前编辑的内容。
这么说可能有点抽象,我们来举个例子,假设我有下面的代码:
private static String get1(String s1) {
return return s1.toLowerCase().trim();;
}
我现在想把 toLowerCase 换成 toUpperCase,这时候我的光标在 s1 后面,如果我们直接敲 .touper... 然后回车,你回发现,toLowerCase并没有被替换,而是被移动到了 toUpperCase() 后面,然后你还得手动去删除 toLowerCase(),如下动图:
file
但是,如果你敲完 .touper 后,不是回车而是按 Tab,那么 idea 就会用 toUpperCase() 直接替换 toLowerCase():
file
这次,没有多余的 toLowerCase() 了,不用手动去删除了!
5.3 自动生成代码:Cmd + N
按下Cmd + N 后,有提示可以自动生成代码,如getter/setter/toString 等。
5.4 智能结束当前语句:Cmd + Shift + Enter
按下 Cmd + Shift + Enter 后,可以智能结束当前语句,比如自动给行尾加上分号,自动给 if 加上括号等,可以自己多尝试下。
5.5 文件导航快捷键
- Cmd + O:打开类
- 双击Shift:打开任意文件
- Cmd + E:最近打开文件列表
- Auto scroll from/to source:左侧文件列表与右侧Tab联动
6. 神器:Postfix
Postfix 可谓是 idea 隐藏的一大神技!Postfix 简单易用,但是功能强大,关键是一点也不复杂。相信学会了 postfix 后,你会后悔怎么没有早点 get 到这项技能。好了,废话不多说,我们直接开始。
我们来举个例子,假设现在需要写一个 for 循环,依次打印 [0, 100) 这个 100 个数,那么代码如下:
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
}
代码本身是比较简单的,关键是上面的 for 循环代码是怎么写出来的。我们有两种方式:挨个敲出来 和 用 postfix。
我们用动图来分别展示下这两种方式:
-
挨个敲出来
file -
用 postfix
file
怎么样?用postfix,写 for 循环是不是很快!(中间用到 sout 缩写是后面 LiveTemplate 要讲的)。使用方法也很简单,只需要在写完 100 后按下 ".",idea 就自动出现提示了!
Postfix,正如其名,就是在后面按下 ".",然后出现相应的提示,这些提示是 idea 默认自带的,不需要任何配置,开箱即用!
遗憾的是,idea 的 postfix 支持的功能是固定的,不能自定义,我们可以在 Editor -> General -> Postfix Comletion 中查看全部的 postfix 功能,如下图:
file
再来几个动图演示下:
-
快速写 if (obj == null) 和 if (obj != null) :
file
这里使用的是 .null 和 .nn postfix。
-
调用方法并快速声明、赋值给变量
file
可以看到,我们不需要先写变量声明,然后被方法调用赋值,可以使用 .var 直接一步到位。
关于其他的 postfix,留给大家探索!
7 终极神器:Live Template
上一章讲的 postfix,可以说是很强大了,可以提升不少写代码的速度。但是还是有点遗憾:postfix 毕竟数量有限,而且不是所有情况下都能使用。
那么接下来要讲的 LiveTemplate 就可以说是终极大杀招了,可以极大提升写代码的速度!
备注:
很多同学可能会简单的以为 LiveTemplate 不就是个代码模板吗?类似于其他代码编辑器里面的 Code Snippet ?如果你以为只有这点功能,那你真是小看了 Live Template。
下面将由浅入深讲解 Live Template。
7.1 添加 Live Template
我们经常在 Java 里面写 main 方法,也经常用 System.out.println() 等来输出。
你会发现,每次写这些很麻烦,有一大堆代码要敲,那么有没有简单快捷的方式呢?答案就是 LiveTemplate。
idea 自带的 main、sout 关键字,就可以帮你实现上面的功能,我们通过一个动图来展示下:
file
如果你也想通过一些关键字,来生成一段代码,那么你可以添加自定义 Live Template。比如我们写单元测试时,需要写一个 test 方法,如下:
@Test
public void test() {
}
我不想每次都写这么一大堆,我想输入 pvt 时,他能自动生成这个方法。下面我就演示下如何添加 Live Template 来实现这个功能。
步骤如下:
-
在 Editor -> Live Templates 页面,点击右上角的 +,选择 2. Template Group,创建一个组,如下图:
file
输入你想要取的组名,比我我这里叫 demo。
-
选中你刚才创建的 demo 组,再次点击右上角的 +,选择 1. Live Template,创建一个 Live Template,
file
点完后,会出现如下页面,需要你配置下:
file
一共有 5 个关键点,我都标出来了:
- 1 触发关键字,这里写 pvt,也就是说当你写下 pvt 的时候,就会有相应提示;
- 2 描述,这里写上你这个 pvt 的描述,方便提示的时候知道这个缩写是干什么的;
- 3 这里就是要自动生成的代码,我们这里写上 junit test 的模板代码;注意
$END$
是说生成代码后,光标会落到这里; - 4 推荐生成代码后,自动格式化下;
- 5 这里比较关键,需要你配置下这个缩写的生效范围,因为 idea 不止可以写 java,还可以写 kotlin, groovy, js 等,我们一般勾选 Java 即可,如下图:
file
然后,你就可以使用 pvt 这个缩写来生成代码了,如下图:
file
7.2 Live Template 进阶使用:变量和 groovy 脚本
上面说过,Live Template 不仅仅是用缩写去生成代码,Live Template 还支持定义变量、编写 groovy 脚本等方式,来增强功能,这个才是 Live Template 大杀器。
我们直接来看下演示。假设我有如下代码:
public void printLogDemo(String s1, int i2, boolean b3) {
}
我现在想把所有的参数都打下日志,变成下面这样:
public void printLogDemo(String s1, int i2, boolean b3) {
log.info("printLogDemo: s1={}, i2={}, b3={}", s1, i2, b3);
}
那我是要一个个去敲这些 s1={}, i2={}, b3={} 吗?如果参数很多呢?是不是很费劲,有了 Live Template 后,我只需要敲 logp 就搞定了,如下动图:
file
你看,连带方法名和所有的参数列表,全部一键写好!那么是如何做到的呢?用到了 Live Template 变量 和 groovy 脚本。
详细步骤如下:
1 新建一个 Live Template, 取名叫 logp,(步骤参考上一节,略过),如下图:
2 Template Text 中输入如下:
log.info("$METHOD_NAME$: $METHOD_PARAMETERS$", $METHOD_PARAMETERS_VALUES$);
$END$
3 点击 Edit Variables,上面的 等就是变量,可以配置这些变量的值,配置如下图:
- METHOD_NAME:选用 idea 自带的方法 methodName(),即获取方法名;
- METHOD_PARAMETERS:是一段 groovy 脚本,如下:
groovyScript("_1.collect { it + '={}' }.join(', ')", methodParameters())
- METHOD_PARAMETERS_VALUES:是一段 groovy 脚本,如下:
groovyScript("_1.collect { it }.join(', ')", methodParameters())
groovy 脚本里的 methodParameters(),引用的是 idea 自带的方法,即获取方法参数列表。
怎么样,是不是很强大!Live Template 的更多玩法,留给大家自己去实现。
7.3 福利说明
在我的 idea 中,已经配置好了大量开箱即用的 Live Template,比如:
- logp:上面解释的,自动打印参数列表;
- loge:抛异常时,自动打印参数列表和异常信息,日志级别为 ERROR;
- lstr:自动生成 List<String>
- aslist:自动生成 Arrays.asList()
- ifempty:自动生成 if (CollectionUtils.isEmpty())
还有更多,就不一一列举了。如果想获取这些开箱即用的 Live Template, 可以关注我的公众号,回复关键字 LiveTemplate,就可以了。
发送给你的是 idea setting.zip,包括了 Live Template,以及前文介绍的一些高效配置,都在这个里面了,你直接导入就可以用了。
8 结束语
这篇文章,可以说是满满的干货,前前后后好几个晚上都在加班写!尤其是动图部分,为了做到最好的演示效果,录制了很多遍!
如果你看完也有点收获,可以 点赞+关注+分享 三连走一波,谢谢!
本文由博客群发一文多发等运营工具平台 OpenWrite 发布
网友评论