写在文章开头
近期有听到很多的读者朋友对于IDEA一些常见操作不是很了解,所以打算重新梳理一下这篇文章分享一下笔者日常开发的配置和操作,笔者希望通过这篇的介绍,可以让读者对于IDEA各种配置和操作都能够熟练掌握和运用。

Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源项目 Java Guide 的维护者之一,熟悉 Java 也会一点 Go ,偶尔也会在 C源码 边缘徘徊。写过很多有意思的技术博客,也还在研究并输出技术的路上,希望我的文章对你有帮助,非常欢迎你关注我的公众号: 写代码的SharkChili 。
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注 "加群" 即可和笔者和笔者的朋友们进行深入交流。
前置知识
需要提前补充一下,笔者后续大量的配置操作都会涉及设置界面,这里介绍一下IDEA
的设置快捷键为ctrl+alt+s
键,后文介绍IDEA
常见的配置就不再赘述这一点了。

基础配置
取消默认打开上次项目
日常开发都会打开不同的项目,初次安装IDEA
之后,每次打开IDEA
都会开启上一次启动的项目,所以我们需要进入设置找到File | Settings | Appearance & Behavior | System Settings
,然后取消勾选Reopen last project on startup
。

设置鼠标调整字体大小
在开发过程中可能需要放大或者缩小界面,需要选择File | Settings | Editor | General
,然后勾选 Change font size (Zoom) with Ctrl+Mouse Wheel
即可,因为笔者的屏幕足够大所以就没有设置这个选项,读者可按需取用。

设置统一编码格式
按照笔者的团队规范,所有的项目或者环境都一律使用UTF8
,所以配置IDEA
是也需要考虑到这一点,进入设置界面只有通过搜索框搜索encoding
选项,将所有涉及编码的选项都设置为UTF8
。

设置自动导包
进入设置界面然后通过File | Settings | Editor | General | Auto Import
即可找到自动引包的配置界面,勾选Optimize imports on the fly (for current project)

设置显示TAB栏文件数量
设置界面选择File | Settings | Editor | General | Editor Tabs
,通过tab limit选项即可设置你的tab
栏大小,需要注意的是超过这个数量后IDEA
就会前面的TAB
销毁。

过长或自适应屏幕的换行
如果希望编码过程中代码对那些溢出屏幕的代码换行显示的话,可以通过File | Settings | Editor | General
勾选Use soft wraps in editor
即可。

可以看到我们输入长字符串的时候他就会自动换行了

IDEA自动跟随文件
如果希望点击tab栏上的一个文件时,左侧的项目文件结构会跟随移动,我们可以勾选下图所示的选项:

注意IDEA2019是选择这个选项。

可以看到我们选择了UserDto
后,左边导航栏也跟随导航栏移动了

日志插件
通过File | Settings | Plugins
找到grep console
并安装,即可实现不同等级日志显示不同颜色,增加日志的可读性:

安装完成后可以发现不同级别的日志显示的颜色是不同的:

时序图插件
某些业务场景需要通过时序图追踪流程的场景,我们建议安装时序图插件:

安装完成后,即可通过右键生成时序图,便于我们阅读源码

翻译插件
打开插件市场选择translation
,完成后对着单词按ctrl+shift+y
即可翻译成中文。这里建议读者使用百度的翻译,步骤很简单,点击下方申请一个,登录一下即可获取,然后复制粘贴到应用id和密钥中就行了。

常见快捷键
批量赋值
有时候我们在开发中会遇到一个对象需要set多个值,我们就可以安装generateAllSetter
这个插件:

安装完成并重启IDEA
后,对着需要进行set
的对象键入alt+enter
即可根据需要完成set,以笔者为例,我们要设置默认值,所以我们就选择with default value
选项:

他就会帮我们自动生成相应的set:

复制类名
在IDEA
中我们可以直接对着类名Ctrl+C
,即可将类名粘贴到我们的代码中:

粘贴复制历史
在开发过程中你可能会复制无数个代码,或者在其他应用中复制过各种数据,如果你希望粘贴曾经复制过的数据,你可能会再次到达被复制的要用中复制在粘贴到当前文件中。 在IDEA强大的支持下,我们完全可以通过ctrl+shift+v
,找到自己的复制历史,如下图所示,例如我们想复制修改配置这个文本,只需键盘键入1即可:

简单粘贴
常规cv代码,不管任何位置,IDEA都会自动格式化。 如下情况,当你查阅网上一些代码时,可能会复制到如下代码

若用常规cv则会出现下图情况

这时候就可以使用ctrl+alt+shift+v
的简单粘贴,配合alt
以及按住滚轮清除行号了,如下图所示

格式化代码
这个是必备的操作了,键入ctrl+alt+l
即可将代码规整。
偷懒删除
Ctrl+x
为剪切,这里我们可以在指定行任意位置使用快捷键作为删除使用。
复制当前行到下一行
当你编码的时候常遇到setname,setage等情况,我们可以CTRL+D
第一个set语句复制多句进行修改,它的复制位置将会出现在所复制的行的下方

选定多行
shift+方向键
选定需要的代码行 (注:选中结果如下图也没事,粘贴结果照样为整行)

行首行尾跳转
使用键盘的home
或者end
键即可在当前代码首位来回跳转

单词间跳转
有时候我们希望在每个单词之间来回跳转,使用Ctrl+左右
即可实现
选中当行指定数量单词
ctrl+shift+左/右
即可实现选定当前行中指定数量的单词,如下图,我们希望选定指定行到达Executors之前的单词

我们可以键入Ctrl+shift+右
,如下图

下划线转驼峰、全大写等
找到插件市场安装CamelCase
并完成安装:

完成后键入shift+alt+u
即可实现各种格式的变量转换。
快速查找当前文件变量
键入ctrl+f
即可完成对应变量的查找,同时IDEA
还支持匹配大小写,仅仅匹配查结果和仅仅匹配单词、匹配正则等选项:

快速替换当前文件变量
输入ctrl+r
即可配合replace
或者replaceAll
即可实现逐个替换或者批量替换:

创建测试用例快捷键
有时候我们编写完代码需要建立测试用例,过去我们可能是在Test目录手动创建XXXTest,使用IDEA我们只需Ctrl+shift+T
,即可快速生成对当前类的某个方法生成测试方法,如下图选择create new Test

再勾选对应的方法即可

这时候我们就会生成这个方法的测试用例了

解决报错问题
对准错误的代码键入alt+enter
找到错误的处理方式按回车键:

导入指定包
使用Alt+enter
就可以手动选择需要的包了。
生成构造方法或者get set方法
对准代码类点击alt+enter
按照提示回车选择constructor
:

然后按需选择字段即可:

可以看到指定参数的构造方法就生成了:

生成get和set方法同理:

多行删除
按住alt +鼠标左键
,再使用del或者back按钮即可

多行复制
- 光标点击复制的起始位置

shift+左右上下
选择行

- 找到需要的位置
Ctrl+V
即可

移动多行
有时我们希望将多行代码进行移动,我们可以使用shift+方向键选定行

然后使用alt+shift+上下
键即可完成代码批量上下移动了。

函数或方法间的来回跳转
找到对应的方法键入ctrl+b
或者鼠标左键。
查看todo代办事项窗口
如下图点击todo一栏即可看到代码中出现todo字样的代码
查看当前类的方法列表等
我们在查看源码的时候需要查看某些函数,但是忘记忘记函数名是什么,这时候我们就可以使用structure界面来查看java文件的函数列表
在对应java文件下,使用快捷键 Alt+7
(注:需要使用键盘左边的数字键,右边不起作用,具体原因不详)

在曾经停留过的地方来回跳转
先Ctrl+B
查看函数具体实现


ctrl+alt+左
回到刚刚查看方法调用处的位置

ctrl+alt+右
再次跳转回去查看方法的具体实现

重启tomcat
对于某些需要我们手动配置tomcat的项目来说,可以使用CTRL+F10热部署tomcat
后缀补全
for循环
输入.for
选择第一个选项,同理原生for循环用fori,方向循环用forr即可
可以看到代码直接生成了循环的代码

判空或者非空判断
如下图,输入.null
或者.notnull
即可

更多后缀表达式点击到下图所示位置查阅

布尔值判断
输入.if
,如果要使用!flag
的话,我们可以首先.not
一下生成!flag
,再.if
代码就会生成if(!flag){}

格式化字符串
在String类后面.format
即可,如下图选择第2个选项

将变量设置为同步锁
在变量后面输入.sync
就可以看到了

于是就会生成这样的代码

异常捕获
在对应代码后面.try
即可

可以看到代码就这样生成了

强制转换
输入.cast
或者.castvar
即可实现强制转换

可以看到代码最终生成这样

快速导航
切换tabs工作栏代码
alt+左/右
即可实现IDEA上方的tab栏来回切换

定位最近访问文件列表
当你写在业务层
和控制层
来回切换时,可以使用ctrl+e
配合回车实现来回切换

查找文件
这是笔者最常用的快简介,连续按两下shift输入关键字即可查找需要的文件,如下所示

代码调试
使用IDEA进行JDK源码debug
找到下图位置,将相关勾选去掉即可

进入下一行
点击文中图标或者键入F8即可调试下一行

进入方法
点击下图图标或者键入F7进入当前代码具体执行的方法中进行调试

结束运行或进入下一断点
点击下图按键或者键F9
结束运行或进入下一断点

跳转至光标所在处
点击图中所示按键,或者键入Alt+F9
即可跳到光标所在处的代码了

可以看到代码已经跳转到光标所在处了

跳转至jdk包方法或自带方法中

断点调试
取消在某断点停止
如下图所示,当去掉enable的时候,断点下次将不会被打到:

取消所有断点
选择mute breakpoint会将所有的断点置黑,开启调试模式也不会在断点停下:

条件断点
如下图,我们希望在第35次循环停下,只需在对应位置插个断点,右键鼠标设置条件即可

可以看到断点在对应条件时停止下来了,其余的情况都不会停在断点上

设置异常断点
有时候我们代码会在运行到某一处报错,如下图

这时候我们就可以设置一个异常断点,让代码在报错的位置停止下来,首先我们从控制台中复制错误的类型,然后找到debug设置

添加一个java错误断点

添加我们刚刚复制的错误类型,并点击OK,这时候该断点就设置完成了


再次运行代码,就会发现,代码在运行报错的地方停止下来了,这时候我们就可以分析代码查看报错的原因了

设置条件监控
我们希望在debug的控制台可以实时看到变量的变化,我们就可以如下图所示点击加号,添加要监控的数据

如下图,这样我们就可以在调试过程中看到代码的不断变化了

分析
我们希望debug时可以看到当前变量的值,就可以使用alt+f8
进行查看和计算

可以看到我们还可以进行各种运算或者判断等:

可以看到对应的分析结果会在下方输出:

方法断点
在方法上插入断点,直接按下F9,方法执行结束后就会在return语句中停下,方便我们调试整个代码

接口断点
我们在接口定义处插上断点:

调试调用接口方法时,IDEA
就会在接口实现类处停顿,如下图2所示:


属性断点
在属性处打上断点,idea就会在外部代码对其进行set的时候停留在set处

可以看到在程序进行set
设置时,方法在这个属性的set
上停住了:

强制返回
有时候我们希望调试过程中已经知道了bug所在,希望代码不在继续执行去操作资源,例如下面这段代码就会操作redis数据,有些读者可能会用强制停止应用的方式结束,某些情况下这种方式还是会操作资源

正确的方法在下图所示位置,点击强制返回并设置返回值


快速回到断点停顿处
点击下图所示按钮即可看到断点停在那个位置

流式编程调试
在流终端处插上一个普通断点,点击图中所示按钮即可按需查看流的变化了


其他注意事项
有时候我们调试会看不到代码的堆栈信息,很多时候其实都是我们手抖导致了,如果读者又发现问题可以参考这篇文章即可解决问题:blog.csdn.net/qq_20597727...
热部署
我们希望修改的代码不需要重启服务器就能生效,在idea中无需任何插件即可实现这一点
首先以debug模式启动项目

完成后,我们修改代码,可以看到此时代码灰的代表不会执行。我们使用Ctrl+F9
编译一下

可以看到,代码更新了

调试多线程
我们有这样一段代码,有一个继承Runnable的的类
typescript
public class Task implements Runnable {
@Override
public void run() {
System.out.println("当前线程名 "+Thread.currentThread().getName());
}
}
还有4个执行该方法的线程
ini
@Test
void test() {
Runnable r = () -> System.out.println(Thread.currentThread().getName());
Thread t1 = new Thread(new Task(), "t1");
Thread t2 = new Thread(new Task(), "t2");
Thread t3 = new Thread(new Task(), "t3");
Thread t4 = new Thread(new Task(), "t4");
t1.start();
t2.start();
t3.start();
t4.start();
t1.join();
t2.join();
t3.join();
t4.join();
}
在task
上插断点,断到t2线程:

我们手动将调整为t3,结果当前执行线程没有发生任何变化:

我们将debug
改为按照thread
进行debug
:

再次进行调试就可以按需切换线程:

而且,我们按f9
也不会一口气执行完,而是一个个线程经过断点再结束:

集成GIT
展示版本控制历史
如下图,找到version control
即可

将项目交给git管理
点击下图选项就会初始化git,此时代码就可以进行版本管理了:

查看版本变化
对着版本控制中现实变化的文件Ctrl+D
即可

这时候就会有个弹窗出来现实我们本次修改对之前版本做了那些修改

与远程仓库关联
github上远程创建仓库不要创建readme和ignore会给与远程仓库关联的命令

追加提交
有时候我们上次提交会遗漏一些东西,我们可以勾选图中的选项,提交代码即可对上次提交做追加 (注:这个操作仅对未push到远程仓库的提交有效)

Code review
用点一个版本按住shift键再点击一个版本就可以查看这两个版本之间项目的变化

选择user就可以查看筛选指定人对项目的改动

导航栏增加Git的Push键
可以参考笔者这一篇的配置步骤
live template
概述
如下图所示,打出勾选的字母就会弹出白色框中的代码段,所以如果我们有希望可以快捷输出的代码也可以自己制作一个代码模板。

自制代码模板
- 创建代码模板组
- 编写下方代码段,需要注意的是可变的表达式要放在$$符号中
- 设置代码类型为java代码
- 是设置可变变量值对应的变量,这里
CLASSNAME
为当前类文件的类名

- 测试
IDEA其他插件推荐
- resultful接口辅助工具:RestfulToolkit

lombok
maven helper
:解决日常maven依赖冲突问题必备神器:

小结
我是 sharkchili ,CSDN Java 领域博客专家 ,开源项目---JavaGuide contributor ,我想写一些有意思的东西,希望对你有帮助,如果你想实时收到我写的硬核的文章也欢迎你关注我的公众号: 写代码的SharkChili 。 因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注 "加群" 即可和笔者和笔者的朋友们进行深入交流。
参考
关于调试HashMap源码的小心得(这篇是我耗费了断断续续两天才得出来的):blog.csdn.net/vigoss77/ar...
Intellij IDEA 默认打开上次项目设置与取消设置:blog.csdn.net/u011442726/...