• 用了 Intellij idea 这些插件和高效配置后,写代码快得飞起来,再也不用 996 加班了


    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 就可以了,如下图:

    file

    怎么样,是不是很贴心!

    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()
    file

    怎么样,是不是很智能,又学到了一招吧!

    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 的时候,再你敲完 List 后,你就可以发现,后面的 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 导航到具体的方法。

    file

    快捷键是 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了,包括调用的地方。下面是动图:
    file

    结合前面的 GenerateAllSetter 插件,当我们 new 一个对象后,如果想生成这个对象所有的 setter 方法,也可以用 Alt + Enter:
    选中变量名,按下 Alt + Enter,选择 Generate all setter 即可,如下图:
    file

    上面演示的只是 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 来实现这个功能。

    步骤如下:

    1. 在 Editor -> Live Templates 页面,点击右上角的 +,选择 2. Template Group,创建一个组,如下图:
      file

    输入你想要取的组名,比我我这里叫 demo。

    1. 选中你刚才创建的 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,(步骤参考上一节,略过),如下图:
    file

    2 Template Text 中输入如下

    log.info("$METHOD_NAME$: $METHOD_PARAMETERS$", $METHOD_PARAMETERS_VALUES$);
    $END$
    

    3 点击 Edit Variables,上面的 $METHOD_NAME$ 等就是变量,可以配置这些变量的值,配置如下图:
    file

    • 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
    • aslist:自动生成 Arrays.asList()
    • ifempty:自动生成 if (CollectionUtils.isEmpty($collection$))

    还有更多,就不一一列举了。如果想获取这些开箱即用的 Live Template, 可以关注我的公众号,回复关键字 LiveTemplate,就可以了。

    发送给你的是 idea setting.zip,包括了 Live Template,以及前文介绍的一些高效配置,都在这个里面了,你直接导入就可以用了。

    8 结束语

    这篇文章,可以说是满满的干货,前前后后好几个晚上都在加班写!尤其是动图部分,为了做到最好的演示效果,录制了很多遍!

    如果你看完也有点收获,可以 点赞+关注+分享 三连走一波,谢谢!


    我是梅小西,最近在某东南亚电商公司做 DevOps 的相关事情。从本期开始,将陆续分享基于 Jenkins 的 CI/CD 工作流,包括 Jenkins On k8s 等。

    如果你对 Java 或者 Jenkins 等感兴趣,欢迎与我联系,微信:wxweven(备注 DevOps),也欢迎关注:

    本文由博客群发一文多发等运营工具平台 OpenWrite 发布

  • 相关阅读:
    并发编程(一)------同步类容器
    以邮件附件的形式发送测试报告
    Page Object 设计模式-PO
    生成Html 测试报告
    PHP 限制访问ip白名单
    PHP trait与单例模式 (一次编写,到处使用)
    ubuntu编译安装swoole (存多版本php时)
    ubuntu中apache的ssl证书配置及url重写
    如何在Ubuntu上在多个PHP版本之间切换 (for swoole)
    lamp项目上线流程简述 (ubuntu16.04 )
  • 原文地址:https://www.cnblogs.com/wxweven/p/16316008.html
Copyright © 2020-2023  润新知