写在文章开头
近期很多读者朋友对 IDEA 一些常见操作不太了解,因此重新梳理这篇文章,分享我日常开发的配置和操作。同时,考虑到不同操作系统的用户,文章中补充了 macOS 系统下的配置和快捷键。
我是 SharkChili ,Java 开发者,Java Guide 开源项目维护者。欢迎关注我的公众号:写代码的SharkChili ,也欢迎您了解我的开源项目 mini-redis:github.com/shark-ctrl/...。
为方便与读者交流,现已创建读者群。关注上方公众号获取我的联系方式,添加时备注加群即可加入。
快速打开设置界面
在正式介绍 IDEA 配置和基本快捷操作前,先了解如何打开设置界面。默认情况下,点击左上角的 File 菜单,选择 Settings/Preferences 即可呼出 IDEA 的设置界面:

当然,设置界面也支持通过快捷键呼出:
- Windows:
Ctrl+Alt+S
- macOS:
Cmd+,
(Command + 逗号)
特殊说明,在 IDEA 大部分操作中,Windows 系统和 macOS 都有如下快捷键映射关系:
- Ctrl 键都对应 macOS 的 Cmd (⌘)
- Alt 键基本对应 macOS 的 Option (⌥)
从 Mac OS 快捷键的设计哲学来看,日常复制、粘贴、保存等操作的快捷键更靠近用户最方便使用的大拇指位置,这也是为什么 Commander 键最靠近大拇指。而 macOS 下的 Ctrl 键更像是保留底层操作的后门,适用于开发者的一些辅助选项,这也是为什么 Terminal 中跳转行首、行尾使用 Ctrl+A 和 Ctrl+E,系统内部进程则采用 Ctrl+C。
基础配置
Windows 11 重命名冲突问题 (macOS 用户可跳过)
很多读者反馈在系统升级到 Windows 11 后,IDEA 文件重命名快捷键 Shift+F6
失灵,原因是与 Windows 11 的输入法快捷键冲突。需要进行如下设置:
首先找到输入法,点击设置:

找到兼容性设置,将以前版本的输入法打开即可:

此时,IDEA 的重命名功能就恢复正常:

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

设置鼠标调整字体大小
在开发过程中可能需要放大或缩小界面,需要选择 File | Settings | Editor | General
,然后勾选 Change font size with Command+Mouse Wheel in
并勾选 All editors
:

此时,Ctrl 或 Cmd 配合鼠标滚轮即可放大缩小屏幕,如果需要还原,点击右下角的 reset 提示即可:

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

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

设置显示标签页文件数量
设置界面选择 Settings | Editor | General | Editor Tabs
,通过 Tab limit
选项即可设置标签页的大小,需要注意的是超过这个数量后,IDEA 会关闭前面的标签页。

过长代码自动换行
如果希望在编码过程中,对于超出屏幕的代码进行换行显示,可以通过 File | Settings | Editor | General
勾选 Use soft wraps in editor
,这样对应的文件过长就会换行:
可以看到,输入长字符串时它就会自动换行:
IDEA 自动跟随文件
如果希望点击标签页上的一个文件时,左侧的项目文件结构会自动选择该文件,可以勾选下图第四个选项,即"总是选择打开的文件"。这样点击什么文件,对应的侧边栏就会选中对应的文件。当然,这里也勾选如下选项便于文件管理:
- Open files with single click:单击打开选中文件
- Open directories with single click:单击打开目录

可以看到,此时选中 Counter 对应的标签页,侧边栏也选中了 Counter 这个 Java 文件:

忽略大小写匹配
IDEA 默认情况下编码关键字第一个字必须精确匹配,所以为了更快地输入需要的目标类,建议 IDEA 初始化设置为忽略大小写,需要通过 Settings | Editor | General | Code Completion
定位到 Match Case,将勾选去掉:

热更新配置
编码调试过程中经常需要修改代码,为避免频繁修改导致漫长的编译,我们建议配置 IDEA 热部署以快速完成功能更新,对应配置步骤需要如下三步:
第一步:打开 HotSwap 设置,勾选 "JVM will hang",同时将 "Reload classes after compilation" 选项设置为 "Always" 允许类重加载:

第二步:找到启动类的编辑选项,点击 "Edit Configuration",找到 "Modify options",将 "On 'Update' action" 和 "On frame deactivation" 都设置为 "Update classes and resources":

第三步:完成日常开发中的热更新,在调试期间完成编码修改后,点击此按钮即可完成功能更新:

关闭自动更新
打开设置选项,通过 Settings | Appearance & Behavior | System Settings | Updates
取消勾选 "Check IDEA update for stable release" 选项,让当前版本稳定发挥:

常用快捷键
批量生成 Getter 和 Setter
有时候在开发中会遇到一个对象需要设置多个值,我们可以安装 generate All Getter And Setter
这个插件:

假设现在有这样一个 User 类,希望能够快速生成所有字段的 getter 和 setter 操作:
arduino
@Data
public class User {
private int id;
private String name;
private String password;
private String email;
private String phone;
private String address;
}
对应的我们只需在实体后面键入 .all
即可输出下图提示,每个指令分别对应含义为:
- 所有字段 getter
- 所有字段 setter(不指定值)
- 所有字段 setter(指定默认值)

复制类名
在 IDEA 中我们可以直接对着类名按 Ctrl+C
,即可将类名复制到剪贴板:

粘贴复制历史
在开发过程中你可能会复制多个代码片段,或者在其他应用中复制过各种数据。如果你想粘贴曾经复制过的数据,IDEA 提供了强大的复制历史功能。
在 IDEA 强大的支持下,Windows 可通过 Ctrl+Shift+V
,对应 macOS 为 Cmd+Shift+V
,找到自己的复制历史,如下图所示。例如我们想复制"修改配置"这个文本,只需在键盘键入 1 即可选择:

简单粘贴
常规粘贴代码时,不管任何位置,IDEA 都会自动格式化。 如下情况,当你查阅网上一些代码时,可能会复制到如下代码:
若用常规粘贴操作则会出现下图情况:
这时候就可以使用上述简单粘贴,配合 Alt (mac 对应 ⌥)
拖动鼠标即可选中所有列并完成清楚,如下图所示:
格式化代码
这是必备的操作,键入 Ctrl+Alt+L
即可将代码规整,对应 macOS 指令为 Cmd+Option+L
偷懒删除
Ctrl+X
为剪切,可以在指定行任意位置使用快捷键实现删除该行。
复制当前行到下一行
当你编码的时候常遇到 setname,setage 等情况,我们可以使用 Ctrl+D
将第一个 set 语句复制多句进行修改,它的复制位置将会出现在所复制的行的下方

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

行首行尾跳转
使用键盘的 Home
或 End
键即可在当前代码行首、行尾来回跳转。需要特殊强调说明一下,在 MacBook 下没有专门的 Home 和 End 键,源于 Mac 极简的操作理念,这些操作的快捷键在 macOS 下分别是:
- 行首:
Cmd + 左方向键
- 行尾:
Cmd + 右方向键

单词间跳转
有时候我们希望在每个单词之间来回跳转,使用 Ctrl+左右方向键
即可实现
选中当行指定数量单词
这里 Windows 和 macOS 系统键位操作不同:
- Windows 系统是
Ctrl+Shift+左/右
- macOS 则是
Option+Shift+左/右
如果方向键不断推进即可实现选定当前行中指定数量的单词,如下图,我们希望选定指定行到达 Executors 之前的单词

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

下划线转驼峰、全大写等
找到插件市场安装 CamelCase
并完成安装:
完成后键入 Shift+Alt+U
(macOS 对应 Shift+Option+U
) 即可实现各种格式的变量转换。
快速查找当前文件变量
键入 Ctrl+F
即可完成对应变量的查找,同时 IDEA 还支持匹配大小写、仅匹配整个单词、匹配正则等选项:

快速替换当前文件变量
输入 Ctrl+R
即可配合 Replace
或者 Replace All
实现逐个替换或者批量替换:

创建测试用例快捷键
有时候我们编写完代码需要建立测试用例。过去我们可能是在 Test 目录手动创建 XXXTest,使用 IDEA 我们只需 Ctrl+Shift+T
,即可快速生成对当前类的某个方法生成测试方法,如下图选择 Create New Test
再勾选对应的方法即可
这时候就会生成这个方法的测试用例了
解决报错问题
对准错误的代码键入 Alt+Enter
找到错误的处理方式按回车键:

导入指定包
使用 Alt+Enter
就可以手动选择需要的包。
生成构造方法或者 getter、setter 方法
对准代码类点击 Alt+Enter
按照提示回车选择 Constructor
:

然后按需选择字段即可:

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

生成 getter 和 setter 方法同理:

多行删除
按住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+右
再次跳转回去查看方法的具体实现

后缀补全
for循环
输入.for
选择第一个选项,同理原生for循环用fori,方向循环用forr即可
可以看到代码直接生成了循环的代码

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

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

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

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

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

于是就会生成这样的代码

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

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

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

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

快速导航
切换标签页代码
Alt+左/右
即可实现 IDEA 上方的标签页来回切换

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

查找文件
这是我最常用的快捷键,连续按两下 Shift 输入关键字即可查找需要的文件,如下所示

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

进入下一行
点击工具栏图标或者键入 F8 即可调试下一行

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

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

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

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

跳转至 JDK 包方法或内置方法
点击下图按钮,或者键入 Ctrl+Shift+I
即可打开方法的定义:

查看函数或者变量的被调用处
这也是个蛮实用的技巧,以笔者最近阅读的Netty源码为例,笔者希望查看group方法被那些类所调用,对着该方法键入ALT+F7

于是在左下角就会看到所有的调用类以及调用的详情信息:

断点调试
禁用某个断点
如下图所示,当去掉enable的时候,断点下次将不会被打到:

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

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

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

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

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

添加一个java错误断点

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


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

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

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

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

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

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

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

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

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


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

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

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

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


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

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


其他注意事项
调试多线程
我们有这样一段代码,有一个实现 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();
try {
t1.join();
t2.join();
t3.join();
t4.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
在task
上插断点,断到t2线程:

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

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

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

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

集成 Git
展示版本控制历史
如下图,找到 Version Control
即可

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

查看版本变化
对着版本控制中显示变化的文件按 Ctrl+D
即可

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

与远程仓库关联
GitHub 上远程创建仓库不要创建 README 和 .gitignore 会给与远程仓库关联的命令

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

Code Review
点击一个版本按住 Shift 键再点击另一个版本就可以查看这两个版本之间项目的变化
选择 User 就可以查看筛选指定人对项目的改动
Live Template
Live Template 简介
如下图所示,打出勾选的字母就会弹出白色框中的代码段,所以如果我们有希望可以快捷输出的代码也可以自己制作一个代码模板。

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

- 测试
IDEA插件推荐
Lombok
Lombok 是一个 Java 库,能自动插入编辑器并构建工具,简化 Java 开发。通过添加注解的方式,不需要为类编写 getter、setter、equals、hashCode 方法,同时可以自动化日志变量。需要的读者推荐安装该插件简化开发:

Maven Helper
解决日常 Maven 依赖冲突问题必备神器:

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

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

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

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

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

Rainbow Brackets
Java 开发过程中,我们在使用 IntelliJ IDEA 开发工具时经常会出现编码过程中出现,缺失各种括号的情况,总是排查半天时间。所以我们推荐安装一个 Rainbow Brackets,可以很清晰明了地看清括号的位置和范围,方便大家尽快找到确实括号的位置,更能方便大家查看括号中代码的范围:

Smart Input Pro (Chinese)
对于母语为中文的开发者,写代码过程中经常需要在中/英输入法之间进行切换,而且由于不清楚当前处于哪种输入状态,有时输入到一半发现输入法错了,删除后重新输入,严重影响了编码效率。
其实,在很多特定场景需要使用哪种输入法是可以明确的,既然这样那就可以让 IDE 帮助我们自动切换输入法。Smart Input Pro 可以根据光标所处位置自动切换输入法,用光标颜色表示当前输入法状态,减少因切换输入法导致的输入错误,提升编码的流畅性和效率。
如下所示,可以看到当切换到代码段时,该插件会将输入法切换为英文:
一旦切换到注释代码段时,就会变为中文输入模式:
Git Commit Template
按照开发规范,Git 提交都要严格按照 feat、refactor、fix、docs 等标注说明本次提交代码等用意,但是每次手动管理确实是有点繁琐,所以我在此推荐一个提交 Git 注释等模板工具也就是 Git Commit Template

对应的使用方式也很简单,呼出git提交面板后,点击这个logo呼出提交面板

然后我们就可以根据本次迭代的功能补充相关说明,以笔者为例,本次修改了idea的一篇操作实践指南的文章,所以选用docs添加相关说明:

点击确定后就可以直接生成对应说明即可直接提交了:

小结
以上便是我对 IDEA 配置、日常快捷操作以及几个插件的推荐,希望对你有所帮助。
我是 SharkChili ,Java 开发者,Java Guide 开源项目维护者。欢迎关注我的公众号:写代码的SharkChili ,也欢迎您了解我的开源项目 mini-redis:github.com/shark-ctrl/...。
为方便与读者交流,现已创建读者群。关注上方公众号获取我的联系方式,添加时备注加群即可加入。
参考
- 关于调试HashMap源码的小心得(这篇是我耗费了断断续续两天才得出来的):blog.csdn.net/vigoss77/ar...
- Intellij IDEA 默认打开上次项目设置与取消设置:blog.csdn.net/u011442726/...
- 解决win11中快捷键不能使用的问题(shift+F6):blog.csdn.net/tianjiliuhe...
- Smart Input Pro (Chinese):plugins.jetbrains.com/plugin/2528...
- Lombok简介、使用、工作原理、优缺点:blog.csdn.net/ThinkWon/ar...
- idea 实用插件分享之Rainbow Brackets(彩虹括号):blog.csdn.net/weixin_4637...
- IDEA 2024 版本配置热部署:www.cnblogs.com/liuyangjava...
本文使用 markdown.com.cn 排版