0%

IDEA Usage

HOTKEY

Usage Search(使用查询)

key(Mac) | key(Win) | desc

  • | -
    cmd+opt+F7 | win+alt+F7 | 搜索光标所在方法的声明之处或者被调用到的地方,以弹窗方式显示
    opt+F7 | alt+F7 | 全局搜索引用
    cmd+shift+F7 | ^+shift+F7 | 高亮显示当前代码域使用到的地方
    F3 or shift+F3 | 搜索当前文件的模式下,按向下 or F3跳到下一处,按向上 or shift+F3跳到上一处
    tab or tab+shift | 在ctrl+shift+f全局搜索的时候,可以通过tab和来移动输入聚焦,可以脱离鼠标来选择右上角的File mask

Editing(编辑)

key(Mac) | key(Win) | desc

  • | -
    cmd+P | ^+P |显示方法的参数,这个方法的强大之处在于,展示了参数之后,在写入传参的时候,弹框会一直存在,让参数更加直观
    cmd++ | ^++ |展开折叠的代码
    cmd+- | ^+- | 折叠代码
    shift+上下方向键 | shift+上下方向键 | 有时候用vim插件的jk上下移动太慢了,而且又不能明确知道要用emacsIdeas调整到哪里,可以用idea自带的shift+上下方向键来快速上下移动代码
    cmd+shift+F12 | ^+shift+F12 | 最大化编辑窗口
    ^+shift+P | ^+shift+P | 查看方法返回变量类型

debug

key(Mac)| key(Win) | desc

  • | -
    cmd+shift+F8 | 查看断点信息
    shift+F7 | 智能步入,断点所在行上有多个方法调用,会弹出进入哪个方法
    ^+F5 | 重启debug服务
    cmd+F2 | 终止debug服务
    ^+cmd+W | 将Add to Watches绑定快捷键,可以快速查看变量或者表达式的值

Spring Boot 微服务

cmd+8 弹出多个微服务的启动控制窗口,可以通过上下左右移动快速定位到某个微服务,通过快捷键^+shiftF10 Runing,或者通过^+shift+F9 Debuging

General(通用)

key(Mac) | key(Win) | desc

  • | -
    cmd+, | ^+Alt+S | 打开Settings
    ^+cmd+F | 切换全屏模式
    ^+cmd+C | 清理控制台的日志之类的,需要再keymap里面设置Other | Clear All
    opt+F12 | 打开或关闭Terminal

Refactoring(重构)

key desc
F5 复制文件到指定包路径
F6 移动文件到指定包路径
opt+cmd+t surround with 快捷得用各种模板语法包括代码(这个很强大`)
opt+cmd+m 提取代码为方法
opt+cmd+c 提取代码为常量
opt+cmd+v 提取代码为变量
opt+cmd+f 提取代码为成员变量
opt+cmd+p 提取代码为方法的形参
opt+cmd+o 快速去掉多余的import

key(Mac) | key(Win) | desc

  • | -
    opt+F1 | alt+F1 | 跳转到当前代码文件很多相关的功能(强大)
    cmd+u | 前往当前光标所在方法的父类的方法 / 接口定义
    cmd+b | 进入定义处
    cmd+opt+b | 进入实现处
    cmd+o | 查询当前类可以继承实现的所有方法
    cmd+F12 | ^+F12 | 展示当前文件的结果大纲(可用于查询变量、方法等)
    ^+shift+B | 跳转到类型声明处,可以直接从类变量跳到对应的类里面
    F12 | 返回前一个工具窗口
    shift+esc | 隐藏当前或最后一个活动的窗口,且光标进入代码文件窗口
    opt+F1 | 显示当前文件选择目标弹出层,弹出层中有很多目标可以进行选择(如在代码编辑窗口可以选择显示该文件的 Finder)
    ⌃H | 显示当前类的层次结构(在类的任何地方可以快速跳转到父类、父接口、子类)
    ^+opt+H | 显示所有调用的层次结构
    ^+h | 显示类的所有子类型的相关内容
    shift+F4 | 在新窗口打开文件
    ^+F2 | 可以快速跳到idea的菜单栏,然后通过方向键和enter,可以快速进行一下菜单栏的操作,这个快捷键适合其他软件
    ^+opt+cmd+N | 跳到next method,这个是我自定义的
    ^+opt+cmd+P | 跳到previous method,这个是我自定义的
    跳到光标所在方法的方法名 | 先^+opt+cmd+N再^+opt+cmd+P,如果是最后一个方法就反之
    cmd+鼠标点击(在变量定义处) | 可以使用Field Accessors Found查找使用到该变量的地方

后缀补全

var

声明变量或者调用方法之后输入.var,可以自动生成前面的变量声明

null

某个变量或者表达式之后输入.null,自动生成if空判断

nn

某个变量或者表达式之后输入.nn,自动生成if不为空判断

not

某个变量或者表达式之后输入.not,自动生成取反

还有for、return、if、opt等等常用的

PLUGIN(插件)

emacsIdeas 最强大没有之一

注意如果和IdeaVim一同使用的话,类似^+W的快捷键要更改,不然会和IdeaVim的屏幕分割快捷键冲突了

jump

  • Plug-ins | emacsIDEAs | AceJumpSelect 选中当前位置到某个字符
  • Plug-ins | emacsIDEAs | HighlightPrevSymbol 高亮跳到上一个一样的字符
  • Plug-ins | emacsIDEAs | HighlightNextSymbol 高亮跳到下一个一样的字符

emacsIdeas copy

  • Plug-ins | emacsIDEAs | AceJumpCopy.Block 复制特定代码块到当前光标(可以是函数里面的整个形参定义)
  • Plug-ins | emacsIDEAs | AceJumpCopy.Line 复制特定行到当前光标
  • Plug-ins | emacsIDEAs | AceJumpCopy.Quote 复制特定的引用到当前光标,比如某个引号里面的内容
  • Plug-ins | emacsIDEAs | AceJumpCopy.String 复制特定的代码到当前光标,一般是某块前后由空格隔开的代码
  • Plug-ins | emacsIDEAs | AceJumpCopy.ToLineEnd 从当前位置复制到行尾
  • Plug-ins | emacsIDEAs | AceJumpCopy.ToLineStart 从当前位置复制到行首
  • Plug-ins | emacsIDEAs | AceJumpCopy.Paragraph 复制某个特定段落,比如类的某段注释
  • Plug-ins | emacsIDEAs | AceJumpCopy.Group 复制某块代码,可以使某个判断的条件+整个花括号{}里面的内容

emacsIdeas delete

  • Plug-ins | emacsIDEAs | AceJumpCut 从当前位置剪切到某个位置
  • Plug-ins | emacsIDEAs | AceJumpDelete.Block 删除特定的代码块
  • Plug-ins | emacsIDEAs | AceJumpDelete.Line 删除特定的代码行
  • Plug-ins | emacsIDEAs | AceJumpDelete.Quote 删除特定的引用代码,比如某个引号里面的内容
  • Plug-ins | emacsIDEAs | AceJumpDelete.String 删除特定的二个空格之间的字符
  • Plug-ins | emacsIDEAs | AceJumpDelete.Word 删除特定的某个变量方法名(紧挨在一起的代码标识)
  • Plug-ins | emacsIDEAs | AceJumpDelete.ToLineEnd 从当前位置删除到行尾
  • Plug-ins | emacsIDEAs | AceJumpDelete.ToLineStart 从当前位置删除到行首
  • Plug-ins | emacsIDEAs | AceJumpDelete.Paragraph 删除某个特定段落,比如类的某段注释

emacsIdeas cut

  • Plug-ins | emacsIDEAs | AceJumpCut 从光标当前位置剪切到某个位置

emacsIdeas more

AceJumpMove模式,各种快捷键的变种和上面的一样.etc.

ideaVim

yy 复制当值当前行,或者选中后y复制,然后输入数字n,再输入p,代表连续粘贴n次。
gg 快速移动到文件的开头
G 快速移动到文件的结尾

CamelCase

opt+shift+u 可以对字符进行驼峰式的不同格式变换,非常实用。

Grep Console

安装该日志插件,控制台的日志输出可以更加直观,还可以自定义颜色。

spring assistant(yml或者properties文件编写提示)

编写yml配置文件的时候,可以自动提示,但是这个自动提示貌似自会提示Spring Boot的基础配置,如果是在配置中心的话,其他的第三方依赖配置要在配置中心引入其spring-boot-starter的依赖才能自动提示对应的配置。

如果对应的依赖引入了之后还不会自动提示,那就需要再idea的模块配置里面将自定义的配置文件加入到配置文件的类别中,如下图:

选择右边的第一个Configuration Files,因为通常配置中心新增的都不会是Bootstrap类别的配置文件,如下图,然后点击下面的绿色按钮,也就是最后一个按钮

再点击下面的+号,选择对一个的yml或者properties,然后确认就ok了。

RestfulToolkit

这个插件可以自动收集项目的Restful风格的接口,还可以在idea里面直接填写参数调用接口
快捷键为cmd+\

MyBatis Log Plugin

自动打印Mybatis的每一个SQL,有时候我们要抽取SQL不是很方便

Free Mybatis plugin

Mapper与Mapper XML映射之间的调整,方便代码的跟踪查看。
而且还可以自动通过Mapper的方法矫正或者生成Mapper.xml的每个xml节点

.ignore(版本控制忽略文件的好插件)支持各种文件忽略的配置

https://blog.csdn.net/byy8023/article/details/82259155

可以根据项目的引用的构建工具能来针对性忽略


比如我的项目选择了JetBrains、MacOS、Java、Maven、Example user template

如果出现.gitgnore忽略了某些要被纳入版本控制的文件或目录比如:


直接删除掉想要重新纳入版本控制的目录或文件即可

maven的target反复被纳入版本控制

这个是因为之前target目录已经被版本控制了,需要先关闭idea的自动编译,然后mvn clean一下,再提交所有删除的target文件,然后恢复自动编译配置。

前提是.gitignore文件里面配置了Maven的忽略目录

JUnitGenerator V2.0

选中代码中的类名,按cmd+shift+T,可以生成自定义测试类。
https://blog.51cto.com/12066352/2134091

jclasslib Bytecode viewer

查看分析字节码的插件

JRebel

热部署插件,修改代码不用重启服务。

Alibaba Cloud Toolkit

阿里云发布的免费本地 IDE 插件,帮助开发者更高效地开发、测试、诊断并部署应用。通过插件,可以将本地应用一键部署到任意服务器,甚至云端(ECS、EDAS、ACK、ACR 和 小程序云等);并且还内置了 Arthas 诊断、Dubbo工具、Terminal 终端、文件上传、函数计算 和 MySQL 执行器等工具。不仅仅有 IntelliJ IDEA 主流版本,还有 Eclipse、Pycharm、Maven 等其他版本。

IDEA调优记录

Server模式

Selects server application runtime optimizations. The directory server will take longer to start and “warm up” but will be more aggressively optimized to produce higher throughput.

服务器模式对于应用的运行时优化得更好,可能启动和”预热”会较慢,但将进行更积极的优化运行期的性能,以产生更高的吞吐量。

1
- server

固定-Xmx与-Xms的大小,可能存在频繁扩容的消耗

1
2
-Xms2048m
-Xmx2048m

提高Minor的内存容量

1
-Xmn800m

-Xverify:none

Enables verification for all non-bootstrap classes.

该参数默认是-Xverify:remote等同于-Xverify,会对class加载验证,对性能有影响,毕竟IDEA已经被反复使用和验证过,没必要每次都验证。

For compatibility, this parameter is accepted, but is equivalent to the default -Xverify.
Note: This setting might have an impact on performance(-Xverify:all).

不过从JDK13开始,-Xverify:none已经被声明为deprecated了,并且在后面的版本中会有被删除的风险。

The option -Xverify:none (and its equivalent -noverify) was deprecated in Java 13. Both options might be removed in a future release. OpenJ9 issues a warning if these options are used in Java 13 and later versions.
参考来源

Others(其他)

修改包名要注意的地方

修改了包名之后注意在编译输出的目录要清空之前的老的class,不然可能会引起意想不到的冲突。

有没有更加智能化的API注释查看方法,比如鼠标+cmd的方式就完整地将注释都展示出来?

ctrl+J
可以搜索keymap需改热键,Quick Documentation

debug的时候变量的多种不同的View

在Variables右键要跟踪的变量,可以view text,或者view as 其他类型.

Performance enhancements(性能增加)

idea吃内存确实是有点恐怖,对于调大内存,网上基本都是说调整idea.vmoptions里面的这三个参数:

1
2
3
-Xms1024m
-Xmx3000m
-XX:ReservedCodeCacheSize=1024m

但是我自己是基于2019.02的版本,发现即使调整了之后重启,idea右下角的内存显示还是原来的Max。
其实要这样调整才能真正生效:
Help->Edit Custom VM Options
打开这个会发现里面的配置还是原来的,在这里更改再重启,右下角的内存Max才会变大,才能生效。

cmd+shift+A按第二次的时候老是换出Terminal

https://intellij-support.jetbrains.com/hc/en-us/articles/360005137400-Cmd-Shift-A-hotkey-opens-Terminal-with-apropos-search-instead-of-the-Find-Action-dialog

Bug

有时候会出现复制进来的新文件编译之后没有被输出到target对应的目录,应该是idea潜在的bug,如果点击重新加载文件索引太慢了,一般重启一下重新编译可以解决。

search(搜索)

全局搜索的时候记得利用好Scope,比如要搜索某个模块,某所最近更改的内容,搜索版本控制的所有更改等等。

Services

cmd+8可以将多个SpringBoot的服务(微服务)整一个打开控制,可以结合其他快捷键进行启动、重启和停止,不过第一次使用需要再右下角的弹框中点击确认。
此外在Spring Cloud多个微服务的情况下,还可以将不同的微服务分组然后统一对某个组别进行run、debug或者静默断点等操作。

使用lombok跟踪bean属性调用栈

opt+F7依然可以看到getter和setter的调用栈。

SpringBoot Application的热加载

要在debug模式下,设置Hot swap classes and update trigger file if failed,就可以自动热加载class了。

idea的svn的删除操作

本地删除之后要在,Locally Deleted Files中点击Remove from VCS,然后再回来上面的Default Changelist去执行Commit删除。

折叠显示文件

可以在设置中搜索Soft-Wrap,根据文件格式配置是否折叠显示超过屏幕的行,也可以通过快捷键绑定折叠当前文件。

提交代码前要先Optimize Imports一下

可以cmd+9,在Default Changelist上Optimize Imports(opt+cmd+O),这样就不会优化到其他没有修改到的代码,只操作自己改过的代码。

Run/Debug Configurations中Build和Build Project的区别


Build只会编译配置依赖的模块,Build Project会编译模块依赖的所有项目,将编译器交给Maven代工的话注意要选择Build Project。

重要日志可以在控制台Create Gist

创建之后的日志会被发送到已经在Idea登录的github账号里面的Github Gist

Maven

自带的Maven功能中,注意小浮窗的右上角有个闪电符号(Toggle Skip Test),可以开启是否跳过Test。
扳手按钮里里面的Auto-Reload Settings可以设置是否自动探测任何pom.xml的改动自动重新加载。

只编译每次改动的每个module

在未commit的Default Changelist中,选中list,快捷键编译一下全部改动过的代码,idea会编译每个代码对应的module。

all shortcut

1
2
新建文件的时候可以这样操作来脱离鼠标:
cmd+1跳到Project目录上下移动到目标目录,然后cmd+shift+A跳出Action,输入new+文件类型或者手动选择文件类型就可以了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
option+cmd+c 抽取局部字符串为静态变量
cmd+shift+方向键 可以控制模态框的大小,和左右移动编辑区的内容
ctrl+j 展示API文档
ctrl+shift+F,[words 打钩可以搜索是否为单词]
command+D,
commond+F12(file structure)
command+shift+N(search file's name and global)
commond+option+shift+N(search method d variable global)
shirt + option + (向上箭头)/(向下箭头)(move codes up or down)
Command + Option + L(Format code)
option+enter(add javadoc)
option+command+b(jump into the class impl)
command+e(recent file)
command+shift+a(search action)
command+number(window tab jump)
shift(ctrl)+command+del(last(next) edit location)
F11,command+F11,ctrl+number(alphabet)(bookmarks)
option+shift+F(add to favorites)
shift+option+U(toggle case)
command+1,esc(switch between file navigate and edit area)
option+F7(find usage)
shift+option+方向(move caret to next word)
command+方向(move to first or end of line)
ctrl+command+G(sellect all occurrences) HOT
F2(Quickly locate the wrong line)
option+command+V(generate locate variable)
shift+command+enter(generate some code)
option+enter(generate some method)
command+R(replace)
shift+F6(rename)
option+command+V(Extract Variable)
option+command+C(Extract static Variable) HOT
option+command+F(Extract field Variable)
option+command+P(Extract field Variable into method)
option+command+M(Extract some code to be a new method)HOT
shift+command+F8(show all breakPoints)
shift+command+V(copy history)
shift+option+command+U(show maven dependencies)
option+command+U(show class inherit) HOT
ctrl+option+H(call method or be called history)
ctrl+N(Generate anything)
ctrl+w(select something)
ctrl+< or > (move up or down next method) HOT
cmd+option+T (surround) HOT

Problem Solution

编译出现莫名其妙的找不到符号的Error

如果找不到符号的错误行数,刚好式同包下的某个类找不到符号报错,那么可能式idea的类编译顺序冲突了,找到报错行上引用到的类,先单独编译应用到的类,再编译报错的类,最后编译整个项目就可以了。

非静默模式下断点失效`

断点处提示:idea debug no executable code found
这个一般是class和idea的代码不一致导致的。
解决办法:
1、invalidate Caches/Restart
2、rebuild Project
3、class的输出路径正确
4、我自己是因为jboss的On ‘update’ action 被设置成了Restart Server,热部署应该改为:Update classes and resources

某个jar依赖冲突问题的解决

公司项目中cglib的包依赖了二个log4j的包,导致控制台启动会报错。 删除项目输出目录下的lib,设置依赖jar的scope为provided。

然后重新部署启动就可以了。

debug启动微服务莫名其妙卡住的情况

竟然是因为我在某个方法的声明上打了断点,然后我静默断点时就可以debug启动微服务了:

于是我果断把断点去掉,然后再检查一遍有没有打到方法声明上的断点,全都取消之后重启debug就可以了。

记录Idea关于Maven依赖的一个致命Bug

基于版本2019.3.4

公司的微服务架构的用的Maven管理依赖,关于流程flowable的的模块ngbip-flow及其几个子模块我放在一个单独的文件夹下面;

另外的一个项目也是基于微服务架构依赖ngbip-flow及其几个子模块,然后由于启动报了个莫名其妙的错误,于是我删掉了项目对公司自研的所有依赖,重新引入;

但是这个时候idea移动将ngbip-flow的几个模块的依赖强制指向了上面提到的单独的文件夹下面的ngbip-flow几个子模块的代码文件,不走maven去依赖了,我TM是不同的文件夹(不同的工作区间啊,打开的是不同的idea窗口);

最后的硬核解决方法是,将原来的单独文件夹重命名个名字,这个时候另外的项目一下子就自动重新引入ngbip-flow的maven依赖,不会强制走开发机的其他文件夹下面的依赖,然后我再把文件夹名字改回来即可。

Maven代码不能指向本地工程module代码

如果出现idea的Modules已经存在,但是代码不能通过Maven依赖到已经引入的module时(此时Maven管理界面可能会出现已经引入的model的maven可视化没有出现),这个时候在工程的Modules删除重新引入应该就可以了。

Idea出现所有引导到的类报错,连jdk的基础类也报错的情况

可能是不了心设置了Editor->File Type中忽略了*.class导致的。
如果是项目引入自己项目的代码也报错,可以删掉模块重新import。

Idea关闭写代码形参提示(会导致变卡)

https://cdn.jsdelivr.net/gh/coding-by-feng/oss@master/uPic/RVmJT6.png

有部分内容来自网络,一般都有注明出处,如若侵权,请联系我删除,谢谢!

将默认编译委托为Maven编译时,运行main方法报错

默认的Application Run/Debug Configurations配置的Before launch会有一个Build,要将其删掉,Before launch留空即可,因为此时Idea本身已经不再参与编译了,交由Maven来处理。

Cannot start under Java 1.8.0_152-release-b1024: Java 11 or later is required.

通过/usr/libexec/java_home找到自己版本适合的jdk目录,在Mac下面修改Idea启动的依赖jdk即可:

1
vi /Users/zhanshifeng/Library/Application Support/JetBrains/IntelliJIdea2020.3/idea.jdk

Idea出现写代码频繁卡死,特别是在括号之间输入一直卡死的问题

关闭Inspections里面的Ali-Check,阿里的东西,要慎用!