0. 背景
作为一个 Java 程序员,我相信,绝大多数朋友日常都是用 idea 来写代码。
Idea 作为宇宙第一 Java IDE,提供了丰富、强大的功能,可以让你写 Java 代码快得飞起来。
遗憾的是,很多人都不知道如何开启 idea 隐藏的强悍功能。下面博主将带你一起,探究 idea 背后这些强悍到逆天的功能。
特别说明:
本文所有实操基于 Mac OSX 系统,其他操作系统(如 Windows,Linux 等)没有实践过,不做讲解。
非非常说明:
虽然文章标题有点『标题党』的嫌疑,但是内容绝对不是标题党文章,干货满满,请耐心往下看,看完没收获直接来广州打我!
1. ToC(目录)
本文将从以下几个方面,展开讲解:
2. keymap
keymap,就是 idea 的快捷键配置方案,本身没有太多的内容,之所以放在最前面,是因为后续的讲解,很大程度上都依赖于 keymap。
建议将 keymap 设置为默认的,比如 Mac 下默认的 keymap 就是 Mac OS X 10.5 +。
这样当你想使用某个快捷键而 Google 时,多数时侯,找到的答案都使用的是默认的快捷键方案,不然的话,别人的快捷键你不一定适用。
3. 常用插件
接下来为你们推荐一些常用的插件,有了这种插件的加持,会让你的工作事半功倍。
为了便捷你们索引,先把推荐的插件列到下边:
下面将逐一介绍这种常用的插件。
3.1 Lombok
插件官网:plugins.jetbrains.com/plugin/6317…
这个插件,相信不用多做解释,写过 Java 的朋友都晓得,JavaBean 代码里有一堆的 set/get,tostring 等方式,非常臃肿。有了 Lombok 之后,再也不用写那些臃肿的代码了。
3.2 Key Promoter X
插件官网:plugins.jetbrains.com/plugin/9792…
这个插件的作用是告诉你,你做的某个操作,有什么快捷键可以替代。
有些时侯,我们想要做某件事情,比如我想打开 idea 自带的 terminal,但是我并不知道有快捷键可以用,于是我只能眼巴巴的用键盘去点开 terminal。
有了这个插件后,当你用键盘去点 terminal 时,右下角会有个弹窗提示,告诉你,其实你没必要用键盘去点,直接使用快捷键 Alt + F12 就可以了,如下图:
怎么样,是不是很贴心!
3.3 Alibaba Java Coding Guide
插件官网:plugins.jetbrains.com/plugin/1004…
这个插件,也不做过多解释。阿里巴巴官方推出了 Java 开发指南,这个插件就是检测你的代码是否符合指南规范的,直接安装吧,相信阿里巴巴!
举个简单的事例,当我要获取当前时间戳的时侯,我如此写:long time1 = new Date().getTime(),这个时侯,它还会有报错提示,告诉你直接使用 long time2 = System.currentTimeMillis():
怎么样,是不是很智能,又学到了一招吧!
3.4 CamelCase
插件官网:plugins.jetbrains.com/plugin/7160…
这个插件的作用是对字符串做格式上的转化: 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。
如下所示:
当然,鉴于多数情况下,Java 不存在 kebab-case/space case 即 中划线/空格 连接方法,你还可以在配置中设置,格式切换时除去她们,这样切换时,按 Alt + Shift + u 的次数就可以多些,配置方式如下:
3.5 GenerateAllSetter
插件官网:plugins.jetbrains.com/plugin/9360…
这绝对是一个非常值得推荐的插件,能够 save your life !
在我们写代码的时侯,经常会有各类 dto 之间的转化,比如从数据库的 User 转化为后端的 UserVO。
如果是你自己写,先不说写一堆 get/set 累不累,最关键的是,我怕写漏了某个数组!比如 User 有 10 个数组,最后到 UserVO 只有 9 个了,哭都没地方哭!
总不能一个个数吧?这时候 GenerateAllSetter 就下来挽救你了!他可以手动的帮你生成 UserVO 所有的 set 方法,更智能的是,如果 UserVO 和 User 字段名一样,它就会手动帮你生成 get!如下图所示:
当我须要将 User 转化为 UserVO 时,在我写好方式申明后,按下 Alt + Enter,选中 Generate setter getter converter,他就手动帮我写好转化的代码了!
怎么样,是不是 6 得飞起,妈妈再也不用害怕我写漏数组了!
题外话:
可能有些人会有疑问,不就是个 DTO 转化吗?我用 BeanUtils 等工具不香吗?还真是不香,这玩意有很多坑,性能是一方面,关键是当数组名不一样时,很难察觉到
3.6 Cosy Alibaba Cloud AI Coding Assistant
之前推荐的是 Codota,但是 Codota 已经停用了,官方推荐使用 tabnine,个人使用了下 tabnine,感觉不好用:
基于以上缘由,不再推荐使用 Codota,也不推荐使用 tabnine。替代方案是阿里巴巴出品的 Cosy:
相比于其他 AI Coding Assistant,Cosy 最大的优势就是免费、安全(完全基于离线模式,不会上传任何代码和个人信息)。
功能上也比较强悍,贴个图参考下:
插件官网:
关于 AI 插件,目前我就推荐这一个,确实比较强悍(好多 AI 插件,名曰人工智能,其实人工残障,还卡得要死)。贴一个 gif 大家体味下:
当你想初始化一个 List 的时侯,再你敲完 List 后,你就可以发觉,后面的 users = new ArrayList(); 就有智能提示了,都不用敲了。
当然里面举的反例只是 Codota 很小的一个智能提示,其他更多留给你们探求。
总之,很多时侯,它的智能提示很强悍,能省去你不少时间,省得你一个个敲代码了!
3.7 GsonFormat
插件官网:plugins.jetbrains.com/plugin/7654…
这个插件的作用,就是按照 json 字符串,自动生成 Java bean。先放个官网的 gif 吧:
这里使用的快捷键是:Alt + s。
这里须要注意的一点是,gsonformat 插件支持自定义 json 反序列化库,比如 jackson,gson 等,可以在 setting 里面设置,如下图:
3.8 Grep Console
插件官网:plugins.jetbrains.com/plugin/7125…
这个插件的作用是对 idea 默认的 Console(控制台)做提高,比如默认的控制台输出的日志,不管日志级别是哪些,都是没有颜色分辨的。有了这个插件后,ERROR、WARN 等不同级别的日志,会展示成不同的颜色,方便我们一眼就看下来有没有错误日志等。
默认的配色方案如下:
具体的颜色配置以及更多的功能,可以参考插件官网。
3.9 Maven Helper
插件官网:plugins.jetbrains.com/plugin/7179…
平时我们的 maven 项目,会碰到一些依赖冲突的问题,比较无法排查和定位。有了这个插件后,能够便捷的显示下来有什么依赖冲突,而且还可以手动加上 exclude,操作界面如下图:
3.10 RestfulToolKit
插件官网:plugins.jetbrains.com/plugin/1029…
这个插件的作用是,帮助我们快速导航到指定 url 请求路径的 controller 方法。平时我们的项目会写大量的 controller 以及方式,来处理不同的 url 请求。但是当代码多了之后,很难找到某个 url 是那个方式处理的,有了这个插件,就可以快速按照 url 导航到具体的方式。
快捷键是 cmd + \。
3.11 Rainbow Brackets
插件官网:plugins.jetbrains.com/plugin/1008…
这是一款提高 idea 颜值的插件。我们写的代码,经常会有很多嵌套的括弧,比如 get1(get2(get3())),这么多的括弧嵌套,而且颜色都还一样,会看得人眼花缭乱。有了这个插件,会给每一对括弧都显示上不同的颜色,增加逼格的同时,也较便捷的看出什么括弧是一对:
好了,到这儿,推荐的常用插件就介绍完了。大家可以按照须要,自由安装什么插件。记住:插件虽好,可不要嗜酒哦!
如果你也有好用的插件推荐,欢迎联系我,一起阐述学习!
4. 高效配置
Idea 确实是一款十分特别优秀的 Java IDE。所谓好马还得好鞍配,下面介绍的一些院校配置,可以让你使用 idea 的时侯,更舒适、更高效!
4.1 import 自动导出包和删掉无用的 import
设置路径:Editor -> General -> Auto Import。勾选其中的 add on the fly 和 optimize on the fly,如下图:
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),如下图:
4.3 保存文件时手动除去末尾空格
设置路径:Editor -> General -> Other。Strip trailing space on Save 选 All,如下图:
4.4 智能提示不分辨大小写
设置路径:Editor -> General -> code completion。取消勾选 match case,如下图:
4.5 idea terminal 选中复制
在 Tools->Terminal 中把 "Copy to clipboard on selection" 选中,如下图:
5. 超好用的快捷键
这一章节,将推荐一些超好用的快捷键。有了这种快捷键的加持,不仅还能节约你大量的时间,还能让你写出更优秀的代码!
5.1 万能提示利器:Alt + Enter
如果你只想记住一个快捷键的话,我推荐这个!Alt + Enter 是一个万能提示器,可以用说是好用到爆燃!
只要 idea 有标红、标黄或标灰的地方,你按下 Alt + Enter,基本上都还能手动修补。
举个简单的反例,我的这个方式有多余的参数s2,idea 有置灰提示:
它告诉我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(),如下动图:
但是,如果你敲完 .touper 后,不是回车而是按 Tab,那么 idea 就会用 toUpperCase() 直接替换 toLowerCase():
这次,没有多余的 toLowerCase() 了,不用自动去删掉了!
5.3 自动生成代码:Cmd + N
按下Cmd + N 后,有提示可以手动生成代码,如getter/setter/toString 等。
5.4 智能结束当前句子:Cmd + Shift + Enter
按下 Cmd + Shift + Enter 后,可以智能结束当前句子,比如手动给行尾加上分号,自动给 if 加上括弧等,可以自己多尝试下。
5.5 文件导航快捷键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。
我们用动图来分别展示下这两种形式:
怎么样?用postfix,写 for 循环是不是很快!(中间用到 sout 缩写是前面 LiveTemplate 要讲的)。使用方式也很简单,只须要在写完 100 后按下 ".",idea 就手动出现提示了!
Postfix,正如其名,就是在前面按下 ".",然后出现相应的提示,这些提示是 idea 默认自带的,不需要任何配置,开箱即用!
遗憾的是,idea 的 postfix 支持的功能是固定的,不能自定义,我们可以在 Editor -> General -> Postfix Comletion 中查看全部的 postfix 功能,如下图:
再来几个动图演示下:
这里使用的是 .null 和 .nn postfix。
可以看见,我们不需要先写变量申明,然后被方式调用形参,可以使用 .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 关键字,就可以帮你实现前面的功能,我们通过一个动图来展示下:
如果你也想通过一些关键字,来生成一段代码,那么你可以添加自定义 Live Template。比如我们写单元测试时,需要写一个 test 方法,如下:
@Test
public void test() {
}
我不想每次都写那么一大堆,我想输入 pvt 时,他能手动生成这个技巧。下面我就演示下怎样添加 Live Template 来实现这个功能。
步骤如下:
在 Editor -> Live Templates 页面,点击右上角的 +,选择 2. Template Group,创建一个组,如下图:
输入你想要取的组名,比我我这儿叫 demo。
选中你刚刚创建的 demo 组,再次点击右上角的 +,选择 1. Live Template,创建一个 Live Template,
点完后,会出现如下页面,需要你配置下:
一共有 5 个关键点,我都标下来了:
然后,你就可以使用 pvt 这个简写来生成代码了,如下图:
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 就搞定了,如下动图:
你看,连带方式名和所有的参数列表,全部一键写好!那么是怎么做到的呢?用到了 Live Template 变量 和 groovy 脚本。
详细步骤如下:1 新建一个 Live Template, 取名叫 logp,(步骤参考上一节,略过),如下图:
2 Template Text 中输入如下:
log.info("$METHOD_NAME$: $METHOD_PARAMETERS$", $METHOD_PARAMETERS_VALUES$);
$END$
3 点击 Edit Variables,上面的 METHODNAMEMETHOD_NAMEMETHODNAME 等就是变量,可以配置这种变量的值,配置如下图:
groovyScript("_1.collect { it + '={}' }.join(', ')", methodParameters())
groovyScript("_1.collect { it }.join(', ')", methodParameters())
groovy 脚本里的 methodParameters(),引用的是 idea 自带的方式,即获取方式参数列表。
怎么样,是不是很强悍!Live Template 的更多玩法,留给你们自己去实现。
7.3 福利说明
在我的 idea 中,已经配置好了大量开箱即用的 Live Template,比如:
还有更多,就不一一列出了。如果想获取这种开箱即用的 Live Template, 可以关注我的公众号,回复关键字 LiveTemplate,就可以了。
发送给你的是 idea setting.zip,包括了 Live Template,以及前文介绍的一些高效配置,都在这个上面了,你直接导出就可以用了。
8 结束语
这篇文章,可以说是满满的干货,前前后后好几个夜晚都在加班写!尤其是动图部份,为了做到最好的演示疗效,录制了好多遍!
如果你看完也有点收获,可以 点赞+关注+分享 三连走一波,谢谢!
(本文首发鹈鹕)
我是梅小西,最近在某东南亚电商公司做 DevOps 的相关事情。从本期开始,将相继分享基于 Jenkins 的 CI/CD 工作流,包括 Jenkins On k8s 等。